blob: d102654747d758213a5ac3bf8aa8bcdbcd3b60fa [file] [log] [blame]
alokp@chromium.org4e4b8072011-08-07 05:36:04 +00001//
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
alokp@chromium.org2e818912012-06-29 21:26:03 +00009#include <cassert>
alokp@chromium.org2e818912012-06-29 21:26:03 +000010
alokp@chromium.orgfc0543f2012-07-11 20:31:02 +000011#include "numeric_lex.h"
alokp@chromium.org2e818912012-06-29 21:26:03 +000012
alokp@chromium.org4e4b8072011-08-07 05:36:04 +000013namespace pp
14{
15
alokp@chromium.org19d7aa62012-05-31 17:34:05 +000016void Token::reset()
17{
18 type = 0;
19 flags = 0;
20 location = SourceLocation();
alokp@chromium.org5b6a68e2012-06-28 20:29:13 +000021 text.clear();
alokp@chromium.org19d7aa62012-05-31 17:34:05 +000022}
23
Zhenyao Mod526f982014-05-13 14:51:19 -070024bool Token::equals(const Token &other) const
alokp@chromium.org19d7aa62012-05-31 17:34:05 +000025{
26 return (type == other.type) &&
27 (flags == other.flags) &&
28 (location == other.location) &&
alokp@chromium.org5b6a68e2012-06-28 20:29:13 +000029 (text == other.text);
alokp@chromium.org19d7aa62012-05-31 17:34:05 +000030}
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
alokp@chromium.org7fc38dd2012-06-14 18:23:23 +000048void Token::setExpansionDisabled(bool disable)
49{
50 if (disable)
51 flags |= EXPANSION_DISABLED;
52 else
53 flags &= ~EXPANSION_DISABLED;
54}
55
Zhenyao Mod526f982014-05-13 14:51:19 -070056bool Token::iValue(int *value) const
alokp@chromium.org2e818912012-06-29 21:26:03 +000057{
58 assert(type == CONST_INT);
alokp@chromium.orgfc0543f2012-07-11 20:31:02 +000059 return numeric_lex_int(text, value);
alokp@chromium.org2e818912012-06-29 21:26:03 +000060}
61
Zhenyao Mod526f982014-05-13 14:51:19 -070062bool Token::uValue(unsigned int *value) const
alokp@chromium.org2e818912012-06-29 21:26:03 +000063{
64 assert(type == CONST_INT);
alokp@chromium.orgfc0543f2012-07-11 20:31:02 +000065 return numeric_lex_int(text, value);
alokp@chromium.org2e818912012-06-29 21:26:03 +000066}
67
Zhenyao Mod526f982014-05-13 14:51:19 -070068bool Token::fValue(float *value) const
alokp@chromium.org2e818912012-06-29 21:26:03 +000069{
70 assert(type == CONST_FLOAT);
alokp@chromium.orgfc0543f2012-07-11 20:31:02 +000071 return numeric_lex_float(text, value);
alokp@chromium.org2e818912012-06-29 21:26:03 +000072}
73
Zhenyao Mod526f982014-05-13 14:51:19 -070074std::ostream &operator<<(std::ostream &out, const Token &token)
alokp@chromium.orgb81c4012011-08-21 06:53:11 +000075{
alokp@chromium.org40da4c52012-04-12 05:23:19 +000076 if (token.hasLeadingSpace())
77 out << " ";
78
alokp@chromium.org5b6a68e2012-06-28 20:29:13 +000079 out << token.text;
alokp@chromium.orgb81c4012011-08-21 06:53:11 +000080 return out;
81}
alokp@chromium.org4e4b8072011-08-07 05:36:04 +000082
alokp@chromium.org4b2a5222012-04-03 17:19:42 +000083} // namespace pp