| 201 | }; |
| 202 | |
| 203 | bool IsLiteral(Parser *parser, Int start, Int end) { |
| 204 | Int op = 0; |
| 205 | Int lit = 0; |
| 206 | for (Int i = start; i < end; i++) { |
| 207 | Token &token = parser->token(i); |
| 208 | switch (token.sym) { |
| 209 | case SymWS: |
| 210 | case SymEOL: |
| 211 | case SymComment: |
| 212 | break; |
| 213 | case SymOp: |
| 214 | if (token.str->eq("-") || token.str->eq("+")) |
| 215 | op++; |
| 216 | else |
| 217 | return false; |
| 218 | break; |
| 219 | case SymLiteral: |
| 220 | lit++; |
| 221 | break; |
| 222 | default: |
| 223 | return false; |
| 224 | } |
| 225 | } |
| 226 | return lit >= 1 && op <= 1; |
| 227 | } |
| 228 | |
| 229 | void EmitDecl(Parser *parser, Str *storage_class, |
| 230 | Int type_start, Int type_end, |