#include "ir/ir.h"
#include "sema/sema.h"
#include "lex/lexer.h"
#include "parse/parse.h"
#include "builtins/builtins.h"
using namespace std;
using namespace empathy;
using namespace empathy::util;
int main( int argc, char** argv )
{
// Just a dumping place for simple test code for now.
auto filename = make_shared< string >( "em/lib/empathy.em" );
ifstream sourcefile( filename->c_str() );
if( !sourcefile.good() )
{
cout << "can't open '" << *filename << "'\n";
return EXIT_FAILURE;
}
// Simple parser test
auto pEnv = make_shared< sema::Env >();
builtins::SetupBuiltins( *pEnv );
// Builtin function registration test
builtins::RegisterBuiltinFunc< void ( string ) >( *pEnv, "Print"_sid,
[]( const string& str )
{
cout << str << endl;
} );
sema::Context c( pEnv, TVEC( TSID( e0 ) ) );
auto r = make_shared< parse::Resolver >( make_shared< Lexer >( sourcefile, filename ), c );
parse::Parser p( r );
auto parsed = p.parse();
if( parsed )
cout << ValueToIRExpr( *parsed ) << endl;
return EXIT_SUCCESS;
}