Goose  Diff

Differences From Artifact [f375a868db]:

  • File bs/builtins/types/overloadset/helpers.cpp — part of check-in [060e84f233] at 2020-06-20 19:59:21 on branch trunk — Verifier: some fixes to correctly handle tuples. Still not quite working yet. (user: achavasse size: 2740)

To Artifact [0412d07ad8]:

  • File bs/builtins/types/overloadset/helpers.cpp — part of check-in [7d2def7b75] at 2020-12-27 14:40:24 on branch trunk — Renamed "ir" to "eir" (expression intermediate representation) and "llr" to "cir" (code intermediate representation) for clarity. (user: achavasse size: 2740)

62
63
64
65
66
67
68
69

70
71
72
73
74
75
76

77
78
79
80
81
62
63
64
65
66
67
68

69
70
71
72
73
74
75

76
77
78
79
80
81







-
+






-
+





        assert( pOvlSet );

        Context localC( c.env(), c.identity(), GetValueType< uint32_t >() );
        localC.setBuilder( c.codeBuilder() );

        execute::VM vm;

        if( !args.isConstant() && llr::CanValueBeEagerlyEvaluated( args ) )
        if( !args.isConstant() && cir::CanValueBeEagerlyEvaluated( args ) )
            args = execute::Evaluate( args, vm );
        if( args.isPoison() )
            return PoisonValue();

        auto val = ResolveInvocation( localC, GetOverloadSetInvocationRule(), ToValue( pOvlSet ), args );

        if( val.isConstant() || !llr::CanValueBeEagerlyEvaluated( val ) )
        if( val.isConstant() || !cir::CanValueBeEagerlyEvaluated( val ) )
            return val;

        return execute::Evaluate( val, vm );
    }
}