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;
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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;
 }