Ejemplo n.º 1
0
        public SyntaxNode BuildFor(EcmaScriptParser parser, SourceLocation location)
        {
            if (Expression != null)
            {
                IIdentifier identifier;

                if (Initialization is IdentifierSyntax)
                {
                    identifier = ((IdentifierSyntax)Initialization).Identifier;
                }
                else
                {
                    var variableDeclaration = (VariableDeclarationSyntax)Initialization;

                    Debug.Assert(variableDeclaration.Declarations.Count == 1);

                    var declaration = variableDeclaration.Declarations[0];

                    identifier = declaration.Identifier;

                    Debug.Assert(declaration.Expression == null);
                }

                return _builder.BuildForEachIn(
                    identifier,
                    Expression,
                    Body,
                    location
                );
            }

            return _builder.BuildFor(
                Initialization,
                Test,
                Increment,
                Body,
                location
            );
        }
Ejemplo n.º 2
0
        private static BodySyntax ParseBlockStatement(string source, ReadOnlyArray<string> parameters)
        {
            if (String.IsNullOrEmpty(source))
                return null;

            var lexer = new EcmaScriptLexer(new ANTLRStringStream(source));
            var parser = new EcmaScriptParser(new CommonTokenStream(lexer), source);

            var block = parser.ExecuteBlockStatements(parameters);

            if (parser.Errors != null && parser.Errors.Count > 0)
                throw new JintException(String.Join(Environment.NewLine, parser.Errors.ToArray()));

            return block;
        }
Ejemplo n.º 3
0
        internal static ProgramSyntax ParseProgram(string source)
        {
            if (String.IsNullOrEmpty(source))
                return null;

            var lexer = new EcmaScriptLexer(new ANTLRStringStream(source));
            var parser = new EcmaScriptParser(new CommonTokenStream(lexer), source);

            var program = parser.Execute();

            if (parser.Errors != null && parser.Errors.Count > 0)
                throw new JintException(String.Join(Environment.NewLine, parser.Errors.ToArray()));

            return program;
        }