public static string Run(string source) { var emitter = new StringBuilder(); var context = Runtime.Context.Create(); var astBuilder = new Compiler.AstGenerator(); var etGenerator = new Compiler.EtGenerator(); var scope = Scope.CreateGlobal(context); Func<object, object> emit = (obj) => { return emitter.Append(JsTypeConverter.ToString(obj)); }; scope.Global("emit", emit); Action<object> assert = (obj) => { Assert.AreEqual((object)true, obj); }; scope.Global("assert", assert); Action<object, object, object> assertEqual = (a, b, msg) => { Assert.AreEqual(a, b, (string)msg); }; scope.Global("assertEqual", assertEqual); Action<object, object> assertFalse = (obj, msg) => { Assert.IsFalse((bool)obj, (string)msg); }; scope.Global("assertFalse", assertFalse); Action<object, object> assertTrue = (obj, msg) => { Assert.IsTrue((bool)obj, (string)msg); }; scope.Global("assertTrue", assertTrue); context.SetupGlobals(scope); var astNodes = astBuilder.Build(source); var compiled = etGenerator.Build(astNodes, context); compiled(scope); return emitter.ToString(); }
//TODO: fix pretty-print of AST tree for all nodes static void Main(string[] args) { var context = new Context(); var astBuilder = new Compiler.AstGenerator(); var etGenerator = new Compiler.EtGenerator(); var astNodes = astBuilder.Build("Testing.js", Encoding.UTF8); var compiled = etGenerator.Build(astNodes, context); var globals = Scope.CreateGlobal(context); context.SetupGlobals(globals); globals.Global( "println", typeof(HelperFunctions).GetMethod("PrintLine") ); compiled(globals); }
public static string Run(string source, ref StringBuilder emitter) { var context = Runtime.Context.Create(); var emitter2 = emitter; var astBuilder = new Compiler.AstGenerator(); var etGenerator = new Compiler.EtGenerator(); var scope = Scope.CreateGlobal(context); Func<object, object> emit = (obj) => { emitter2.Append(JsTypeConverter.ToString(obj)); return null; }; scope.Global( "emit", emit ); context.SetupGlobals(scope); var astNodes = astBuilder.Build(source); var compiled = etGenerator.Build(astNodes, context); compiled(scope); return emitter.ToString(); }
public static Action<Scope> Compile(string source) { var astBuilder = new Compiler.AstGenerator(); var etGenerator = new Compiler.EtGenerator(); return etGenerator.Build(astBuilder.Build(source), Runtime.Context.Create()); }