cppvalue.cpp
Go to the documentation of this file.
1 /******************************************************************************
2  *
3  *
4  *
5  *
6  * Copyright (C) 1997-2015 by Dimitri van Heesch.
7  *
8  * Permission to use, copy, modify, and distribute this software and its
9  * documentation under the terms of the GNU General Public License is hereby
10  * granted. No representations are made about the suitability of this software
11  * for any purpose. It is provided "as is" without express or implied warranty.
12  * See the GNU General Public License for more details.
13  *
14  * Documents produced by Doxygen are derivative works derived from the
15  * input used in their production; they are not affected by this license.
16  *
17  */
18 
19 #include <stdlib.h>
20 
21 #include "cppvalue.h"
22 #include "constexp.h"
23 
25 {
26  long val = 0;
27  for (const char *p = g_strToken.data(); *p != 0; p++)
28  {
29  if (*p >= '0' && *p <= '7') val = val * 8 + *p - '0';
30  }
31  return CPPValue(val);
32 }
33 
35 {
36  long val = 0;
37  for (const char *p = g_strToken.data(); *p != 0; p++)
38  {
39  if (*p >= '0' && *p <= '9') val = val * 10 + *p - '0';
40  }
41  return CPPValue(val);
42 }
43 
45 {
46  long val = 0;
47  for (const char *p = g_strToken.data(); *p != 0; p++)
48  {
49  if (*p >= '0' && *p <= '9') val = val * 16 + *p - '0';
50  else if (*p >= 'a' && *p <= 'f') val = val * 16 + *p - 'a' + 10;
51  else if (*p >= 'A' && *p <= 'F') val = val * 16 + *p - 'A' + 10;
52  }
53  //printf("parseHexadecimal %s->%x\n",g_strToken.data(),val);
54  return CPPValue(val);
55 }
56 
57 CPPValue parseCharacter() // does not work for '\n' and the alike
58 {
59  if (g_strToken[1]=='\\')
60  {
61  switch(g_strToken[2])
62  {
63  case 'n': return CPPValue((long)'\n');
64  case 't': return CPPValue((long)'\t');
65  case 'v': return CPPValue((long)'\v');
66  case 'b': return CPPValue((long)'\b');
67  case 'r': return CPPValue((long)'\r');
68  case 'f': return CPPValue((long)'\f');
69  case 'a': return CPPValue((long)'\a');
70  case '\\': return CPPValue((long)'\\');
71  case '?': return CPPValue((long)'\?');
72  case '\'': return CPPValue((long)'\'');
73  case '"': return CPPValue((long)'"');
74  case '0': // fall through
75  case '1': // fall through
76  case '2': // fall through
77  case '3': // fall through
78  case '4': // fall through
79  case '5': // fall through
80  case '6': // fall through
81  case '7': // fall through
82  return parseOctal();
83  case 'x':
84  case 'X': return parseHexadecimal();
85  default: printf("Invalid escape sequence %s found!\n",g_strToken.data());
86  return CPPValue(0L);
87  }
88  }
89  return CPPValue((long)g_strToken[1]);
90 }
91 
93 {
94  return CPPValue(atof(g_strToken));
95 }
CPPValue parseCharacter()
Definition: cppvalue.cpp:57
CPPValue parseFloat()
Definition: cppvalue.cpp:92
QCString g_strToken
Definition: constexp.cpp:561
CPPValue parseOctal()
Definition: cppvalue.cpp:24
p
Definition: test.py:223
const char * data() const
Definition: qcstring.h:207
CPPValue parseDecimal()
Definition: cppvalue.cpp:34
CPPValue parseHexadecimal()
Definition: cppvalue.cpp:44