Return a variable type based on the token stack.
42{
43 enum
44 {
45 ENUM_VOID = 1 << 0,
46 ENUM_BOOL = 1 << 2,
47 ENUM_CHAR = 1 << 4,
48 ENUM_SHORT = 1 << 6,
49 ENUM_INT = 1 << 8,
50 ENUM_LONG = 1 << 10,
51 ENUM_FLOAT = 1 << 12,
52 ENUM_DOUBLE = 1 << 14,
53 ENUM_OTHER = 1 << 16,
54 ENUM_SIGNED = 1 << 17,
55 ENUM_UNSIGNED = 1 << 18,
56 };
57
59 int Counter = 0;
61
62 while (PtokenStack->
Pointer > 0)
63 {
64 TopToken =
Pop(PtokenStack);
66 {
67 Push(PtokenStack, TopToken);
68 break;
69 }
70 if (!strcmp(TopToken->
Value,
"void"))
71 {
72 Counter += ENUM_VOID;
73 }
74 else if (!strcmp(TopToken->
Value,
"bool"))
75 {
76 Counter += ENUM_BOOL;
77 }
78 else if (!strcmp(TopToken->
Value,
"char"))
79 {
80 Counter += ENUM_CHAR;
81 }
82 else if (!strcmp(TopToken->
Value,
"short"))
83 {
84 Counter += ENUM_SHORT;
85 }
86 else if (!strcmp(TopToken->
Value,
"int"))
87 {
88 Counter += ENUM_INT;
89 }
90 else if (!strcmp(TopToken->
Value,
"long"))
91 {
92 Counter += ENUM_LONG;
93 }
94 else if (!strcmp(TopToken->
Value,
"float"))
95 {
96 Counter += ENUM_FLOAT;
97 }
98 else if (!strcmp(TopToken->
Value,
"double"))
99 {
100 Counter += ENUM_DOUBLE;
101 }
102 else if (!strcmp(TopToken->
Value,
"signed"))
103 {
104 Counter |= ENUM_SIGNED;
105 }
106 else if (!strcmp(TopToken->
Value,
"unsigned"))
107 {
108 Counter |= ENUM_UNSIGNED;
109 }
110 else
111 {
113 }
115
116 switch (Counter)
117 {
118 case ENUM_VOID:
120 break;
121 case ENUM_BOOL:
123 break;
124 case ENUM_CHAR:
125 case ENUM_SIGNED + ENUM_CHAR:
127 break;
128 case ENUM_UNSIGNED + ENUM_CHAR:
130 break;
131 case ENUM_SHORT:
132 case ENUM_SHORT + ENUM_INT:
133 case ENUM_SIGNED + ENUM_SHORT:
134 case ENUM_SIGNED + ENUM_SHORT + ENUM_INT:
136 break;
137 case ENUM_UNSIGNED + ENUM_SHORT:
138 case ENUM_UNSIGNED + ENUM_SHORT + ENUM_INT:
140 break;
141 case ENUM_INT:
142 case ENUM_SIGNED:
143 case ENUM_SIGNED + ENUM_INT:
145 break;
146 case ENUM_UNSIGNED:
147 case ENUM_UNSIGNED + ENUM_INT:
149 break;
150 case ENUM_LONG:
151 case ENUM_LONG + ENUM_INT:
152 case ENUM_LONG + ENUM_LONG:
153 case ENUM_LONG + ENUM_LONG + ENUM_INT:
154 case ENUM_SIGNED + ENUM_LONG:
155 case ENUM_SIGNED + ENUM_LONG + ENUM_INT:
156 case ENUM_SIGNED + ENUM_LONG + ENUM_LONG:
157 case ENUM_SIGNED + ENUM_LONG + ENUM_LONG + ENUM_INT:
159 break;
160 case ENUM_UNSIGNED + ENUM_LONG:
161 case ENUM_UNSIGNED + ENUM_LONG + ENUM_INT:
162 case ENUM_UNSIGNED + ENUM_LONG + ENUM_LONG:
163 case ENUM_UNSIGNED + ENUM_LONG + ENUM_LONG + ENUM_INT:
165 break;
166 case ENUM_FLOAT:
168 break;
169 case ENUM_DOUBLE:
171 break;
172 case ENUM_LONG + ENUM_DOUBLE:
174 break;
175 }
176 }
177 return Result;
178}
NULL()
Definition test-case-generator.py:530
PSCRIPT_ENGINE_TOKEN_LIST Push(PSCRIPT_ENGINE_TOKEN_LIST TokenList, PSCRIPT_ENGINE_TOKEN Token)
Adds Token to the last empty position of TokenList.
Definition common.c:441
void RemoveToken(PSCRIPT_ENGINE_TOKEN *Token)
Removes allocated memory of a token.
Definition common.c:116
PSCRIPT_ENGINE_TOKEN Pop(PSCRIPT_ENGINE_TOKEN_LIST TokenList)
Removes last Token of a TokenList and returns it.
Definition common.c:502
unsigned int Pointer
Definition common.h:86
SCRIPT_ENGINE_TOKEN_TYPE Type
Definition common.h:72
char * Value
Definition common.h:73
VARIABLE_TYPE * VARIABLE_TYPE_FLOAT
Definition type.c:30
VARIABLE_TYPE * VARIABLE_TYPE_UCHAR
Definition type.c:25
VARIABLE_TYPE * VARIABLE_TYPE_UNKNOWN
Definition type.c:15
VARIABLE_TYPE * VARIABLE_TYPE_DOUBLE
Definition type.c:31
VARIABLE_TYPE * VARIABLE_TYPE_ULONG
Definition type.c:28
VARIABLE_TYPE * VARIABLE_TYPE_VOID
Definition type.c:17
VARIABLE_TYPE * VARIABLE_TYPE_BOOL
Definition type.c:18
VARIABLE_TYPE * VARIABLE_TYPE_INT
Definition type.c:22
VARIABLE_TYPE * VARIABLE_TYPE_CHAR
Definition type.c:20
VARIABLE_TYPE * VARIABLE_TYPE_UINT
Definition type.c:27
VARIABLE_TYPE * VARIABLE_TYPE_USHORT
Definition type.c:26
VARIABLE_TYPE * VARIABLE_TYPE_LDOUBLE
Definition type.c:32
struct _VARIABLE_TYPE VARIABLE_TYPE