Roll src/third_party/WebKit f36d5e0:68b67cd (svn 193299:193303)
[chromium-blink-merge.git] / tools / gn / token.h
blob45b6e28ced214c2bb94fff785b9c44908c7c04c7
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef TOOLS_GN_TOKEN_H_
6 #define TOOLS_GN_TOKEN_H_
8 #include "base/strings/string_piece.h"
9 #include "tools/gn/location.h"
11 class Token {
12 public:
13 enum Type {
14 INVALID,
15 INTEGER, // 123
16 STRING, // "blah"
17 TRUE_TOKEN, // Not "TRUE" to avoid collisions with #define in windows.h.
18 FALSE_TOKEN,
20 // Various operators.
21 EQUAL,
22 PLUS,
23 MINUS,
24 PLUS_EQUALS,
25 MINUS_EQUALS,
26 EQUAL_EQUAL,
27 NOT_EQUAL,
28 LESS_EQUAL,
29 GREATER_EQUAL,
30 LESS_THAN,
31 GREATER_THAN,
32 BOOLEAN_AND,
33 BOOLEAN_OR,
34 BANG,
35 DOT,
37 LEFT_PAREN,
38 RIGHT_PAREN,
39 LEFT_BRACKET,
40 RIGHT_BRACKET,
41 LEFT_BRACE,
42 RIGHT_BRACE,
44 IF,
45 ELSE,
46 IDENTIFIER, // foo
47 COMMA, // ,
48 UNCLASSIFIED_COMMENT, // #...\n, of unknown style (will be converted
49 // to one below)
50 LINE_COMMENT, // #...\n on a line alone.
51 SUFFIX_COMMENT, // #...\n on a line following other code.
52 BLOCK_COMMENT, // #...\n line comment, but free-standing.
54 UNCLASSIFIED_OPERATOR,
56 NUM_TYPES
59 Token();
60 Token(const Location& location, Type t, const base::StringPiece& v);
62 Type type() const { return type_; }
63 const base::StringPiece& value() const { return value_; }
64 const Location& location() const { return location_; }
65 void set_location(Location location) { location_ = location; }
66 LocationRange range() const {
67 return LocationRange(
68 location_,
69 Location(location_.file(),
70 location_.line_number(),
71 location_.char_offset() + static_cast<int>(value_.size()),
72 location_.byte() + static_cast<int>(value_.size())));
75 // Helper functions for comparing this token to something.
76 bool IsIdentifierEqualTo(const char* v) const;
77 bool IsStringEqualTo(const char* v) const;
79 private:
80 Type type_;
81 base::StringPiece value_;
82 Location location_;
85 #endif // TOOLS_GN_TOKEN_H_