private static BoundProgram Compile(string script) { var programSyntax = JintEngine.ParseProgram(script); var engine = new JintEngine(); var visitor = new BindingVisitor(engine.TypeSystem.CreateScriptBuilder(null)); programSyntax.Accept(visitor); var program = SquelchPhase.Perform(visitor.Program); DefiniteAssignmentPhase.Perform(program); return program; }
private static object Compile(string script) { var program = JintEngine.ParseProgram(script); if (program == null) return JsUndefined.Instance; var typeSystem = new TypeSystem(); var scriptBuilder = typeSystem.CreateScriptBuilder(null); var bindingVisitor = new BindingVisitor(scriptBuilder); program.Accept(bindingVisitor); var boundProgram = bindingVisitor.Program; var interpreter = new JsonInterpreter(new JintEngine().Global); if (boundProgram.Body.Accept(interpreter)) return interpreter.Result; return null; }
private CompilationResult CompileProgram(string script, string fileName) { ProgramSyntax program; #if !DEBUG try { #endif program = ParseProgram(script); if (program == null) return new CompilationResult(JsNull.Instance, null); #if !DEBUG } catch (Exception e) { throw new JsException(JsErrorType.SyntaxError, e.Message); } #endif var scriptBuilder = TypeSystem.CreateScriptBuilder(fileName); var bindingVisitor = new BindingVisitor(scriptBuilder); program.Accept(bindingVisitor); var boundProgram = bindingVisitor.Program; var interpreter = new JsonInterpreter(Global); if (boundProgram.Body.Accept(interpreter)) return new CompilationResult(interpreter.Result, null); var resultExpressions = DefiniteAssignmentPhase.Perform(boundProgram); boundProgram = ResultRewriterPhase.Perform(boundProgram, resultExpressions); TypeMarkerPhase.Perform(boundProgram); boundProgram = SquelchPhase.Perform(boundProgram); PrintBound(boundProgram); EnsureGlobalsDeclared(boundProgram); var main = new CodeGenerator(Global, scriptBuilder).BuildMainMethod(boundProgram); return new CompilationResult(null, main); }
private JsFunction CompileFunction(string sourceCode, ReadOnlyArray<string> parameters) { BodySyntax newBody; if (sourceCode == String.Empty) newBody = new BodySyntax(BodyType.Function, ReadOnlyArray<SyntaxNode>.Empty, ReadOnlyArray<IIdentifier>.Empty, false, null); else newBody = ParseBlockStatement(sourceCode, parameters); var function = new FunctionSyntax(null, parameters, newBody, null); var scriptBuilder = TypeSystem.CreateScriptBuilder(null); var bindingVisitor = new BindingVisitor(scriptBuilder); var boundFunction = bindingVisitor.DeclareFunction(function); DefiniteAssignmentPhase.Perform(boundFunction); TypeMarkerPhase.Perform(boundFunction); boundFunction = SquelchPhase.Perform(boundFunction); return (JsFunction)Delegate.CreateDelegate( typeof(JsFunction), new CodeGenerator(Global, scriptBuilder).BuildFunction(boundFunction, sourceCode) ); }
public BlockBuilder(BindingVisitor visitor) { _visitor = visitor; }