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 13namespace pp 14{ 15 16void Token::reset() 17{ 18 type = 0; 19 flags = 0; 20 location = SourceLocation(); 21 text.clear(); 22} 23 24bool 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 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 40void Token::setHasLeadingSpace(bool space) 41{ 42 if (space) 43 flags |= HAS_LEADING_SPACE; 44 else 45 flags &= ~HAS_LEADING_SPACE; 46} 47 48void Token::setExpansionDisabled(bool disable) 49{ 50 if (disable) 51 flags |= EXPANSION_DISABLED; 52 else 53 flags &= ~EXPANSION_DISABLED; 54} 55 56bool Token::iValue(int* value) const 57{ 58 assert(type == CONST_INT); 59 return numeric_lex_int(text, value); 60} 61 62bool Token::uValue(unsigned int* value) const 63{ 64 assert(type == CONST_INT); 65 return numeric_lex_int(text, value); 66} 67 68bool Token::fValue(float* value) const 69{ 70 assert(type == CONST_FLOAT); 71 return numeric_lex_float(text, value); 72} 73 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