private char nextChar() { if (isAtEnd()) { return '\0'; } return source.contents.charAt(index++); }
private char nextChar() { if (isAtEnd()) { return '\0'; } return contents.charAt(index++); }
private Token scanTemplateLiteral(int beginIndex) { if (isAtEnd()) { reportError(getPosition(beginIndex), "Unterminated template literal"); } return nextTemplateLiteralTokenShared( TokenType.NO_SUBSTITUTION_TEMPLATE, TokenType.TEMPLATE_HEAD); }
private Token scanTemplateLiteral(int beginIndex) { if (isAtEnd()) { reportError(getPosition(beginIndex), "Unterminated template literal"); } return nextTemplateLiteralTokenShared( TokenType.NO_SUBSTITUTION_TEMPLATE, TokenType.TEMPLATE_HEAD); }
/** * Returns true if the whitespace that was skipped included any * line terminators. */ private boolean skipWhitespace() { boolean foundLineTerminator = false; while (!isAtEnd() && peekWhitespace()) { if (isLineTerminator(nextChar())) { foundLineTerminator = true; } } return foundLineTerminator; }
/** * Returns true if the whitespace that was skipped included any * line terminators. */ private boolean skipWhitespace() { boolean foundLineTerminator = false; while (!isAtEnd() && peekWhitespace()) { if (isLineTerminator(nextChar())) { foundLineTerminator = true; } } return foundLineTerminator; }
private boolean peekStringLiteralChar(char terminator) { return !isAtEnd() && peekChar() != terminator && !isLineTerminator(peekChar()); }
private boolean peekStringLiteralChar(char terminator) { return !isAtEnd() && peekChar() != terminator && !isLineTerminator(peekChar()); }
public TemplateLiteralToken nextTemplateLiteralToken() { Token token = nextToken(); if (isAtEnd() || token.type != TokenType.CLOSE_CURLY) { reportError(getPosition(index), "Expected '}' after expression in template literal"); } return nextTemplateLiteralTokenShared(TokenType.TEMPLATE_TAIL, TokenType.TEMPLATE_MIDDLE); }
public LiteralToken nextTemplateLiteralToken() { Token token = nextToken(); if (isAtEnd() || token.type != TokenType.CLOSE_CURLY) { reportError(getPosition(index), "Expected '}' after expression in template literal"); } return nextTemplateLiteralTokenShared( TokenType.TEMPLATE_TAIL, TokenType.TEMPLATE_MIDDLE); }
private void skipSingleLineComment(Comment.Type type) { int startOffset = index; while (!isAtEnd() && !isLineTerminator(peekChar())) { nextChar(); } SourceRange range = getLineNumberTable().getSourceRange(startOffset, index); String value = this.contents.substring(startOffset, index); recordComment(type, range, value); }
private void skipSingleLineComment(Comment.Type type) { int startOffset = index; while (!isAtEnd() && !isLineTerminator(peekChar())) { nextChar(); } SourceRange range = getLineNumberTable().getSourceRange(startOffset, index); String value = this.source.contents.substring(startOffset, index); recordComment(type, range, value); }
private void skipTemplateCharacters() { while (!isAtEnd()) { switch(peekChar()) { case '`': return; case '\\': skipStringLiteralEscapeSequence(); break; case '$': if (peekChar(1) == '{') { return; } // Fall through. default: nextChar(); } } }
private void skipMultiLineComment() { int startOffset = index; nextChar(); // '/' nextChar(); // '*' while (!isAtEnd() && (peekChar() != '*' || peekChar(1) != '/')) { nextChar(); } if (!isAtEnd()) { nextChar(); nextChar(); Comment.Type type = (index - startOffset > 4 && this.source.contents.charAt(startOffset + 2) == '*') ? Comment.Type.JSDOC : Comment.Type.BLOCK; SourceRange range = getLineNumberTable().getSourceRange( startOffset, index); String value = this.source.contents.substring( startOffset, index); recordComment(type, range, value); } else { reportError("unterminated comment"); } }
private boolean skipRegularExpressionClass() { nextChar(); while (!isAtEnd() && peekRegularExpressionClassChar()) { if (!skipRegularExpressionClassChar()) { return false; } } if (peekChar() != ']') { reportError("']' expected"); return false; } nextChar(); return true; }
private boolean skipRegularExpressionClass() { nextChar(); while (!isAtEnd() && peekRegularExpressionClassChar()) { if (!skipRegularExpressionClassChar()) { return false; } } if (peekChar() != ']') { reportError("']' expected"); return false; } nextChar(); return true; }
private boolean skipRegularExpressionBody() { if (!isRegularExpressionFirstChar(peekChar())) { reportError("Expected regular expression first char"); return false; } if (!skipRegularExpressionChar()) { return false; } while (!isAtEnd() && isRegularExpressionChar(peekChar())) { if (!skipRegularExpressionChar()) { return false; } } return true; }
private boolean skipRegularExpressionBody() { if (!isRegularExpressionFirstChar(peekChar())) { reportError("Expected regular expression first char"); return false; } if (!skipRegularExpressionChar()) { return false; } while (!isAtEnd() && isRegularExpressionChar(peekChar())) { if (!skipRegularExpressionChar()) { return false; } } return true; }
private SkipTemplateCharactersResult skipTemplateCharacters() { SkipTemplateCharactersResult result = createSkipTemplateCharactersResult(null); while (!isAtEnd()) { switch (peekChar()) { case '`': return result; case '\\': // There might be multiple errors. Take the first one but continue scanning SkipTemplateCharactersResult newError = skipTemplateLiteralEscapeSequence(); if (newError != null && !result.hasError()) { result = newError; } break; case '$': if (peekChar(1) == '{') { return result; } // Fall through. default: nextChar(); } } return result; }
private LiteralToken nextTemplateLiteralTokenShared(TokenType endType, TokenType middleType) { int beginIndex = index; skipTemplateCharacters(); if (isAtEnd()) { reportError(getPosition(beginIndex), "Unterminated template literal"); } String value = getTokenString(beginIndex); switch (peekChar()) { case '`': nextChar(); return new LiteralToken(endType, value, getTokenRange(beginIndex - 1)); case '$': nextChar(); // $ nextChar(); // { return new LiteralToken(middleType, value, getTokenRange(beginIndex - 1)); default: // Should have reported error already return new LiteralToken(endType, value, getTokenRange(beginIndex - 1)); } }