xref: /aosp_15_r20/external/angle/src/compiler/preprocessor/Token.cpp (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1*8975f5c5SAndroid Build Coastguard Worker //
2*8975f5c5SAndroid Build Coastguard Worker // Copyright 2011 The ANGLE Project Authors. All rights reserved.
3*8975f5c5SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
4*8975f5c5SAndroid Build Coastguard Worker // found in the LICENSE file.
5*8975f5c5SAndroid Build Coastguard Worker //
6*8975f5c5SAndroid Build Coastguard Worker 
7*8975f5c5SAndroid Build Coastguard Worker #include "compiler/preprocessor/Token.h"
8*8975f5c5SAndroid Build Coastguard Worker 
9*8975f5c5SAndroid Build Coastguard Worker #include "common/debug.h"
10*8975f5c5SAndroid Build Coastguard Worker #include "compiler/preprocessor/numeric_lex.h"
11*8975f5c5SAndroid Build Coastguard Worker 
12*8975f5c5SAndroid Build Coastguard Worker namespace angle
13*8975f5c5SAndroid Build Coastguard Worker {
14*8975f5c5SAndroid Build Coastguard Worker 
15*8975f5c5SAndroid Build Coastguard Worker namespace pp
16*8975f5c5SAndroid Build Coastguard Worker {
17*8975f5c5SAndroid Build Coastguard Worker 
reset()18*8975f5c5SAndroid Build Coastguard Worker void Token::reset()
19*8975f5c5SAndroid Build Coastguard Worker {
20*8975f5c5SAndroid Build Coastguard Worker     type     = 0;
21*8975f5c5SAndroid Build Coastguard Worker     flags    = 0;
22*8975f5c5SAndroid Build Coastguard Worker     location = SourceLocation();
23*8975f5c5SAndroid Build Coastguard Worker     text.clear();
24*8975f5c5SAndroid Build Coastguard Worker }
25*8975f5c5SAndroid Build Coastguard Worker 
equals(const Token & other) const26*8975f5c5SAndroid Build Coastguard Worker bool Token::equals(const Token &other) const
27*8975f5c5SAndroid Build Coastguard Worker {
28*8975f5c5SAndroid Build Coastguard Worker     return (type == other.type) && (flags == other.flags) && (location == other.location) &&
29*8975f5c5SAndroid Build Coastguard Worker            (text == other.text);
30*8975f5c5SAndroid Build Coastguard Worker }
31*8975f5c5SAndroid Build Coastguard Worker 
setAtStartOfLine(bool start)32*8975f5c5SAndroid Build Coastguard Worker void Token::setAtStartOfLine(bool start)
33*8975f5c5SAndroid Build Coastguard Worker {
34*8975f5c5SAndroid Build Coastguard Worker     if (start)
35*8975f5c5SAndroid Build Coastguard Worker         flags |= AT_START_OF_LINE;
36*8975f5c5SAndroid Build Coastguard Worker     else
37*8975f5c5SAndroid Build Coastguard Worker         flags &= ~AT_START_OF_LINE;
38*8975f5c5SAndroid Build Coastguard Worker }
39*8975f5c5SAndroid Build Coastguard Worker 
setHasLeadingSpace(bool space)40*8975f5c5SAndroid Build Coastguard Worker void Token::setHasLeadingSpace(bool space)
41*8975f5c5SAndroid Build Coastguard Worker {
42*8975f5c5SAndroid Build Coastguard Worker     if (space)
43*8975f5c5SAndroid Build Coastguard Worker         flags |= HAS_LEADING_SPACE;
44*8975f5c5SAndroid Build Coastguard Worker     else
45*8975f5c5SAndroid Build Coastguard Worker         flags &= ~HAS_LEADING_SPACE;
46*8975f5c5SAndroid Build Coastguard Worker }
47*8975f5c5SAndroid Build Coastguard Worker 
setExpansionDisabled(bool disable)48*8975f5c5SAndroid Build Coastguard Worker void Token::setExpansionDisabled(bool disable)
49*8975f5c5SAndroid Build Coastguard Worker {
50*8975f5c5SAndroid Build Coastguard Worker     if (disable)
51*8975f5c5SAndroid Build Coastguard Worker         flags |= EXPANSION_DISABLED;
52*8975f5c5SAndroid Build Coastguard Worker     else
53*8975f5c5SAndroid Build Coastguard Worker         flags &= ~EXPANSION_DISABLED;
54*8975f5c5SAndroid Build Coastguard Worker }
55*8975f5c5SAndroid Build Coastguard Worker 
iValue(int * value) const56*8975f5c5SAndroid Build Coastguard Worker bool Token::iValue(int *value) const
57*8975f5c5SAndroid Build Coastguard Worker {
58*8975f5c5SAndroid Build Coastguard Worker     ASSERT(type == CONST_INT);
59*8975f5c5SAndroid Build Coastguard Worker     return numeric_lex_int(text, value);
60*8975f5c5SAndroid Build Coastguard Worker }
61*8975f5c5SAndroid Build Coastguard Worker 
uValue(unsigned int * value) const62*8975f5c5SAndroid Build Coastguard Worker bool Token::uValue(unsigned int *value) const
63*8975f5c5SAndroid Build Coastguard Worker {
64*8975f5c5SAndroid Build Coastguard Worker     ASSERT(type == CONST_INT);
65*8975f5c5SAndroid Build Coastguard Worker     return numeric_lex_int(text, value);
66*8975f5c5SAndroid Build Coastguard Worker }
67*8975f5c5SAndroid Build Coastguard Worker 
operator <<(std::ostream & out,const Token & token)68*8975f5c5SAndroid Build Coastguard Worker std::ostream &operator<<(std::ostream &out, const Token &token)
69*8975f5c5SAndroid Build Coastguard Worker {
70*8975f5c5SAndroid Build Coastguard Worker     if (token.hasLeadingSpace())
71*8975f5c5SAndroid Build Coastguard Worker         out << " ";
72*8975f5c5SAndroid Build Coastguard Worker 
73*8975f5c5SAndroid Build Coastguard Worker     out << token.text;
74*8975f5c5SAndroid Build Coastguard Worker     return out;
75*8975f5c5SAndroid Build Coastguard Worker }
76*8975f5c5SAndroid Build Coastguard Worker 
77*8975f5c5SAndroid Build Coastguard Worker }  // namespace pp
78*8975f5c5SAndroid Build Coastguard Worker 
79*8975f5c5SAndroid Build Coastguard Worker }  // namespace angle
80