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