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()16void Token::reset() 17 { 18 type = 0; 19 flags = 0; 20 location = SourceLocation(); 21 text.clear(); 22 } 23 equals(const Token & other) const24bool 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)32void 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)40void 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)48void Token::setExpansionDisabled(bool disable) 49 { 50 if (disable) 51 flags |= EXPANSION_DISABLED; 52 else 53 flags &= ~EXPANSION_DISABLED; 54 } 55 iValue(int * value) const56bool Token::iValue(int *value) const 57 { 58 assert(type == CONST_INT); 59 return numeric_lex_int(text, value); 60 } 61 uValue(unsigned int * value) const62bool Token::uValue(unsigned int *value) const 63 { 64 assert(type == CONST_INT); 65 return numeric_lex_int(text, value); 66 } 67 fValue(float * value) const68bool 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)74std::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