Program {
    items: [
        ExternFunction(
            ExternalFunction {
                extern_fn_token: Token {
                    kind: Identifier,
                    location: Location {
                        start: 123,
                        end: 129,
                    },
                },
                fn_token: Token {
                    kind: Identifier,
                    location: Location {
                        start: 130,
                        end: 132,
                    },
                },
                name: Token {
                    kind: Identifier,
                    location: Location {
                        start: 133,
                        end: 146,
                    },
                },
                opening_paren: Token {
                    kind: Symbol,
                    location: Location {
                        start: 146,
                        end: 147,
                    },
                },
                arguments: [
                    FunctionArgument {
                        name: Token {
                            kind: Identifier,
                            location: Location {
                                start: 147,
                                end: 148,
                            },
                        },
                        colon: Token {
                            kind: Symbol,
                            location: Location {
                                start: 148,
                                end: 149,
                            },
                        },
                        reference_token: None,
                        arg_type: TypeHint {
                            type_name: Token {
                                kind: Identifier,
                                location: Location {
                                    start: 150,
                                    end: 153,
                                },
                            },
                        },
                    },
                    FunctionArgument {
                        name: Token {
                            kind: Identifier,
                            location: Location {
                                start: 155,
                                end: 156,
                            },
                        },
                        colon: Token {
                            kind: Symbol,
                            location: Location {
                                start: 156,
                                end: 157,
                            },
                        },
                        reference_token: None,
                        arg_type: TypeHint {
                            type_name: Token {
                                kind: Identifier,
                                location: Location {
                                    start: 158,
                                    end: 161,
                                },
                            },
                        },
                    },
                ],
                closing_paren: Token {
                    kind: Symbol,
                    location: Location {
                        start: 161,
                        end: 162,
                    },
                },
                return_decl: Some(
                    ReturnDecl {
                        return_token: Token {
                            kind: Symbol,
                            location: Location {
                                start: 163,
                                end: 165,
                            },
                        },
                        return_type: TypeHint {
                            type_name: Token {
                                kind: Identifier,
                                location: Location {
                                    start: 166,
                                    end: 172,
                                },
                            },
                        },
                    },
                ),
                semicolon: Token {
                    kind: Symbol,
                    location: Location {
                        start: 172,
                        end: 173,
                    },
                },
            },
        ),
        ExternFunction(
            ExternalFunction {
                extern_fn_token: Token {
                    kind: Identifier,
                    location: Location {
                        start: 174,
                        end: 180,
                    },
                },
                fn_token: Token {
                    kind: Identifier,
                    location: Location {
                        start: 181,
                        end: 183,
                    },
                },
                name: Token {
                    kind: Identifier,
                    location: Location {
                        start: 184,
                        end: 191,
                    },
                },
                opening_paren: Token {
                    kind: Symbol,
                    location: Location {
                        start: 191,
                        end: 192,
                    },
                },
                arguments: [
                    FunctionArgument {
                        name: Token {
                            kind: Identifier,
                            location: Location {
                                start: 192,
                                end: 193,
                            },
                        },
                        colon: Token {
                            kind: Symbol,
                            location: Location {
                                start: 193,
                                end: 194,
                            },
                        },
                        reference_token: None,
                        arg_type: TypeHint {
                            type_name: Token {
                                kind: Identifier,
                                location: Location {
                                    start: 195,
                                    end: 201,
                                },
                            },
                        },
                    },
                ],
                closing_paren: Token {
                    kind: Symbol,
                    location: Location {
                        start: 201,
                        end: 202,
                    },
                },
                return_decl: Some(
                    ReturnDecl {
                        return_token: Token {
                            kind: Symbol,
                            location: Location {
                                start: 203,
                                end: 205,
                            },
                        },
                        return_type: TypeHint {
                            type_name: Token {
                                kind: Identifier,
                                location: Location {
                                    start: 206,
                                    end: 212,
                                },
                            },
                        },
                    },
                ),
                semicolon: Token {
                    kind: Symbol,
                    location: Location {
                        start: 212,
                        end: 213,
                    },
                },
            },
        ),
        Function(
            Function {
                fn_token: Token {
                    kind: Identifier,
                    location: Location {
                        start: 215,
                        end: 217,
                    },
                },
                name: Token {
                    kind: Identifier,
                    location: Location {
                        start: 218,
                        end: 222,
                    },
                },
                opening_paren: Token {
                    kind: Symbol,
                    location: Location {
                        start: 222,
                        end: 223,
                    },
                },
                arguments: [],
                closing_paren: Token {
                    kind: Symbol,
                    location: Location {
                        start: 223,
                        end: 224,
                    },
                },
                return_decl: Some(
                    ReturnDecl {
                        return_token: Token {
                            kind: Symbol,
                            location: Location {
                                start: 225,
                                end: 227,
                            },
                        },
                        return_type: TypeHint {
                            type_name: Token {
                                kind: Identifier,
                                location: Location {
                                    start: 228,
                                    end: 232,
                                },
                            },
                        },
                    },
                ),
                body: Body {
                    opening_brace: Token {
                        kind: Symbol,
                        location: Location {
                            start: 233,
                            end: 234,
                        },
                    },
                    statements: [
                        VariableDefinition(
                            VariableDefinition {
                                decl_token: Token {
                                    kind: Identifier,
                                    location: Location {
                                        start: 239,
                                        end: 242,
                                    },
                                },
                                identifier: Token {
                                    kind: Identifier,
                                    location: Location {
                                        start: 243,
                                        end: 244,
                                    },
                                },
                                type_token: None,
                                equals_token: Token {
                                    kind: Symbol,
                                    location: Location {
                                        start: 245,
                                        end: 246,
                                    },
                                },
                                initializer: FunctionCall {
                                    name: Token {
                                        kind: Identifier,
                                        location: Location {
                                            start: 247,
                                            end: 260,
                                        },
                                    },
                                    arguments: [
                                        Literal {
                                            value: Literal {
                                                value: Integer(
                                                    2,
                                                ),
                                                location: Location {
                                                    start: 261,
                                                    end: 262,
                                                },
                                            },
                                        },
                                        Literal {
                                            value: Literal {
                                                value: Integer(
                                                    3,
                                                ),
                                                location: Location {
                                                    start: 264,
                                                    end: 265,
                                                },
                                            },
                                        },
                                    ],
                                },
                                semicolon: Token {
                                    kind: Symbol,
                                    location: Location {
                                        start: 266,
                                        end: 267,
                                    },
                                },
                            },
                        ),
                        Return(
                            ReturnWithValue {
                                return_token: Token {
                                    kind: Identifier,
                                    location: Location {
                                        start: 272,
                                        end: 278,
                                    },
                                },
                                expression: BinaryOperator {
                                    name: Token {
                                        kind: Symbol,
                                        location: Location {
                                            start: 286,
                                            end: 288,
                                        },
                                    },
                                    operands: [
                                        BinaryOperator {
                                            name: Token {
                                                kind: Symbol,
                                                location: Location {
                                                    start: 281,
                                                    end: 283,
                                                },
                                            },
                                            operands: [
                                                Variable {
                                                    variable: Token {
                                                        kind: Identifier,
                                                        location: Location {
                                                            start: 279,
                                                            end: 280,
                                                        },
                                                    },
                                                },
                                                Literal {
                                                    value: Literal {
                                                        value: Integer(
                                                            5,
                                                        ),
                                                        location: Location {
                                                            start: 284,
                                                            end: 285,
                                                        },
                                                    },
                                                },
                                            ],
                                        },
                                        BinaryOperator {
                                            name: Token {
                                                kind: Symbol,
                                                location: Location {
                                                    start: 304,
                                                    end: 306,
                                                },
                                            },
                                            operands: [
                                                FunctionCall {
                                                    name: Token {
                                                        kind: Identifier,
                                                        location: Location {
                                                            start: 289,
                                                            end: 296,
                                                        },
                                                    },
                                                    arguments: [
                                                        Literal {
                                                            value: Literal {
                                                                value: String(
                                                                    "oof",
                                                                ),
                                                                location: Location {
                                                                    start: 297,
                                                                    end: 302,
                                                                },
                                                            },
                                                        },
                                                    ],
                                                },
                                                Literal {
                                                    value: Literal {
                                                        value: String(
                                                            "foo",
                                                        ),
                                                        location: Location {
                                                            start: 307,
                                                            end: 312,
                                                        },
                                                    },
                                                },
                                            ],
                                        },
                                    ],
                                },
                                semicolon: Token {
                                    kind: Symbol,
                                    location: Location {
                                        start: 312,
                                        end: 313,
                                    },
                                },
                            },
                        ),
                    ],
                    closing_brace: Token {
                        kind: Symbol,
                        location: Location {
                            start: 314,
                            end: 315,
                        },
                    },
                },
            },
        ),
        Function(
            Function {
                fn_token: Token {
                    kind: Identifier,
                    location: Location {
                        start: 317,
                        end: 319,
                    },
                },
                name: Token {
                    kind: Identifier,
                    location: Location {
                        start: 320,
                        end: 334,
                    },
                },
                opening_paren: Token {
                    kind: Symbol,
                    location: Location {
                        start: 334,
                        end: 335,
                    },
                },
                arguments: [],
                closing_paren: Token {
                    kind: Symbol,
                    location: Location {
                        start: 335,
                        end: 336,
                    },
                },
                return_decl: Some(
                    ReturnDecl {
                        return_token: Token {
                            kind: Symbol,
                            location: Location {
                                start: 337,
                                end: 339,
                            },
                        },
                        return_type: TypeHint {
                            type_name: Token {
                                kind: Identifier,
                                location: Location {
                                    start: 340,
                                    end: 344,
                                },
                            },
                        },
                    },
                ),
                body: Body {
                    opening_brace: Token {
                        kind: Symbol,
                        location: Location {
                            start: 345,
                            end: 346,
                        },
                    },
                    statements: [
                        VariableDefinition(
                            VariableDefinition {
                                decl_token: Token {
                                    kind: Identifier,
                                    location: Location {
                                        start: 351,
                                        end: 354,
                                    },
                                },
                                identifier: Token {
                                    kind: Identifier,
                                    location: Location {
                                        start: 355,
                                        end: 356,
                                    },
                                },
                                type_token: None,
                                equals_token: Token {
                                    kind: Symbol,
                                    location: Location {
                                        start: 357,
                                        end: 358,
                                    },
                                },
                                initializer: FunctionCall {
                                    name: Token {
                                        kind: Identifier,
                                        location: Location {
                                            start: 359,
                                            end: 372,
                                        },
                                    },
                                    arguments: [
                                        Literal {
                                            value: Literal {
                                                value: Integer(
                                                    2,
                                                ),
                                                location: Location {
                                                    start: 373,
                                                    end: 374,
                                                },
                                            },
                                        },
                                        Literal {
                                            value: Literal {
                                                value: Integer(
                                                    3,
                                                ),
                                                location: Location {
                                                    start: 376,
                                                    end: 377,
                                                },
                                            },
                                        },
                                    ],
                                },
                                semicolon: Token {
                                    kind: Symbol,
                                    location: Location {
                                        start: 378,
                                        end: 379,
                                    },
                                },
                            },
                        ),
                        VariableDefinition(
                            VariableDefinition {
                                decl_token: Token {
                                    kind: Identifier,
                                    location: Location {
                                        start: 384,
                                        end: 387,
                                    },
                                },
                                identifier: Token {
                                    kind: Identifier,
                                    location: Location {
                                        start: 388,
                                        end: 389,
                                    },
                                },
                                type_token: None,
                                equals_token: Token {
                                    kind: Symbol,
                                    location: Location {
                                        start: 390,
                                        end: 391,
                                    },
                                },
                                initializer: FunctionCall {
                                    name: Token {
                                        kind: Identifier,
                                        location: Location {
                                            start: 392,
                                            end: 405,
                                        },
                                    },
                                    arguments: [
                                        Literal {
                                            value: Literal {
                                                value: Integer(
                                                    3,
                                                ),
                                                location: Location {
                                                    start: 406,
                                                    end: 407,
                                                },
                                            },
                                        },
                                        Literal {
                                            value: Literal {
                                                value: Integer(
                                                    2,
                                                ),
                                                location: Location {
                                                    start: 409,
                                                    end: 410,
                                                },
                                            },
                                        },
                                    ],
                                },
                                semicolon: Token {
                                    kind: Symbol,
                                    location: Location {
                                        start: 411,
                                        end: 412,
                                    },
                                },
                            },
                        ),
                        Return(
                            ReturnWithValue {
                                return_token: Token {
                                    kind: Identifier,
                                    location: Location {
                                        start: 417,
                                        end: 423,
                                    },
                                },
                                expression: BinaryOperator {
                                    name: Token {
                                        kind: Symbol,
                                        location: Location {
                                            start: 426,
                                            end: 428,
                                        },
                                    },
                                    operands: [
                                        Variable {
                                            variable: Token {
                                                kind: Identifier,
                                                location: Location {
                                                    start: 424,
                                                    end: 425,
                                                },
                                            },
                                        },
                                        Variable {
                                            variable: Token {
                                                kind: Identifier,
                                                location: Location {
                                                    start: 429,
                                                    end: 430,
                                                },
                                            },
                                        },
                                    ],
                                },
                                semicolon: Token {
                                    kind: Symbol,
                                    location: Location {
                                        start: 430,
                                        end: 431,
                                    },
                                },
                            },
                        ),
                    ],
                    closing_brace: Token {
                        kind: Symbol,
                        location: Location {
                            start: 432,
                            end: 433,
                        },
                    },
                },
            },
        ),
        Function(
            Function {
                fn_token: Token {
                    kind: Identifier,
                    location: Location {
                        start: 435,
                        end: 437,
                    },
                },
                name: Token {
                    kind: Identifier,
                    location: Location {
                        start: 438,
                        end: 448,
                    },
                },
                opening_paren: Token {
                    kind: Symbol,
                    location: Location {
                        start: 448,
                        end: 449,
                    },
                },
                arguments: [],
                closing_paren: Token {
                    kind: Symbol,
                    location: Location {
                        start: 449,
                        end: 450,
                    },
                },
                return_decl: Some(
                    ReturnDecl {
                        return_token: Token {
                            kind: Symbol,
                            location: Location {
                                start: 451,
                                end: 453,
                            },
                        },
                        return_type: TypeHint {
                            type_name: Token {
                                kind: Identifier,
                                location: Location {
                                    start: 454,
                                    end: 457,
                                },
                            },
                        },
                    },
                ),
                body: Body {
                    opening_brace: Token {
                        kind: Symbol,
                        location: Location {
                            start: 458,
                            end: 459,
                        },
                    },
                    statements: [
                        VariableDefinition(
                            VariableDefinition {
                                decl_token: Token {
                                    kind: Identifier,
                                    location: Location {
                                        start: 464,
                                        end: 467,
                                    },
                                },
                                identifier: Token {
                                    kind: Identifier,
                                    location: Location {
                                        start: 468,
                                        end: 469,
                                    },
                                },
                                type_token: None,
                                equals_token: Token {
                                    kind: Symbol,
                                    location: Location {
                                        start: 470,
                                        end: 471,
                                    },
                                },
                                initializer: Literal {
                                    value: Literal {
                                        value: Integer(
                                            0,
                                        ),
                                        location: Location {
                                            start: 472,
                                            end: 473,
                                        },
                                    },
                                },
                                semicolon: Token {
                                    kind: Symbol,
                                    location: Location {
                                        start: 473,
                                        end: 474,
                                    },
                                },
                            },
                        ),
                        Scope(
                            Body {
                                opening_brace: Token {
                                    kind: Symbol,
                                    location: Location {
                                        start: 479,
                                        end: 480,
                                    },
                                },
                                statements: [
                                    VariableDefinition(
                                        VariableDefinition {
                                            decl_token: Token {
                                                kind: Identifier,
                                                location: Location {
                                                    start: 537,
                                                    end: 540,
                                                },
                                            },
                                            identifier: Token {
                                                kind: Identifier,
                                                location: Location {
                                                    start: 541,
                                                    end: 542,
                                                },
                                            },
                                            type_token: None,
                                            equals_token: Token {
                                                kind: Symbol,
                                                location: Location {
                                                    start: 543,
                                                    end: 544,
                                                },
                                            },
                                            initializer: Literal {
                                                value: Literal {
                                                    value: Integer(
                                                        1,
                                                    ),
                                                    location: Location {
                                                        start: 545,
                                                        end: 546,
                                                    },
                                                },
                                            },
                                            semicolon: Token {
                                                kind: Symbol,
                                                location: Location {
                                                    start: 546,
                                                    end: 547,
                                                },
                                            },
                                        },
                                    ),
                                ],
                                closing_brace: Token {
                                    kind: Symbol,
                                    location: Location {
                                        start: 552,
                                        end: 553,
                                    },
                                },
                            },
                        ),
                        ImplicitReturn(
                            FunctionCall {
                                name: Token {
                                    kind: Identifier,
                                    location: Location {
                                        start: 558,
                                        end: 575,
                                    },
                                },
                                arguments: [
                                    Variable {
                                        variable: Token {
                                            kind: Identifier,
                                            location: Location {
                                                start: 576,
                                                end: 577,
                                            },
                                        },
                                    },
                                ],
                            },
                        ),
                    ],
                    closing_brace: Token {
                        kind: Symbol,
                        location: Location {
                            start: 579,
                            end: 580,
                        },
                    },
                },
            },
        ),
        Function(
            Function {
                fn_token: Token {
                    kind: Identifier,
                    location: Location {
                        start: 582,
                        end: 584,
                    },
                },
                name: Token {
                    kind: Identifier,
                    location: Location {
                        start: 585,
                        end: 602,
                    },
                },
                opening_paren: Token {
                    kind: Symbol,
                    location: Location {
                        start: 602,
                        end: 603,
                    },
                },
                arguments: [
                    FunctionArgument {
                        name: Token {
                            kind: Identifier,
                            location: Location {
                                start: 603,
                                end: 604,
                            },
                        },
                        colon: Token {
                            kind: Symbol,
                            location: Location {
                                start: 604,
                                end: 605,
                            },
                        },
                        reference_token: None,
                        arg_type: TypeHint {
                            type_name: Token {
                                kind: Identifier,
                                location: Location {
                                    start: 606,
                                    end: 609,
                                },
                            },
                        },
                    },
                ],
                closing_paren: Token {
                    kind: Symbol,
                    location: Location {
                        start: 609,
                        end: 610,
                    },
                },
                return_decl: Some(
                    ReturnDecl {
                        return_token: Token {
                            kind: Symbol,
                            location: Location {
                                start: 611,
                                end: 613,
                            },
                        },
                        return_type: TypeHint {
                            type_name: Token {
                                kind: Identifier,
                                location: Location {
                                    start: 614,
                                    end: 617,
                                },
                            },
                        },
                    },
                ),
                body: Body {
                    opening_brace: Token {
                        kind: Symbol,
                        location: Location {
                            start: 618,
                            end: 619,
                        },
                    },
                    statements: [
                        Scope(
                            Body {
                                opening_brace: Token {
                                    kind: Symbol,
                                    location: Location {
                                        start: 624,
                                        end: 625,
                                    },
                                },
                                statements: [
                                    ImplicitReturn(
                                        Variable {
                                            variable: Token {
                                                kind: Identifier,
                                                location: Location {
                                                    start: 634,
                                                    end: 635,
                                                },
                                            },
                                        },
                                    ),
                                ],
                                closing_brace: Token {
                                    kind: Symbol,
                                    location: Location {
                                        start: 640,
                                        end: 641,
                                    },
                                },
                            },
                        ),
                    ],
                    closing_brace: Token {
                        kind: Symbol,
                        location: Location {
                            start: 642,
                            end: 643,
                        },
                    },
                },
            },
        ),
    ],
}