19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
+
-
+
-
+
|
ValueToIRExpr( ValuePattern(
ANYTERM( _ ),
localVarPattern,
ANYTERM( _ ) ) ),
[]( const Term& lhs, const Term& rhs, UnificationContext& c ) -> UniGen
{
auto lvval = *ValueFromIRExpr( rhs );
auto locvar = FromValue< LocalVar >( *ValueFromIRExpr( rhs ) );
auto locvar = FromValue< LocalVar >( lvval );
if( !locvar )
co_return;
auto varcontent = ValueToIRExpr( BuildComputedValue( locvar->type(),
GetVar( locvar->type(), locvar->index() ) ) );
GetVar( locvar->type(), locvar->index() ) ).setLocationId( lvval.locationId() ) );
// Unify the param with the var's content
co_yield Unify( lhs, varcontent, c );
} );
// LocalVar unification against another LocalVar: unify their types.
e.unificationRuleSet()->addSymRule(
|