Goose  Artifact [ac9e0fcef2]

Artifact ac9e0fcef24cf1e46236fa7e4af6efb238feff20e24fe887d817491d0f1de0aa:

  • File bs/empathy.cpp — part of check-in [c44ddff153] at 2019-01-25 14:04:51 on branch trunk — Implemented builtin compile-time function registration. (user: achavasse size: 1142)

#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;
}