Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1142)

Unified Diff: pkg/analyzer/lib/src/generated/scanner.dart

Issue 1690523002: Move Token into the public API (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « pkg/analyzer/lib/src/dart/ast/token.dart ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/analyzer/lib/src/generated/scanner.dart
diff --git a/pkg/analyzer/lib/src/generated/scanner.dart b/pkg/analyzer/lib/src/generated/scanner.dart
index 3fc2113fabc4e0ee35d102ff8b5142224e608075..1d2ffe8b85cddaaa9f5038ddeb55ccebbede2a43 100644
--- a/pkg/analyzer/lib/src/generated/scanner.dart
+++ b/pkg/analyzer/lib/src/generated/scanner.dart
@@ -4,77 +4,14 @@
library analyzer.src.generated.scanner;
-import 'dart:collection';
-
+import 'package:analyzer/dart/ast/token.dart';
+import 'package:analyzer/src/dart/ast/token.dart';
import 'package:analyzer/src/generated/error.dart';
import 'package:analyzer/src/generated/java_engine.dart';
import 'package:analyzer/src/generated/source.dart';
-/**
- * The opening half of a grouping pair of tokens. This is used for curly
- * brackets ('{'), parentheses ('('), and square brackets ('[').
- */
-class BeginToken extends Token {
- /**
- * The token that corresponds to this token.
- */
- Token endToken;
-
- /**
- * Initialize a newly created token to have the given [type] at the given
- * [offset].
- */
- BeginToken(TokenType type, int offset) : super(type, offset) {
- assert(type == TokenType.OPEN_CURLY_BRACKET ||
- type == TokenType.OPEN_PAREN ||
- type == TokenType.OPEN_SQUARE_BRACKET ||
- type == TokenType.STRING_INTERPOLATION_EXPRESSION);
- }
-
- @override
- Token copy() => new BeginToken(type, offset);
-}
-
-/**
- * A begin token that is preceded by comments.
- */
-class BeginTokenWithComment extends BeginToken {
- /**
- * The first comment in the list of comments that precede this token.
- */
- CommentToken _precedingComment;
-
- /**
- * Initialize a newly created token to have the given [type] at the given
- * [offset] and to be preceded by the comments reachable from the given
- * [comment].
- */
- BeginTokenWithComment(TokenType type, int offset, this._precedingComment)
- : super(type, offset) {
- _setCommentParent(_precedingComment);
- }
-
- CommentToken get precedingComments => _precedingComment;
-
- void set precedingComments(CommentToken comment) {
- _precedingComment = comment;
- _setCommentParent(_precedingComment);
- }
-
- @override
- void applyDelta(int delta) {
- super.applyDelta(delta);
- Token token = precedingComments;
- while (token != null) {
- token.applyDelta(delta);
- token = token.next;
- }
- }
-
- @override
- Token copy() =>
- new BeginTokenWithComment(type, offset, copyComments(precedingComments));
-}
+export 'package:analyzer/dart/ast/token.dart';
+export 'package:analyzer/src/dart/ast/token.dart' hide SimpleToken;
/**
* A [CharacterReader] that reads a range of characters from another character
@@ -227,252 +164,6 @@ class CharSequenceReader implements CharacterReader {
}
/**
- * A token representing a comment.
- */
-class CommentToken extends StringToken {
- /**
- * The [Token] that contains this comment.
- */
- Token parent;
-
- /**
- * Initialize a newly created token to represent a token of the given [type]
- * with the given [value] at the given [offset].
- */
- CommentToken(TokenType type, String value, int offset)
- : super(type, value, offset);
-
- @override
- CommentToken copy() => new CommentToken(type, _value, offset);
-}
-
-/**
- * A documentation comment token.
- */
-class DocumentationCommentToken extends CommentToken {
- /**
- * The references embedded within the documentation comment.
- * This list will be empty unless this is a documentation comment that has
- * references embedded within it.
- */
- final List<Token> references = <Token>[];
-
- /**
- * Initialize a newly created token to represent a token of the given [type]
- * with the given [value] at the given [offset].
- */
- DocumentationCommentToken(TokenType type, String value, int offset)
- : super(type, value, offset);
-
- @override
- CommentToken copy() {
- DocumentationCommentToken copy =
- new DocumentationCommentToken(type, _value, offset);
- references.forEach((ref) => copy.references.add(ref.copy()));
- return copy;
- }
-}
-
-/**
- * The keywords in the Dart programming language.
- */
-class Keyword {
- static const Keyword ASSERT = const Keyword('ASSERT', "assert");
-
- static const Keyword BREAK = const Keyword('BREAK', "break");
-
- static const Keyword CASE = const Keyword('CASE', "case");
-
- static const Keyword CATCH = const Keyword('CATCH', "catch");
-
- static const Keyword CLASS = const Keyword('CLASS', "class");
-
- static const Keyword CONST = const Keyword('CONST', "const");
-
- static const Keyword CONTINUE = const Keyword('CONTINUE', "continue");
-
- static const Keyword DEFAULT = const Keyword('DEFAULT', "default");
-
- static const Keyword DO = const Keyword('DO', "do");
-
- static const Keyword ELSE = const Keyword('ELSE', "else");
-
- static const Keyword ENUM = const Keyword('ENUM', "enum");
-
- static const Keyword EXTENDS = const Keyword('EXTENDS', "extends");
-
- static const Keyword FALSE = const Keyword('FALSE', "false");
-
- static const Keyword FINAL = const Keyword('FINAL', "final");
-
- static const Keyword FINALLY = const Keyword('FINALLY', "finally");
-
- static const Keyword FOR = const Keyword('FOR', "for");
-
- static const Keyword IF = const Keyword('IF', "if");
-
- static const Keyword IN = const Keyword('IN', "in");
-
- static const Keyword IS = const Keyword('IS', "is");
-
- static const Keyword NEW = const Keyword('NEW', "new");
-
- static const Keyword NULL = const Keyword('NULL', "null");
-
- static const Keyword RETHROW = const Keyword('RETHROW', "rethrow");
-
- static const Keyword RETURN = const Keyword('RETURN', "return");
-
- static const Keyword SUPER = const Keyword('SUPER', "super");
-
- static const Keyword SWITCH = const Keyword('SWITCH', "switch");
-
- static const Keyword THIS = const Keyword('THIS', "this");
-
- static const Keyword THROW = const Keyword('THROW', "throw");
-
- static const Keyword TRUE = const Keyword('TRUE', "true");
-
- static const Keyword TRY = const Keyword('TRY', "try");
-
- static const Keyword VAR = const Keyword('VAR', "var");
-
- static const Keyword VOID = const Keyword('VOID', "void");
-
- static const Keyword WHILE = const Keyword('WHILE', "while");
-
- static const Keyword WITH = const Keyword('WITH', "with");
-
- static const Keyword ABSTRACT = const Keyword('ABSTRACT', "abstract", true);
-
- static const Keyword AS = const Keyword('AS', "as", true);
-
- static const Keyword DEFERRED = const Keyword('DEFERRED', "deferred", true);
-
- static const Keyword DYNAMIC = const Keyword('DYNAMIC', "dynamic", true);
-
- static const Keyword EXPORT = const Keyword('EXPORT', "export", true);
-
- static const Keyword EXTERNAL = const Keyword('EXTERNAL', "external", true);
-
- static const Keyword FACTORY = const Keyword('FACTORY', "factory", true);
-
- static const Keyword GET = const Keyword('GET', "get", true);
-
- static const Keyword IMPLEMENTS =
- const Keyword('IMPLEMENTS', "implements", true);
-
- static const Keyword IMPORT = const Keyword('IMPORT', "import", true);
-
- static const Keyword LIBRARY = const Keyword('LIBRARY', "library", true);
-
- static const Keyword OPERATOR = const Keyword('OPERATOR', "operator", true);
-
- static const Keyword PART = const Keyword('PART', "part", true);
-
- static const Keyword SET = const Keyword('SET', "set", true);
-
- static const Keyword STATIC = const Keyword('STATIC', "static", true);
-
- static const Keyword TYPEDEF = const Keyword('TYPEDEF', "typedef", true);
-
- static const List<Keyword> values = const [
- ASSERT,
- BREAK,
- CASE,
- CATCH,
- CLASS,
- CONST,
- CONTINUE,
- DEFAULT,
- DO,
- ELSE,
- ENUM,
- EXTENDS,
- FALSE,
- FINAL,
- FINALLY,
- FOR,
- IF,
- IN,
- IS,
- NEW,
- NULL,
- RETHROW,
- RETURN,
- SUPER,
- SWITCH,
- THIS,
- THROW,
- TRUE,
- TRY,
- VAR,
- VOID,
- WHILE,
- WITH,
- ABSTRACT,
- AS,
- DEFERRED,
- DYNAMIC,
- EXPORT,
- EXTERNAL,
- FACTORY,
- GET,
- IMPLEMENTS,
- IMPORT,
- LIBRARY,
- OPERATOR,
- PART,
- SET,
- STATIC,
- TYPEDEF
- ];
-
- /**
- * A table mapping the lexemes of keywords to the corresponding keyword.
- */
- static final Map<String, Keyword> keywords = _createKeywordMap();
-
- /**
- * The name of the keyword type.
- */
- final String name;
-
- /**
- * The lexeme for the keyword.
- */
- final String syntax;
-
- /**
- * A flag indicating whether the keyword is a pseudo-keyword. Pseudo keywords
- * can be used as identifiers.
- */
- final bool isPseudoKeyword;
-
- /**
- * Initialize a newly created keyword to have the given [name] and [syntax].
- * The keyword is a pseudo-keyword if the [isPseudoKeyword] flag is `true`.
- */
- const Keyword(this.name, this.syntax, [this.isPseudoKeyword = false]);
-
- @override
- String toString() => name;
-
- /**
- * Create a table mapping the lexemes of keywords to the corresponding keyword
- * and return the table that was created.
- */
- static Map<String, Keyword> _createKeywordMap() {
- LinkedHashMap<String, Keyword> result =
- new LinkedHashMap<String, Keyword>();
- for (Keyword keyword in values) {
- result[keyword.syntax] = keyword;
- }
- return result;
- }
-}
-
-/**
* A state in a state machine used to scan keywords.
*/
class KeywordState {
@@ -579,72 +270,6 @@ class KeywordState {
}
/**
- * A token representing a keyword in the language.
- */
-class KeywordToken extends Token {
- /**
- * The keyword being represented by this token.
- */
- final Keyword keyword;
-
- /**
- * Initialize a newly created token to represent the given [keyword] at the
- * given [offset].
- */
- KeywordToken(this.keyword, int offset) : super(TokenType.KEYWORD, offset);
-
- @override
- String get lexeme => keyword.syntax;
-
- @override
- Token copy() => new KeywordToken(keyword, offset);
-
- @override
- Keyword value() => keyword;
-}
-
-/**
- * A keyword token that is preceded by comments.
- */
-class KeywordTokenWithComment extends KeywordToken {
- /**
- * The first comment in the list of comments that precede this token.
- */
- CommentToken _precedingComment;
-
- /**
- * Initialize a newly created token to to represent the given [keyword] at the
- * given [offset] and to be preceded by the comments reachable from the given
- * [comment].
- */
- KeywordTokenWithComment(Keyword keyword, int offset, this._precedingComment)
- : super(keyword, offset) {
- _setCommentParent(_precedingComment);
- }
-
- CommentToken get precedingComments => _precedingComment;
-
- void set precedingComments(CommentToken comment) {
- _precedingComment = comment;
- _setCommentParent(_precedingComment);
- }
-
- @override
- void applyDelta(int delta) {
- super.applyDelta(delta);
- Token token = precedingComments;
- while (token != null) {
- token.applyDelta(delta);
- token = token.next;
- }
- }
-
- @override
- Token copy() => new KeywordTokenWithComment(
- keyword, offset, copyComments(precedingComments));
-}
-
-/**
* The class `Scanner` implements a scanner for Dart code.
*
* The lexical structure of Dart is ambiguous without knowledge of the context
@@ -1902,75 +1527,6 @@ class ScannerErrorCode extends ErrorCode {
}
/**
- * A token whose value is independent of it's type.
- */
-class StringToken extends Token {
- /**
- * The lexeme represented by this token.
- */
- String _value;
-
- /**
- * Initialize a newly created token to represent a token of the given [type]
- * with the given [value] at the given [offset].
- */
- StringToken(TokenType type, String value, int offset) : super(type, offset) {
- this._value = StringUtilities.intern(value);
- }
-
- @override
- String get lexeme => _value;
-
- @override
- Token copy() => new StringToken(type, _value, offset);
-
- @override
- String value() => _value;
-}
-
-/**
- * A string token that is preceded by comments.
- */
-class StringTokenWithComment extends StringToken {
- /**
- * The first comment in the list of comments that precede this token.
- */
- CommentToken _precedingComment;
-
- /**
- * Initialize a newly created token to have the given [type] at the given
- * [offset] and to be preceded by the comments reachable from the given
- * [comment].
- */
- StringTokenWithComment(
- TokenType type, String value, int offset, this._precedingComment)
- : super(type, value, offset) {
- _setCommentParent(_precedingComment);
- }
-
- CommentToken get precedingComments => _precedingComment;
-
- void set precedingComments(CommentToken comment) {
- _precedingComment = comment;
- _setCommentParent(_precedingComment);
- }
-
- @override
- void applyDelta(int delta) {
- super.applyDelta(delta);
- Token token = precedingComments;
- while (token != null) {
- token.applyDelta(delta);
- token = token.next;
- }
- }
-
- @override
- Token copy() => new StringTokenWithComment(
- type, lexeme, offset, copyComments(precedingComments));
-}
-
-/**
* A [CharacterReader] that reads characters from a character sequence, but adds
* a delta when reporting the current character offset so that the character
* sequence can be a subsequence from a larger sequence.
@@ -2001,716 +1557,3 @@ class SubSequenceReader extends CharSequenceReader {
String getString(int start, int endDelta) =>
super.getString(start - _offsetDelta, endDelta);
}
-
-/**
- * A token whose value is independent of it's type.
- */
-class SyntheticStringToken extends StringToken {
- /**
- * Initialize a newly created token to represent a token of the given [type]
- * with the given [value] at the given [offset].
- */
- SyntheticStringToken(TokenType type, String value, int offset)
- : super(type, value, offset);
-
- @override
- bool get isSynthetic => true;
-}
-
-/**
- * A token that was scanned from the input. Each token knows which tokens
- * precede and follow it, acting as a link in a doubly linked list of tokens.
- */
-class Token {
- /**
- * The type of the token.
- */
- final TokenType type;
-
- /**
- * The offset from the beginning of the file to the first character in the
- * token.
- */
- int offset = 0;
-
- /**
- * The previous token in the token stream.
- */
- Token previous;
-
- /**
- * The next token in the token stream.
- */
- Token _next;
-
- /**
- * Initialize a newly created token to have the given [type] and [offset].
- */
- Token(this.type, this.offset);
-
- /**
- * Return the offset from the beginning of the file to the character after the
- * last character of the token.
- */
- int get end => offset + length;
-
- /**
- * Return `true` if this token represents an operator.
- */
- bool get isOperator => type.isOperator;
-
- /**
- * Return `true` if this token is a synthetic token. A synthetic token is a
- * token that was introduced by the parser in order to recover from an error
- * in the code.
- */
- bool get isSynthetic => length == 0;
-
- /**
- * Return `true` if this token represents an operator that can be defined by
- * users.
- */
- bool get isUserDefinableOperator => type.isUserDefinableOperator;
-
- /**
- * Return the number of characters in the node's source range.
- */
- int get length => lexeme.length;
-
- /**
- * Return the lexeme that represents this token.
- */
- String get lexeme => type.lexeme;
-
- /**
- * Return the next token in the token stream.
- */
- Token get next => _next;
-
- /**
- * Return the first comment in the list of comments that precede this token,
- * or `null` if there are no comments preceding this token. Additional
- * comments can be reached by following the token stream using [next] until
- * `null` is returned.
- *
- * For example, if the original contents were `/* one */ /* two */ id`, then
- * the first preceding comment token will have a lexeme of `/* one */` and
- * the next comment token will have a lexeme of `/* two */`.
- */
- CommentToken get precedingComments => null;
-
- /**
- * Apply (add) the given [delta] to this token's offset.
- */
- void applyDelta(int delta) {
- offset += delta;
- }
-
- /**
- * Return a newly created token that is a copy of this token but that is not a
- * part of any token stream.
- */
- Token copy() => new Token(type, offset);
-
- /**
- * Copy a linked list of comment tokens identical to the given comment tokens.
- */
- Token copyComments(Token token) {
- if (token == null) {
- return null;
- }
- Token head = token.copy();
- Token tail = head;
- token = token.next;
- while (token != null) {
- tail = tail.setNext(token.copy());
- token = token.next;
- }
- return head;
- }
-
- /**
- * Return `true` if this token has any one of the given [types].
- */
- bool matchesAny(List<TokenType> types) {
- for (TokenType type in types) {
- if (this.type == type) {
- return true;
- }
- }
- return false;
- }
-
- /**
- * Set the next token in the token stream to the given [token]. This has the
- * side-effect of setting this token to be the previous token for the given
- * token. Return the token that was passed in.
- */
- Token setNext(Token token) {
- _next = token;
- token.previous = this;
- return token;
- }
-
- /**
- * Set the next token in the token stream to the given token without changing
- * which token is the previous token for the given token. Return the token
- * that was passed in.
- */
- Token setNextWithoutSettingPrevious(Token token) {
- _next = token;
- return token;
- }
-
- @override
- String toString() => lexeme;
-
- /**
- * Return the value of this token. For keyword tokens, this is the keyword
- * associated with the token, for other tokens it is the lexeme associated
- * with the token.
- */
- Object value() => type.lexeme;
-
- /**
- * Sets the `parent` property to `this` for the given [comment] and all the
- * next tokens.
- */
- void _setCommentParent(CommentToken comment) {
- while (comment != null) {
- comment.parent = this;
- comment = comment.next;
- }
- }
-
- /**
- * Compare the given [tokens] to find the token that appears first in the
- * source being parsed. That is, return the left-most of all of the tokens.
- * The list must be non-`null`, but the elements of the list are allowed to be
- * `null`. Return the token with the smallest offset, or `null` if the list is
- * empty or if all of the elements of the list are `null`.
- */
- static Token lexicallyFirst(List<Token> tokens) {
- Token first = null;
- int offset = -1;
- for (Token token in tokens) {
- if (token != null && (offset < 0 || token.offset < offset)) {
- first = token;
- offset = token.offset;
- }
- }
- return first;
- }
-}
-
-/**
- * The classes (or groups) of tokens with a similar use.
- */
-class TokenClass {
- /**
- * A value used to indicate that the token type is not part of any specific
- * class of token.
- */
- static const TokenClass NO_CLASS = const TokenClass('NO_CLASS');
-
- /**
- * A value used to indicate that the token type is an additive operator.
- */
- static const TokenClass ADDITIVE_OPERATOR =
- const TokenClass('ADDITIVE_OPERATOR', 13);
-
- /**
- * A value used to indicate that the token type is an assignment operator.
- */
- static const TokenClass ASSIGNMENT_OPERATOR =
- const TokenClass('ASSIGNMENT_OPERATOR', 1);
-
- /**
- * A value used to indicate that the token type is a bitwise-and operator.
- */
- static const TokenClass BITWISE_AND_OPERATOR =
- const TokenClass('BITWISE_AND_OPERATOR', 11);
-
- /**
- * A value used to indicate that the token type is a bitwise-or operator.
- */
- static const TokenClass BITWISE_OR_OPERATOR =
- const TokenClass('BITWISE_OR_OPERATOR', 9);
-
- /**
- * A value used to indicate that the token type is a bitwise-xor operator.
- */
- static const TokenClass BITWISE_XOR_OPERATOR =
- const TokenClass('BITWISE_XOR_OPERATOR', 10);
-
- /**
- * A value used to indicate that the token type is a cascade operator.
- */
- static const TokenClass CASCADE_OPERATOR =
- const TokenClass('CASCADE_OPERATOR', 2);
-
- /**
- * A value used to indicate that the token type is a conditional operator.
- */
- static const TokenClass CONDITIONAL_OPERATOR =
- const TokenClass('CONDITIONAL_OPERATOR', 3);
-
- /**
- * A value used to indicate that the token type is an equality operator.
- */
- static const TokenClass EQUALITY_OPERATOR =
- const TokenClass('EQUALITY_OPERATOR', 7);
-
- /**
- * A value used to indicate that the token type is an if-null operator.
- */
- static const TokenClass IF_NULL_OPERATOR =
- const TokenClass('IF_NULL_OPERATOR', 4);
-
- /**
- * A value used to indicate that the token type is a logical-and operator.
- */
- static const TokenClass LOGICAL_AND_OPERATOR =
- const TokenClass('LOGICAL_AND_OPERATOR', 6);
-
- /**
- * A value used to indicate that the token type is a logical-or operator.
- */
- static const TokenClass LOGICAL_OR_OPERATOR =
- const TokenClass('LOGICAL_OR_OPERATOR', 5);
-
- /**
- * A value used to indicate that the token type is a multiplicative operator.
- */
- static const TokenClass MULTIPLICATIVE_OPERATOR =
- const TokenClass('MULTIPLICATIVE_OPERATOR', 14);
-
- /**
- * A value used to indicate that the token type is a relational operator.
- */
- static const TokenClass RELATIONAL_OPERATOR =
- const TokenClass('RELATIONAL_OPERATOR', 8);
-
- /**
- * A value used to indicate that the token type is a shift operator.
- */
- static const TokenClass SHIFT_OPERATOR =
- const TokenClass('SHIFT_OPERATOR', 12);
-
- /**
- * A value used to indicate that the token type is a unary operator.
- */
- static const TokenClass UNARY_POSTFIX_OPERATOR =
- const TokenClass('UNARY_POSTFIX_OPERATOR', 16);
-
- /**
- * A value used to indicate that the token type is a unary operator.
- */
- static const TokenClass UNARY_PREFIX_OPERATOR =
- const TokenClass('UNARY_PREFIX_OPERATOR', 15);
-
- /**
- * The name of the token class.
- */
- final String name;
-
- /**
- * The precedence of tokens of this class, or `0` if the such tokens do not
- * represent an operator.
- */
- final int precedence;
-
- const TokenClass(this.name, [this.precedence = 0]);
-
- @override
- String toString() => name;
-}
-
-/**
- * The types of tokens that can be returned by the scanner.
- */
-class TokenType {
- /**
- * The type of the token that marks the end of the input.
- */
- static const TokenType EOF = const TokenType_EOF('EOF');
-
- static const TokenType DOUBLE = const TokenType('DOUBLE');
-
- static const TokenType HEXADECIMAL = const TokenType('HEXADECIMAL');
-
- static const TokenType IDENTIFIER = const TokenType('IDENTIFIER');
-
- static const TokenType INT = const TokenType('INT');
-
- static const TokenType KEYWORD = const TokenType('KEYWORD');
-
- static const TokenType MULTI_LINE_COMMENT =
- const TokenType('MULTI_LINE_COMMENT');
-
- static const TokenType SCRIPT_TAG = const TokenType('SCRIPT_TAG');
-
- static const TokenType SINGLE_LINE_COMMENT =
- const TokenType('SINGLE_LINE_COMMENT');
-
- static const TokenType STRING = const TokenType('STRING');
-
- static const TokenType AMPERSAND =
- const TokenType('AMPERSAND', TokenClass.BITWISE_AND_OPERATOR, "&");
-
- static const TokenType AMPERSAND_AMPERSAND = const TokenType(
- 'AMPERSAND_AMPERSAND', TokenClass.LOGICAL_AND_OPERATOR, "&&");
-
- static const TokenType AMPERSAND_EQ =
- const TokenType('AMPERSAND_EQ', TokenClass.ASSIGNMENT_OPERATOR, "&=");
-
- static const TokenType AT = const TokenType('AT', TokenClass.NO_CLASS, "@");
-
- static const TokenType BANG =
- const TokenType('BANG', TokenClass.UNARY_PREFIX_OPERATOR, "!");
-
- static const TokenType BANG_EQ =
- const TokenType('BANG_EQ', TokenClass.EQUALITY_OPERATOR, "!=");
-
- static const TokenType BAR =
- const TokenType('BAR', TokenClass.BITWISE_OR_OPERATOR, "|");
-
- static const TokenType BAR_BAR =
- const TokenType('BAR_BAR', TokenClass.LOGICAL_OR_OPERATOR, "||");
-
- static const TokenType BAR_EQ =
- const TokenType('BAR_EQ', TokenClass.ASSIGNMENT_OPERATOR, "|=");
-
- static const TokenType COLON =
- const TokenType('COLON', TokenClass.NO_CLASS, ":");
-
- static const TokenType COMMA =
- const TokenType('COMMA', TokenClass.NO_CLASS, ",");
-
- static const TokenType CARET =
- const TokenType('CARET', TokenClass.BITWISE_XOR_OPERATOR, "^");
-
- static const TokenType CARET_EQ =
- const TokenType('CARET_EQ', TokenClass.ASSIGNMENT_OPERATOR, "^=");
-
- static const TokenType CLOSE_CURLY_BRACKET =
- const TokenType('CLOSE_CURLY_BRACKET', TokenClass.NO_CLASS, "}");
-
- static const TokenType CLOSE_PAREN =
- const TokenType('CLOSE_PAREN', TokenClass.NO_CLASS, ")");
-
- static const TokenType CLOSE_SQUARE_BRACKET =
- const TokenType('CLOSE_SQUARE_BRACKET', TokenClass.NO_CLASS, "]");
-
- static const TokenType EQ =
- const TokenType('EQ', TokenClass.ASSIGNMENT_OPERATOR, "=");
-
- static const TokenType EQ_EQ =
- const TokenType('EQ_EQ', TokenClass.EQUALITY_OPERATOR, "==");
-
- static const TokenType FUNCTION =
- const TokenType('FUNCTION', TokenClass.NO_CLASS, "=>");
-
- static const TokenType GT =
- const TokenType('GT', TokenClass.RELATIONAL_OPERATOR, ">");
-
- static const TokenType GT_EQ =
- const TokenType('GT_EQ', TokenClass.RELATIONAL_OPERATOR, ">=");
-
- static const TokenType GT_GT =
- const TokenType('GT_GT', TokenClass.SHIFT_OPERATOR, ">>");
-
- static const TokenType GT_GT_EQ =
- const TokenType('GT_GT_EQ', TokenClass.ASSIGNMENT_OPERATOR, ">>=");
-
- static const TokenType HASH =
- const TokenType('HASH', TokenClass.NO_CLASS, "#");
-
- static const TokenType INDEX =
- const TokenType('INDEX', TokenClass.UNARY_POSTFIX_OPERATOR, "[]");
-
- static const TokenType INDEX_EQ =
- const TokenType('INDEX_EQ', TokenClass.UNARY_POSTFIX_OPERATOR, "[]=");
-
- static const TokenType IS =
- const TokenType('IS', TokenClass.RELATIONAL_OPERATOR, "is");
-
- static const TokenType LT =
- const TokenType('LT', TokenClass.RELATIONAL_OPERATOR, "<");
-
- static const TokenType LT_EQ =
- const TokenType('LT_EQ', TokenClass.RELATIONAL_OPERATOR, "<=");
-
- static const TokenType LT_LT =
- const TokenType('LT_LT', TokenClass.SHIFT_OPERATOR, "<<");
-
- static const TokenType LT_LT_EQ =
- const TokenType('LT_LT_EQ', TokenClass.ASSIGNMENT_OPERATOR, "<<=");
-
- static const TokenType MINUS =
- const TokenType('MINUS', TokenClass.ADDITIVE_OPERATOR, "-");
-
- static const TokenType MINUS_EQ =
- const TokenType('MINUS_EQ', TokenClass.ASSIGNMENT_OPERATOR, "-=");
-
- static const TokenType MINUS_MINUS =
- const TokenType('MINUS_MINUS', TokenClass.UNARY_PREFIX_OPERATOR, "--");
-
- static const TokenType OPEN_CURLY_BRACKET =
- const TokenType('OPEN_CURLY_BRACKET', TokenClass.NO_CLASS, "{");
-
- static const TokenType OPEN_PAREN =
- const TokenType('OPEN_PAREN', TokenClass.UNARY_POSTFIX_OPERATOR, "(");
-
- static const TokenType OPEN_SQUARE_BRACKET = const TokenType(
- 'OPEN_SQUARE_BRACKET', TokenClass.UNARY_POSTFIX_OPERATOR, "[");
-
- static const TokenType PERCENT =
- const TokenType('PERCENT', TokenClass.MULTIPLICATIVE_OPERATOR, "%");
-
- static const TokenType PERCENT_EQ =
- const TokenType('PERCENT_EQ', TokenClass.ASSIGNMENT_OPERATOR, "%=");
-
- static const TokenType PERIOD =
- const TokenType('PERIOD', TokenClass.UNARY_POSTFIX_OPERATOR, ".");
-
- static const TokenType PERIOD_PERIOD =
- const TokenType('PERIOD_PERIOD', TokenClass.CASCADE_OPERATOR, "..");
-
- static const TokenType PLUS =
- const TokenType('PLUS', TokenClass.ADDITIVE_OPERATOR, "+");
-
- static const TokenType PLUS_EQ =
- const TokenType('PLUS_EQ', TokenClass.ASSIGNMENT_OPERATOR, "+=");
-
- static const TokenType PLUS_PLUS =
- const TokenType('PLUS_PLUS', TokenClass.UNARY_PREFIX_OPERATOR, "++");
-
- static const TokenType QUESTION =
- const TokenType('QUESTION', TokenClass.CONDITIONAL_OPERATOR, "?");
-
- static const TokenType QUESTION_PERIOD = const TokenType(
- 'QUESTION_PERIOD', TokenClass.UNARY_POSTFIX_OPERATOR, '?.');
-
- static const TokenType QUESTION_QUESTION =
- const TokenType('QUESTION_QUESTION', TokenClass.IF_NULL_OPERATOR, '??');
-
- static const TokenType QUESTION_QUESTION_EQ = const TokenType(
- 'QUESTION_QUESTION_EQ', TokenClass.ASSIGNMENT_OPERATOR, '??=');
-
- static const TokenType SEMICOLON =
- const TokenType('SEMICOLON', TokenClass.NO_CLASS, ";");
-
- static const TokenType SLASH =
- const TokenType('SLASH', TokenClass.MULTIPLICATIVE_OPERATOR, "/");
-
- static const TokenType SLASH_EQ =
- const TokenType('SLASH_EQ', TokenClass.ASSIGNMENT_OPERATOR, "/=");
-
- static const TokenType STAR =
- const TokenType('STAR', TokenClass.MULTIPLICATIVE_OPERATOR, "*");
-
- static const TokenType STAR_EQ =
- const TokenType('STAR_EQ', TokenClass.ASSIGNMENT_OPERATOR, "*=");
-
- static const TokenType STRING_INTERPOLATION_EXPRESSION = const TokenType(
- 'STRING_INTERPOLATION_EXPRESSION', TokenClass.NO_CLASS, "\${");
-
- static const TokenType STRING_INTERPOLATION_IDENTIFIER = const TokenType(
- 'STRING_INTERPOLATION_IDENTIFIER', TokenClass.NO_CLASS, "\$");
-
- static const TokenType TILDE =
- const TokenType('TILDE', TokenClass.UNARY_PREFIX_OPERATOR, "~");
-
- static const TokenType TILDE_SLASH =
- const TokenType('TILDE_SLASH', TokenClass.MULTIPLICATIVE_OPERATOR, "~/");
-
- static const TokenType TILDE_SLASH_EQ =
- const TokenType('TILDE_SLASH_EQ', TokenClass.ASSIGNMENT_OPERATOR, "~/=");
-
- static const TokenType BACKPING =
- const TokenType('BACKPING', TokenClass.NO_CLASS, "`");
-
- static const TokenType BACKSLASH =
- const TokenType('BACKSLASH', TokenClass.NO_CLASS, "\\");
-
- static const TokenType PERIOD_PERIOD_PERIOD =
- const TokenType('PERIOD_PERIOD_PERIOD', TokenClass.NO_CLASS, "...");
-
- static const TokenType GENERIC_METHOD_TYPE_LIST =
- const TokenType('GENERIC_METHOD_TYPE_LIST');
-
- static const TokenType GENERIC_METHOD_TYPE_ASSIGN =
- const TokenType('GENERIC_METHOD_TYPE_ASSIGN');
-
- /**
- * The class of the token.
- */
- final TokenClass _tokenClass;
-
- /**
- * The name of the token type.
- */
- final String name;
-
- /**
- * The lexeme that defines this type of token, or `null` if there is more than
- * one possible lexeme for this type of token.
- */
- final String lexeme;
-
- const TokenType(this.name,
- [this._tokenClass = TokenClass.NO_CLASS, this.lexeme = null]);
-
- /**
- * Return `true` if this type of token represents an additive operator.
- */
- bool get isAdditiveOperator => _tokenClass == TokenClass.ADDITIVE_OPERATOR;
-
- /**
- * Return `true` if this type of token represents an assignment operator.
- */
- bool get isAssignmentOperator =>
- _tokenClass == TokenClass.ASSIGNMENT_OPERATOR;
-
- /**
- * Return `true` if this type of token represents an associative operator. An
- * associative operator is an operator for which the following equality is
- * true: `(a * b) * c == a * (b * c)`. In other words, if the result of
- * applying the operator to multiple operands does not depend on the order in
- * which those applications occur.
- *
- * Note: This method considers the logical-and and logical-or operators to be
- * associative, even though the order in which the application of those
- * operators can have an effect because evaluation of the right-hand operand
- * is conditional.
- */
- bool get isAssociativeOperator =>
- this == AMPERSAND ||
- this == AMPERSAND_AMPERSAND ||
- this == BAR ||
- this == BAR_BAR ||
- this == CARET ||
- this == PLUS ||
- this == STAR;
-
- /**
- * Return `true` if this type of token represents an equality operator.
- */
- bool get isEqualityOperator => _tokenClass == TokenClass.EQUALITY_OPERATOR;
-
- /**
- * Return `true` if this type of token represents an increment operator.
- */
- bool get isIncrementOperator =>
- identical(lexeme, "++") || identical(lexeme, "--");
-
- /**
- * Return `true` if this type of token represents a multiplicative operator.
- */
- bool get isMultiplicativeOperator =>
- _tokenClass == TokenClass.MULTIPLICATIVE_OPERATOR;
-
- /**
- * Return `true` if this token type represents an operator.
- */
- bool get isOperator =>
- _tokenClass != TokenClass.NO_CLASS &&
- this != OPEN_PAREN &&
- this != OPEN_SQUARE_BRACKET &&
- this != PERIOD;
-
- /**
- * Return `true` if this type of token represents a relational operator.
- */
- bool get isRelationalOperator =>
- _tokenClass == TokenClass.RELATIONAL_OPERATOR;
-
- /**
- * Return `true` if this type of token represents a shift operator.
- */
- bool get isShiftOperator => _tokenClass == TokenClass.SHIFT_OPERATOR;
-
- /**
- * Return `true` if this type of token represents a unary postfix operator.
- */
- bool get isUnaryPostfixOperator =>
- _tokenClass == TokenClass.UNARY_POSTFIX_OPERATOR;
-
- /**
- * Return `true` if this type of token represents a unary prefix operator.
- */
- bool get isUnaryPrefixOperator =>
- _tokenClass == TokenClass.UNARY_PREFIX_OPERATOR;
-
- /**
- * Return `true` if this token type represents an operator that can be defined
- * by users.
- */
- bool get isUserDefinableOperator =>
- identical(lexeme, "==") ||
- identical(lexeme, "~") ||
- identical(lexeme, "[]") ||
- identical(lexeme, "[]=") ||
- identical(lexeme, "*") ||
- identical(lexeme, "/") ||
- identical(lexeme, "%") ||
- identical(lexeme, "~/") ||
- identical(lexeme, "+") ||
- identical(lexeme, "-") ||
- identical(lexeme, "<<") ||
- identical(lexeme, ">>") ||
- identical(lexeme, ">=") ||
- identical(lexeme, ">") ||
- identical(lexeme, "<=") ||
- identical(lexeme, "<") ||
- identical(lexeme, "&") ||
- identical(lexeme, "^") ||
- identical(lexeme, "|");
-
- /**
- * Return the precedence of the token, or `0` if the token does not represent
- * an operator.
- */
- int get precedence => _tokenClass.precedence;
-
- @override
- String toString() => name;
-}
-
-class TokenType_EOF extends TokenType {
- const TokenType_EOF(String name) : super(name, TokenClass.NO_CLASS, "");
-
- @override
- String toString() => "-eof-";
-}
-
-/**
- * A normal token that is preceded by comments.
- */
-class TokenWithComment extends Token {
- /**
- * The first comment in the list of comments that precede this token.
- */
- CommentToken _precedingComment;
-
- /**
- * Initialize a newly created token to have the given [type] at the given
- * [offset] and to be preceded by the comments reachable from the given
- * [comment].
- */
- TokenWithComment(TokenType type, int offset, this._precedingComment)
- : super(type, offset) {
- _setCommentParent(_precedingComment);
- }
-
- CommentToken get precedingComments => _precedingComment;
-
- void set precedingComments(CommentToken comment) {
- _precedingComment = comment;
- _setCommentParent(_precedingComment);
- }
-
- @override
- Token copy() => new TokenWithComment(type, offset, precedingComments);
-}
« no previous file with comments | « pkg/analyzer/lib/src/dart/ast/token.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698