• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //
2 // Copyright (c) 2011 The ANGLE Project Authors. All rights reserved.
3 // Use of this source code is governed by a BSD-style license that can be
4 // found in the LICENSE file.
5 //
6 
7 #include "Token.h"
8 
9 #include <cassert>
10 
11 #include "numeric_lex.h"
12 
13 namespace pp
14 {
15 
reset()16 void Token::reset()
17 {
18     type = 0;
19     flags = 0;
20     location = SourceLocation();
21     text.clear();
22 }
23 
equals(const Token & other) const24 bool Token::equals(const Token &other) const
25 {
26     return (type == other.type) &&
27            (flags == other.flags) &&
28            (location == other.location) &&
29            (text == other.text);
30 }
31 
setAtStartOfLine(bool start)32 void Token::setAtStartOfLine(bool start)
33 {
34     if (start)
35         flags |= AT_START_OF_LINE;
36     else
37         flags &= ~AT_START_OF_LINE;
38 }
39 
setHasLeadingSpace(bool space)40 void Token::setHasLeadingSpace(bool space)
41 {
42     if (space)
43         flags |= HAS_LEADING_SPACE;
44     else
45         flags &= ~HAS_LEADING_SPACE;
46 }
47 
setExpansionDisabled(bool disable)48 void Token::setExpansionDisabled(bool disable)
49 {
50     if (disable)
51         flags |= EXPANSION_DISABLED;
52     else
53         flags &= ~EXPANSION_DISABLED;
54 }
55 
iValue(int * value) const56 bool Token::iValue(int *value) const
57 {
58     assert(type == CONST_INT);
59     return numeric_lex_int(text, value);
60 }
61 
uValue(unsigned int * value) const62 bool Token::uValue(unsigned int *value) const
63 {
64     assert(type == CONST_INT);
65     return numeric_lex_int(text, value);
66 }
67 
fValue(float * value) const68 bool Token::fValue(float *value) const
69 {
70     assert(type == CONST_FLOAT);
71     return numeric_lex_float(text, value);
72 }
73 
operator <<(std::ostream & out,const Token & token)74 std::ostream &operator<<(std::ostream &out, const Token &token)
75 {
76     if (token.hasLeadingSpace())
77         out << " ";
78 
79     out << token.text;
80     return out;
81 }
82 
83 }  // namespace pp
84