#include "builtins/builtins.h"
using namespace goose::builtins;
namespace goose::builtins
{
bool IsTNamedDecl( const Value& td )
{
return td.type() == GetValueType< TNamedDecl >();
}
const Term& TNamedDecl::Pattern::GetPattern()
{
static auto pattern = GetValueType< TNamedDecl >();
return pattern;
}
}
namespace goose::eir
{
const Term& Bridge< TNamedDecl >::Type()
{
static auto type = ValueToEIR( Value( TypeType(), TSID( tnameddecl ) ) );
return type;
}
Value Bridge< TNamedDecl >::ToValue( const TNamedDecl& td )
{
return Value( Type(), VEC( td.type(), TERM( td.name() ) ) );
}
optional< TNamedDecl > Bridge< TNamedDecl >::FromValue( const Value& v )
{
if( !IsTNamedDecl( v ) )
return nullopt;
auto result = Decompose( v.val(),
Vec(
SubTerm(),
Val< StringId >()
)
);
if( !result )
return nullopt;
auto&& [type,name] = *result;
return TNamedDecl( type, name );
}
}