blob: f3a2885a2c4eb6acb8efeac7a1cba0ad9f7e9f93 [file] [log] [blame]
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
part of '../parser.dart';
/// A single token in the Dart language.
class Token {
/// A member of [TokenKind] specifying what kind of token this is.
final int kind;
/// The location where this token was parsed from.
final FileSpan span;
/// The start offset of this token.
int get start => span.start.offset;
/// The end offset of this token.
int get end => span.end.offset;
/// Returns the source text corresponding to this [Token].
String get text => span.text;
Token(this.kind, this.span);
/// Returns a pretty representation of this token for error messages.
@override
String toString() {
var kindText = TokenKind.kindToString(kind);
var actualText = text.trim();
if (kindText != actualText) {
if (actualText.length > 10) {
actualText = '${actualText.substring(0, 8)}...';
}
return '$kindText($actualText)';
} else {
return kindText;
}
}
}
/// A token containing a parsed literal value.
class LiteralToken extends Token {
dynamic value;
LiteralToken(int kind, FileSpan span, this.value) : super(kind, span);
}
/// A token containing error information.
class ErrorToken extends Token {
String? message;
ErrorToken(int kind, FileSpan span, this.message) : super(kind, span);
}
/// CSS ident-token.
///
/// See <http://dev.w3.org/csswg/css-syntax/#typedef-ident-token> and
/// <http://dev.w3.org/csswg/css-syntax/#ident-token-diagram>.
class IdentifierToken extends Token {
@override
final String text;
IdentifierToken(this.text, int kind, FileSpan span) : super(kind, span);
}