/** * Forks the parser at the current point and returns a new * parser for speculative parsing. * * @deprecated Creating a lookahead parser often leads to exponential parse times * (see issues #1049, #1115, and #1148 on github) so avoid using this if possible. */ @Deprecated private Parser createLookaheadParser() { return new Parser( config, new LookaheadErrorReporter(), this.scanner.getFile(), this.scanner.getOffset(), inGeneratorContext()); }
/** * Forks the parser at the current point and returns a new * parser for speculative parsing. * * @deprecated Creating a lookahead parser often leads to exponential parse times * (see issues #1049, #1115, and #1148 on github) so avoid using this if possible. */ @Deprecated private Parser createLookaheadParser() { return new Parser(config, new LookaheadErrorReporter(), this.scanner.getFile(), this.scanner.getOffset(), inGeneratorContext()); }
private ParseTree parseAssignment(Expression expressionIn) { if (peek(TokenType.YIELD) && inGeneratorContext()) { return parseYield(expressionIn); } SourcePosition start = getTreeStartLocation(); // TODO(blickly): Allow TypeScript syntax in arrow function parameters ParseTree left = parseConditional(expressionIn); if (peek(TokenType.ARROW)) { FormalParameterListTree params = transformArrowFunctionParameters(start, left); return parseArrowFunctionTail(start, null, params, expressionIn); } if (left.type == ParseTreeType.FORMAL_PARAMETER_LIST) { reportError("invalid paren expression"); } if (peekAssignmentOperator()) { left = transformLeftHandSideExpression(left); if (!left.isValidAssignmentTarget()) { reportError("invalid assignment target"); } Token operator = nextToken(); ParseTree right = parseAssignment(expressionIn); return new BinaryOperatorTree(getTreeLocation(start), left, operator, right); } return left; }
private ParseTree parseAssignment(Expression expressionIn) { if (peek(TokenType.YIELD) && inGeneratorContext()) { return parseYield(expressionIn); } SourcePosition start = getTreeStartLocation(); // TODO(blickly): Allow TypeScript syntax in arrow function parameters ParseTree left = parseConditional(expressionIn); if (isStartOfAsyncArrowFunction(left)) { // re-evaluate as an async arrow function. resetScanner(left); return parseAsyncArrowFunction(expressionIn); } if (peek(TokenType.ARROW)) { return completeAssignmentExpressionParseAtArrow(left, expressionIn); } if (peekAssignmentOperator()) { left = transformLeftHandSideExpression(left); if (!left.isValidAssignmentTarget()) { reportError("invalid assignment target"); return new MissingPrimaryExpressionTree(getTreeLocation(getTreeStartLocation())); } Token operator = nextToken(); ParseTree right = parseAssignment(expressionIn); return new BinaryOperatorTree(getTreeLocation(start), left, operator, right); } return left; }