Ejemplo n.º 1
0
 internal static CompiledScript Compile(string script, bool isGlobal)
 {
     CommonTokenStream tokens = new CommonTokenStream();
     JavaScriptLexer lexer = new JavaScriptLexer(new ANTLRStringStream(script));
     tokens.TokenSource = lexer;
     ScriptSource Source = new ScriptSource(script);
     JavaScriptParser parser = new JavaScriptParser(tokens);
     TopStatementList r = (TopStatementList) parser.program().Tree;
     r.ConstructionComplete();
     if (JSContext.DebugOutput)
     {
         DumpTree(r, 0);
     }
     if (JSContext.OutputAssembly && isGlobal)
     {
         GenerateExternalAssembly(r);
         r.Reset();
     }
     return GenerateMethod(r, Source);
 }
 internal void GenFunctionRef(CompileContext compileContext)
 {
     if (this.FunctionID == -1)
     {
         if (compileContext.Source != null)
         {
             this.Source = compileContext.Source;
         }
         bool WasGlobal = compileContext.TrackImplicitReturnValue;
         compileContext.TrackImplicitReturnValue = false;
         this.FunctionID = compileContext.GenerateFunction(this, this.Name, (StatementNode) base.Children[1], out this._delegate);
         compileContext.TrackImplicitReturnValue = WasGlobal;
     }
     compileContext.GenFunctionRef(this.FunctionID);
 }
Ejemplo n.º 3
0
 private static CompiledScript GenerateMethod(StatementNode r, ScriptSource Source)
 {
     DynamicMethod method = new DynamicMethod("GlobalCode", MethodAttributes.Static | MethodAttributes.Public, CallingConventions.Standard, typeof(JSValue), new Type[] { typeof(JSContext) }, typeof(JSContext), false);
     DMCompileContext ctx = new DMCompileContext(method.GetILGenerator());
     ctx.Source = Source;
     ctx.GenerateGlobalCode(r);
     GlobalCodeDelegate _delegate = (GlobalCodeDelegate) method.CreateDelegate(typeof(GlobalCodeDelegate));
     CompiledScript cs = new CompiledScript(_delegate);
     cs.Source = Source;
     return cs;
 }