#include "sema.h"
namespace empathy::sema
{
Term ToIRExpr( const Hole& h )
{
return visit( [&]( auto&& x )
{
return TVEC( TSID( hole ), TERM( x ) ).setNumHoles( 1 );
}, h );
}
optional< Hole > HoleFromIRExpr( const Term& t )
{
auto resultUnnamed = Decompose( t,
Vec(
Lit( "hole"_sid ),
Val< uint64_t >()
)
);
if( resultUnnamed )
{
auto&& [index] = *resultUnnamed;
return index;
}
auto resultNamed = Decompose( t,
Vec(
Lit( "hole"_sid ),
Val< StringId >()
)
);
if( resultNamed )
{
auto&& [name] = *resultNamed;
return name;
}
return nullopt;
}
}