1d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch// Copyright (c) 2013 The Chromium Authors. All rights reserved. 2d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch// found in the LICENSE file. 4d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 5d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch#ifndef TOOLS_GN_TOKEN_H_ 6d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch#define TOOLS_GN_TOKEN_H_ 7d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 8d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch#include "base/strings/string_piece.h" 9d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch#include "tools/gn/location.h" 10d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 11d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochclass Token { 12d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch public: 13d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch enum Type { 14d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch INVALID, 15d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch INTEGER, // 123 16d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch STRING, // "blah" 173551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) TRUE_TOKEN, // Not "TRUE" to avoid collisions with #define in windows.h. 183551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) FALSE_TOKEN, 193551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // Various operators. 213551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) EQUAL, 223551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) PLUS, 233551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) MINUS, 243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) PLUS_EQUALS, 253551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) MINUS_EQUALS, 263551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) EQUAL_EQUAL, 273551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) NOT_EQUAL, 283551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) LESS_EQUAL, 293551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) GREATER_EQUAL, 303551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) LESS_THAN, 313551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) GREATER_THAN, 323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) BOOLEAN_AND, 333551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) BOOLEAN_OR, 343551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) BANG, 35effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch DOT, 363551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 373551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) LEFT_PAREN, 383551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) RIGHT_PAREN, 393551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) LEFT_BRACKET, 403551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) RIGHT_BRACKET, 413551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) LEFT_BRACE, 423551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) RIGHT_BRACE, 433551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 443551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) IF, 453551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ELSE, 46d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch IDENTIFIER, // foo 473551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) COMMA, // , 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci UNCLASSIFIED_COMMENT, // #...\n, of unknown style (will be converted 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // to one below) 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci LINE_COMMENT, // #...\n on a line alone. 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SUFFIX_COMMENT, // #...\n on a line following other code. 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci BLOCK_COMMENT, // #...\n line comment, but free-standing. 533551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci UNCLASSIFIED_OPERATOR, 553551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 563551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) NUM_TYPES 57d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch }; 58d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 59d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch Token(); 60d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch Token(const Location& location, Type t, const base::StringPiece& v); 61d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 62d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch Type type() const { return type_; } 63d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch const base::StringPiece& value() const { return value_; } 64d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch const Location& location() const { return location_; } 65d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch LocationRange range() const { 661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return LocationRange( 671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci location_, 681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Location(location_.file(), 691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci location_.line_number(), 701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci location_.char_offset() + static_cast<int>(value_.size()), 711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci location_.byte() + static_cast<int>(value_.size()))); 72d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch } 73d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 74d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch // Helper functions for comparing this token to something. 75d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch bool IsIdentifierEqualTo(const char* v) const; 76d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch bool IsStringEqualTo(const char* v) const; 77d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 78d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch private: 79d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch Type type_; 80d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch base::StringPiece value_; 81d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch Location location_; 82d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch}; 83d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 84d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch#endif // TOOLS_GN_TOKEN_H_ 85