// Copyright (c) 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef TOOLS_GN_TOKEN_H_ #define TOOLS_GN_TOKEN_H_ #include "base/strings/string_piece.h" #include "tools/gn/location.h" class Token { public: enum Type { INVALID, INTEGER, // 123 STRING, // "blah" TRUE_TOKEN, // Not "TRUE" to avoid collisions with #define in windows.h. FALSE_TOKEN, // Various operators. EQUAL, PLUS, MINUS, PLUS_EQUALS, MINUS_EQUALS, EQUAL_EQUAL, NOT_EQUAL, LESS_EQUAL, GREATER_EQUAL, LESS_THAN, GREATER_THAN, BOOLEAN_AND, BOOLEAN_OR, BANG, DOT, LEFT_PAREN, RIGHT_PAREN, LEFT_BRACKET, RIGHT_BRACKET, LEFT_BRACE, RIGHT_BRACE, IF, ELSE, IDENTIFIER, // foo COMMA, // , UNCLASSIFIED_COMMENT, // #...\n, of unknown style (will be converted // to one below) LINE_COMMENT, // #...\n on a line alone. SUFFIX_COMMENT, // #...\n on a line following other code. BLOCK_COMMENT, // #...\n line comment, but free-standing. UNCLASSIFIED_OPERATOR, NUM_TYPES }; Token(); Token(const Location& location, Type t, const base::StringPiece& v); Token(const Token& other); Type type() const { return type_; } const base::StringPiece& value() const { return value_; } const Location& location() const { return location_; } void set_location(Location location) { location_ = location; } LocationRange range() const { return LocationRange( location_, Location(location_.file(), location_.line_number(), location_.column_number() + static_cast(value_.size()), location_.byte() + static_cast(value_.size()))); } // Helper functions for comparing this token to something. bool IsIdentifierEqualTo(const char* v) const; bool IsStringEqualTo(const char* v) const; private: Type type_; base::StringPiece value_; Location location_; }; #endif // TOOLS_GN_TOKEN_H_