Goose  Diff

Differences From Artifact [cf6a7cd315]:

  • File bs/builtins/types/localvar/typecheck.cpp — part of check-in [d9414ddc6f] at 2023-03-28 19:44:45 on branch trunk — Get rid of the TCRINFOS macro, use std::source_location instead to remove some noise (user: zlodo size: 1274)

To Artifact [6b8abfb4d6]:

  • File bs/builtins/types/localvar/typecheck.cpp — part of check-in [0db147f117] at 2024-09-15 20:24:31 on branch cir-ssa-refactor — Add clang format settings, reformat everything (user: achavasse size: 1350)

11
12
13
14
15
16
17
18
19
20
21
22
23
24

25
26
27
28
29
30
31

32
33

34
35
36
37
        auto localVarPattern = GetValueType< LocalVar >( ANYTERM( _ ) );

        // LocalVar type checking against another LocalVar: unify their types.
        e.typeCheckingRuleSet()->addTypeCheckingRule(

            ParamPat( localVarPattern ),

            ValueToEIR( ValuePattern(
                ANYTERM( _ ),
                localVarPattern,
                ANYTERM( _ ) ) ),

            []( const Term& lhs, const Term& rhs, const TypeCheckingContext& tcc ) -> TCGen
            {

                auto lvarType = *FromValue< LocalVarType >( *EIRToValue( EIRToValuePattern( lhs )->type() ) );

                auto rhsVal = *EIRToValuePattern( rhs );
                auto rvarType = *FromValue< LocalVarType >( *EIRToValue( rhsVal.type() ) );

                for( auto&& [s, tcc] : Unify( lvarType.type(), rvarType.type(), tcc ) )
                {

                    co_yield { ValueToEIR( Value( ValueToEIR( ToValue( LocalVarType( s ) ) ),
                        rhsVal.val() ).setLocationId( rhsVal.locationId() ) ), tcc };

                }
            } );
    }
}







|
<
<
<



>
|






>
|
|
>



|
11
12
13
14
15
16
17
18



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
        auto localVarPattern = GetValueType< LocalVar >( ANYTERM( _ ) );

        // LocalVar type checking against another LocalVar: unify their types.
        e.typeCheckingRuleSet()->addTypeCheckingRule(

            ParamPat( localVarPattern ),

            ValueToEIR( ValuePattern( ANYTERM( _ ), localVarPattern, ANYTERM( _ ) ) ),




            []( const Term& lhs, const Term& rhs, const TypeCheckingContext& tcc ) -> TCGen
            {
                auto lvarType =
                    *FromValue< LocalVarType >( *EIRToValue( EIRToValuePattern( lhs )->type() ) );

                auto rhsVal = *EIRToValuePattern( rhs );
                auto rvarType = *FromValue< LocalVarType >( *EIRToValue( rhsVal.type() ) );

                for( auto&& [s, tcc] : Unify( lvarType.type(), rvarType.type(), tcc ) )
                {
                    co_yield { ValueToEIR(
                                   Value( ValueToEIR( ToValue( LocalVarType( s ) ) ), rhsVal.val() )
                                       .setLocationId( rhsVal.locationId() ) ),
                        tcc };
                }
            } );
    }
} // namespace goose::builtins