// Copyright (C) 2022-2025 Free Software Foundation, Inc.

// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program.  If not, see <http://www.gnu.org/licenses/>.

#![allow(warnings)]

fn five() -> i32 { 5 }

fn main() {
    let foo = Foo {x: 5, f: five};
    foo.print();  // set breakpoint here
    println!("Hello, world! {}, {}, {}", foo.f(), (foo.f)(),
             foo.g ());
}

struct Foo {
    x :i32,
    f: fn () -> i32,
}

impl Foo {
    fn print(&self) {
        println!("hello {}", self.x)
    }

    fn f(&self) -> i32 { 6 }
    fn g(&self) -> i32 { 7 }
}
