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