#include "builtins/builtins.h"
#include "parse/parse.h"
using namespace goose::parse;
using namespace goose::cir;
namespace goose::builtins
{
void SetupPropositionsDropValue( Env& e )
{
// When a boolean is dropped into Propositions, it is appended as a new proposition.
RegisterBuiltinFunc< Intrinsic< void ( TypeWrapper< ptr< Propositions > >, bool ) > >( e, e.extDropValue(),
[]( const Context& c, const Value& p, const Value& v )
{
auto props = *FromValue< TypeWrapper< ptr< Propositions > > >( p );
props->append( v );
} );
// When anything else is dropped into Propositions, complain if we're only supposed
// to have bools.
RegisterBuiltinFunc< Intrinsic< void ( TypeWrapper< ptr< Propositions > >, Value ) > >( e, e.extDropValue(),
[]( const Context& c, const Value& p, const Value& v )
{
auto props = *FromValue< TypeWrapper< ptr< Propositions > > >( p );
props->poison();
DiagnosticsManager::GetInstance().emitErrorMessage( v.locationId(),
"only boolean expressions are allowed in proposition lists.", 0 );
} );
}
}