/
mojoshader_lexer.c
1242 lines (1210 loc) · 23.8 KB
1
/* Generated by re2c 1.2.1 */
2
3
4
5
6
7
8
9
10
11
12
13
/**
* MojoShader; generate shader programs from bytecode of compiled
* Direct3D shaders.
*
* Please see the file LICENSE.txt in the source's root directory.
*
* This file written by Ryan C. Gordon.
*/
// This was originally based on examples/pp-c.re from re2c: http://re2c.org/
// re2c is public domain code.
//
14
15
// You build mojoshader_lexer.c from the .re file with re2c...
// re2c -is -o mojoshader_lexer.c mojoshader_lexer.re
16
17
18
19
20
21
22
23
24
25
26
27
//
// Changes to the lexer are done to the .re file, not the C code!
//
// Please note that this isn't a perfect C lexer, since it is used for both
// HLSL and shader assembly language, and follows the quirks of Microsoft's
// tools.
#define __MOJOSHADER_INTERNAL__ 1
#include "mojoshader_internal.h"
typedef unsigned char uchar;
28
#define YYMAXFILL 8
29
30
#define RET(t) return update_state(s, eoi, cursor, token, (Token) t)
31
32
33
34
#define YYCTYPE uchar
#define YYCURSOR cursor
#define YYLIMIT limit
#define YYMARKER s->lexer_marker
35
#define YYFILL(n) { if ((n) == 1) { cursor = sentinel; limit = cursor + YYMAXFILL; eoi = 1; } }
36
37
38
39
40
static uchar sentinel[YYMAXFILL];
static Token update_state(IncludeState *s, int eoi, const uchar *cur,
const uchar *tok, const Token val)
41
{
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
if (eoi)
{
s->bytes_left = 0;
s->source = (const char *) s->source_base + s->orig_length;
if ( (tok >= sentinel) && (tok < (sentinel+YYMAXFILL)) )
s->token = s->source;
else
s->token = (const char *) tok;
} // if
else
{
s->bytes_left -= (unsigned int) (cur - ((const uchar *) s->source));
s->source = (const char *) cur;
s->token = (const char *) tok;
} // else
s->tokenlen = (unsigned int) (s->source - s->token);
s->tokenval = val;
return val;
60
61
} // update_state
62
Token preprocessor_lexer(IncludeState *s)
63
64
{
const uchar *cursor = (const uchar *) s->source;
65
const uchar *token = cursor;
66
const uchar *matchptr;
67
const uchar *limit = cursor + s->bytes_left;
68
int eoi = 0;
69
70
71
72
73
74
75
// preprocessor directives are only valid at start of line.
if (s->tokenval == ((Token) '\n'))
goto ppdirective; // may jump back to scanner_loop.
76
scanner_loop:
77
if (YYLIMIT == YYCURSOR) YYFILL(1);
78
79
80
81
82
83
token = cursor;
{
YYCTYPE yych;
unsigned int yyaccept = 0;
84
if ((YYLIMIT - YYCURSOR) < 4) YYFILL(4);
85
yych = *YYCURSOR;
86
switch (yych) {
87
case 0x00: goto yy2;
88
89
90
case '\t':
case '\v':
case '\f':
91
92
93
94
case ' ': goto yy6;
case '\n': goto yy9;
case '\r': goto yy11;
case '!': goto yy12;
95
case '"': goto yy14;
96
97
98
99
100
101
102
103
104
105
106
107
108
case '#': goto yy15;
case '%': goto yy17;
case '&': goto yy19;
case '\'': goto yy21;
case '(': goto yy22;
case ')': goto yy24;
case '*': goto yy26;
case '+': goto yy28;
case ',': goto yy30;
case '-': goto yy32;
case '.': goto yy34;
case '/': goto yy36;
case '0': goto yy38;
109
110
111
112
113
114
115
116
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
117
118
119
120
121
122
123
case '9': goto yy40;
case ':': goto yy42;
case ';': goto yy44;
case '<': goto yy46;
case '=': goto yy48;
case '>': goto yy50;
case '?': goto yy52;
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
case 'A':
case 'B':
case 'C':
case 'D':
case 'E':
case 'F':
case 'G':
case 'H':
case 'I':
case 'J':
case 'K':
case 'L':
case 'M':
case 'N':
case 'O':
case 'P':
case 'Q':
case 'R':
case 'S':
case 'T':
case 'U':
case 'V':
case 'W':
case 'X':
case 'Y':
case 'Z':
case '_':
case 'a':
case 'b':
case 'c':
case 'd':
case 'e':
case 'f':
case 'g':
case 'h':
case 'i':
case 'j':
case 'k':
case 'l':
case 'm':
case 'n':
case 'o':
case 'p':
case 'q':
case 'r':
case 's':
case 't':
case 'u':
case 'v':
case 'w':
case 'x':
case 'y':
176
177
178
179
180
181
182
183
184
185
case 'z': goto yy54;
case '[': goto yy57;
case '\\': goto yy59;
case ']': goto yy60;
case '^': goto yy62;
case '{': goto yy64;
case '|': goto yy66;
case '}': goto yy68;
case '~': goto yy70;
default: goto yy4;
186
187
}
yy2:
188
189
++YYCURSOR;
{ if (eoi) { RET(TOKEN_EOI); } goto bad_chars; }
190
yy4:
191
++YYCURSOR;
192
193
yy5:
{ goto bad_chars; }
194
yy6:
195
++YYCURSOR;
196
if (YYLIMIT <= YYCURSOR) YYFILL(1);
197
yych = *YYCURSOR;
198
199
if (yych <= '\n') {
if (yych == '\t') goto yy6;
200
} else {
201
202
if (yych <= '\f') goto yy6;
if (yych == ' ') goto yy6;
203
}
204
{ if (s->report_whitespace) RET(' '); goto scanner_loop; }
205
yy9:
206
++YYCURSOR;
207
yy10:
208
{ s->line++; RET('\n'); }
209
yy11:
210
211
212
yych = *++YYCURSOR;
if (yych == '\n') goto yy9;
goto yy10;
213
yy12:
214
215
216
yych = *++YYCURSOR;
if (yych == '=') goto yy72;
{ RET('!'); }
217
yy14:
218
219
yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
220
221
222
if (yych == '\n') goto yy5;
if (yych == '\r') goto yy5;
goto yy75;
223
yy15:
224
225
226
yych = *++YYCURSOR;
if (yych == '#') goto yy80;
{ RET(TOKEN_HASH); }
227
yy17:
228
229
230
yych = *++YYCURSOR;
if (yych == '=') goto yy82;
{ RET('%'); }
231
yy19:
232
233
234
235
yych = *++YYCURSOR;
if (yych == '&') goto yy84;
if (yych == '=') goto yy86;
{ RET('&'); }
236
yy21:
237
238
239
240
241
242
yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
if (yych == '\n') goto yy5;
if (yych == '\r') goto yy5;
goto yy89;
yy22:
243
++YYCURSOR;
244
245
{ RET('('); }
yy24:
246
++YYCURSOR;
247
248
249
250
{ RET(')'); }
yy26:
yych = *++YYCURSOR;
if (yych == '=') goto yy92;
251
{ RET('*'); }
252
253
254
255
256
257
yy28:
yych = *++YYCURSOR;
if (yych == '+') goto yy94;
if (yych == '=') goto yy96;
{ RET('+'); }
yy30:
258
++YYCURSOR;
259
260
261
262
263
264
265
266
267
268
{ RET(','); }
yy32:
yych = *++YYCURSOR;
if (yych == '-') goto yy98;
if (yych == '=') goto yy100;
{ RET('-'); }
yy34:
yych = *++YYCURSOR;
if (yych <= '/') goto yy35;
if (yych <= '9') goto yy102;
269
yy35:
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
{ RET('.'); }
yy36:
yych = *++YYCURSOR;
if (yych <= '.') {
if (yych == '*') goto yy105;
} else {
if (yych <= '/') goto yy107;
if (yych == '=') goto yy109;
}
{ RET('/'); }
yy38:
yyaccept = 1;
yych = *(YYMARKER = ++YYCURSOR);
if (yych == 'X') goto yy114;
if (yych == 'x') goto yy114;
goto yy41;
286
yy39:
287
288
289
290
291
292
{ RET(TOKEN_INT_LITERAL); }
yy40:
yyaccept = 1;
YYMARKER = ++YYCURSOR;
if ((YYLIMIT - YYCURSOR) < 3) YYFILL(3);
yych = *YYCURSOR;
293
yy41:
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
if (yych <= 'L') {
if (yych <= '9') {
if (yych == '.') goto yy102;
if (yych <= '/') goto yy39;
goto yy40;
} else {
if (yych == 'E') goto yy111;
if (yych <= 'K') goto yy39;
goto yy112;
}
} else {
if (yych <= 'e') {
if (yych == 'U') goto yy112;
if (yych <= 'd') goto yy39;
goto yy111;
} else {
if (yych <= 'l') {
if (yych <= 'k') goto yy39;
goto yy112;
} else {
if (yych == 'u') goto yy112;
goto yy39;
}
}
}
yy42:
320
++YYCURSOR;
321
322
{ RET(':'); }
yy44:
323
++YYCURSOR;
324
325
326
327
328
329
{ if (s->asm_comments) goto singlelinecomment; RET(';'); }
yy46:
yych = *++YYCURSOR;
if (yych <= ';') goto yy47;
if (yych <= '<') goto yy115;
if (yych <= '=') goto yy117;
330
yy47:
331
332
333
334
335
336
337
338
339
340
{ RET('<'); }
yy48:
yych = *++YYCURSOR;
if (yych == '=') goto yy119;
{ RET('='); }
yy50:
yych = *++YYCURSOR;
if (yych <= '<') goto yy51;
if (yych <= '=') goto yy121;
if (yych <= '>') goto yy123;
341
yy51:
342
343
{ RET('>'); }
yy52:
344
++YYCURSOR;
345
346
{ RET('?'); }
yy54:
347
++YYCURSOR;
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
if (YYLIMIT <= YYCURSOR) YYFILL(1);
yych = *YYCURSOR;
if (yych <= 'Z') {
if (yych <= '/') goto yy56;
if (yych <= '9') goto yy54;
if (yych >= 'A') goto yy54;
} else {
if (yych <= '_') {
if (yych >= '_') goto yy54;
} else {
if (yych <= '`') goto yy56;
if (yych <= 'z') goto yy54;
}
}
yy56:
{ RET(TOKEN_IDENTIFIER); }
364
yy57:
365
++YYCURSOR;
366
{ RET('['); }
367
yy59:
368
369
370
371
372
373
374
yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
if (yych <= 0x08) goto yy5;
if (yych <= '\r') goto yy126;
if (yych == ' ') goto yy126;
goto yy5;
yy60:
375
++YYCURSOR;
376
377
378
379
380
{ RET(']'); }
yy62:
yych = *++YYCURSOR;
if (yych == '=') goto yy130;
{ RET('^'); }
381
yy64:
382
++YYCURSOR;
383
{ RET('{'); }
384
385
yy66:
yych = *++YYCURSOR;
386
387
388
if (yych == '=') goto yy132;
if (yych == '|') goto yy134;
{ RET('|'); }
389
yy68:
390
391
++YYCURSOR;
{ RET('}'); }
392
yy70:
393
++YYCURSOR;
394
{ RET('~'); }
395
yy72:
396
397
++YYCURSOR;
{ RET(TOKEN_NEQ); }
398
yy74:
399
++YYCURSOR;
400
if (YYLIMIT <= YYCURSOR) YYFILL(1);
401
yych = *YYCURSOR;
402
yy75:
403
if (yych <= '\r') {
404
405
if (yych == '\n') goto yy76;
if (yych <= '\f') goto yy74;
406
} else {
407
if (yych <= '"') {
408
409
if (yych <= '!') goto yy74;
goto yy77;
410
} else {
411
412
if (yych == '\\') goto yy79;
goto yy74;
413
}
414
}
415
yy76:
416
417
YYCURSOR = YYMARKER;
if (yyaccept <= 1) {
418
419
if (yyaccept == 0) {
goto yy5;
420
} else {
421
goto yy39;
422
423
}
} else {
424
goto yy104;
425
}
426
427
428
429
yy77:
++YYCURSOR;
{ RET(TOKEN_STRING_LITERAL); }
yy79:
430
++YYCURSOR;
431
if (YYLIMIT <= YYCURSOR) YYFILL(1);
432
yych = *YYCURSOR;
433
434
435
if (yych <= 'b') {
if (yych <= '7') {
if (yych <= '&') {
436
437
if (yych == '"') goto yy74;
goto yy76;
438
} else {
439
440
441
if (yych <= '\'') goto yy74;
if (yych <= '/') goto yy76;
goto yy74;
442
443
}
} else {
444
if (yych <= '[') {
445
446
if (yych == '?') goto yy74;
goto yy76;
447
} else {
448
449
450
if (yych <= '\\') goto yy74;
if (yych <= '`') goto yy76;
goto yy74;
451
452
453
}
}
} else {
454
455
if (yych <= 'r') {
if (yych <= 'm') {
456
457
if (yych == 'f') goto yy74;
goto yy76;
458
} else {
459
460
461
if (yych <= 'n') goto yy74;
if (yych <= 'q') goto yy76;
goto yy74;
462
463
}
} else {
464
if (yych <= 'u') {
465
466
if (yych == 't') goto yy74;
goto yy76;
467
} else {
468
469
470
if (yych <= 'v') goto yy74;
if (yych == 'x') goto yy136;
goto yy76;
471
472
473
}
}
}
474
yy80:
475
++YYCURSOR;
476
477
{ RET(TOKEN_HASHHASH); }
yy82:
478
++YYCURSOR;
479
480
481
482
483
484
485
486
{ RET(TOKEN_MODASSIGN); }
yy84:
++YYCURSOR;
{ RET(TOKEN_ANDAND); }
yy86:
++YYCURSOR;
{ RET(TOKEN_ANDASSIGN); }
yy88:
487
++YYCURSOR;
488
if (YYLIMIT <= YYCURSOR) YYFILL(1);
489
yych = *YYCURSOR;
490
491
492
493
494
yy89:
if (yych <= '\r') {
if (yych == '\n') goto yy76;
if (yych <= '\f') goto yy88;
goto yy76;
495
} else {
496
497
if (yych <= '\'') {
if (yych <= '&') goto yy88;
498
} else {
499
500
if (yych == '\\') goto yy91;
goto yy88;
501
502
}
}
503
504
505
++YYCURSOR;
goto yy39;
yy91:
506
++YYCURSOR;
507
if (YYLIMIT <= YYCURSOR) YYFILL(1);
508
yych = *YYCURSOR;
509
510
511
512
513
514
515
516
517
518
if (yych <= 'b') {
if (yych <= '7') {
if (yych <= '&') {
if (yych == '"') goto yy88;
goto yy76;
} else {
if (yych <= '\'') goto yy88;
if (yych <= '/') goto yy76;
goto yy88;
}
519
} else {
520
521
522
523
524
525
526
527
if (yych <= '[') {
if (yych == '?') goto yy88;
goto yy76;
} else {
if (yych <= '\\') goto yy88;
if (yych <= '`') goto yy76;
goto yy88;
}
528
529
}
} else {
530
531
if (yych <= 'r') {
if (yych <= 'm') {
532
533
if (yych == 'f') goto yy88;
goto yy76;
534
} else {
535
536
537
if (yych <= 'n') goto yy88;
if (yych <= 'q') goto yy76;
goto yy88;
538
539
}
} else {
540
if (yych <= 'u') {
541
542
if (yych == 't') goto yy88;
goto yy76;
543
} else {
544
545
546
if (yych <= 'v') goto yy88;
if (yych == 'x') goto yy137;
goto yy76;
547
548
549
}
}
}
550
yy92:
551
++YYCURSOR;
552
553
{ RET(TOKEN_MULTASSIGN); }
yy94:
554
++YYCURSOR;
555
556
{ RET(TOKEN_INCREMENT); }
yy96:
557
++YYCURSOR;
558
559
560
561
562
563
564
565
{ RET(TOKEN_ADDASSIGN); }
yy98:
++YYCURSOR;
{ RET(TOKEN_DECREMENT); }
yy100:
++YYCURSOR;
{ RET(TOKEN_SUBASSIGN); }
yy102:
566
yyaccept = 2;
567
YYMARKER = ++YYCURSOR;
568
if ((YYLIMIT - YYCURSOR) < 3) YYFILL(3);
569
yych = *YYCURSOR;
570
571
572
573
if (yych <= 'G') {
if (yych <= 'D') {
if (yych <= '/') goto yy104;
if (yych <= '9') goto yy102;
574
} else {
575
576
if (yych <= 'E') goto yy111;
if (yych <= 'F') goto yy138;
577
578
}
} else {
579
if (yych <= 'e') {
580
581
if (yych <= 'H') goto yy138;
if (yych >= 'e') goto yy111;
582
} else {
583
584
if (yych == 'g') goto yy104;
if (yych <= 'h') goto yy138;
585
586
}
}
587
588
589
590
591
592
593
594
595
596
597
598
yy104:
{ RET(TOKEN_FLOAT_LITERAL); }
yy105:
++YYCURSOR;
{ goto multilinecomment; }
yy107:
++YYCURSOR;
{ goto singlelinecomment; }
yy109:
++YYCURSOR;
{ RET(TOKEN_DIVASSIGN); }
yy111:
599
yych = *++YYCURSOR;
600
if (yych <= ',') {
601
602
if (yych == '+') goto yy139;
goto yy76;
603
} else {
604
605
606
607
if (yych <= '-') goto yy139;
if (yych <= '/') goto yy76;
if (yych <= '9') goto yy140;
goto yy76;
608
}
609
yy112:
610
++YYCURSOR;
611
if (YYLIMIT <= YYCURSOR) YYFILL(1);
612
yych = *YYCURSOR;
613
if (yych <= 'U') {
614
615
616
if (yych == 'L') goto yy112;
if (yych <= 'T') goto yy39;
goto yy112;
617
} else {
618
if (yych <= 'l') {
619
620
if (yych <= 'k') goto yy39;
goto yy112;
621
} else {
622
623
if (yych == 'u') goto yy112;
goto yy39;
624
625
}
}
626
yy114:
627
yych = *++YYCURSOR;
628
629
630
631
if (yych <= '@') {
if (yych <= '/') goto yy76;
if (yych <= '9') goto yy142;
goto yy76;
632
} else {
633
634
635
636
if (yych <= 'F') goto yy142;
if (yych <= '`') goto yy76;
if (yych <= 'f') goto yy142;
goto yy76;
637
}
638
yy115:
639
yych = *++YYCURSOR;
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
if (yych == '=') goto yy144;
{ RET(TOKEN_LSHIFT); }
yy117:
++YYCURSOR;
{ RET(TOKEN_LEQ); }
yy119:
++YYCURSOR;
{ RET(TOKEN_EQL); }
yy121:
++YYCURSOR;
{ RET(TOKEN_GEQ); }
yy123:
yych = *++YYCURSOR;
if (yych == '=') goto yy146;
{ RET(TOKEN_RSHIFT); }
yy125:
++YYCURSOR;
if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
yych = *YYCURSOR;
yy126:
if (yych <= '\f') {
if (yych <= 0x08) goto yy76;
if (yych != '\n') goto yy125;
663
} else {
664
665
666
if (yych <= '\r') goto yy129;
if (yych == ' ') goto yy125;
goto yy76;
667
}
668
669
670
671
672
yy127:
++YYCURSOR;
yy128:
{ s->line++; goto scanner_loop; }
yy129:
673
yych = *++YYCURSOR;
674
675
676
677
678
679
680
681
682
683
684
685
if (yych == '\n') goto yy127;
goto yy128;
yy130:
++YYCURSOR;
{ RET(TOKEN_XORASSIGN); }
yy132:
++YYCURSOR;
{ RET(TOKEN_ORASSIGN); }
yy134:
++YYCURSOR;
{ RET(TOKEN_OROR); }
yy136:
686
++YYCURSOR;
687
if (YYLIMIT <= YYCURSOR) YYFILL(1);
688
yych = *YYCURSOR;
689
690
691
692
if (yych <= '@') {
if (yych <= '/') goto yy76;
if (yych <= '9') goto yy74;
goto yy76;
693
} else {
694
695
696
697
if (yych <= 'F') goto yy74;
if (yych <= '`') goto yy76;
if (yych <= 'f') goto yy74;
goto yy76;
698
}
699
700
701
702
703
704
705
706
yy137:
++YYCURSOR;
if (YYLIMIT <= YYCURSOR) YYFILL(1);
yych = *YYCURSOR;
if (yych <= '@') {
if (yych <= '/') goto yy76;
if (yych <= '9') goto yy88;
goto yy76;
707
} else {
708
709
710
711
if (yych <= 'F') goto yy88;
if (yych <= '`') goto yy76;
if (yych <= 'f') goto yy88;
goto yy76;
712
}
713
714
715
716
yy138:
++YYCURSOR;
goto yy104;
yy139:
717
yych = *++YYCURSOR;
718
719
720
if (yych <= '/') goto yy76;
if (yych >= ':') goto yy76;
yy140:
721
++YYCURSOR;
722
if (YYLIMIT <= YYCURSOR) YYFILL(1);
723
yych = *YYCURSOR;
724
if (yych <= 'G') {
725
if (yych <= '9') {
726
727
if (yych <= '/') goto yy104;
goto yy140;
728
} else {
729
730
if (yych == 'F') goto yy138;
goto yy104;
731
732
}
} else {
733
if (yych <= 'f') {
734
735
736
if (yych <= 'H') goto yy138;
if (yych <= 'e') goto yy104;
goto yy138;
737
} else {
738
739
if (yych == 'h') goto yy138;
goto yy104;
740
741
}
}
742
yy142:
743
++YYCURSOR;
744
if (YYLIMIT <= YYCURSOR) YYFILL(1);
745
yych = *YYCURSOR;
746
747
if (yych <= 'T') {
if (yych <= '@') {
748
749
750
if (yych <= '/') goto yy39;
if (yych <= '9') goto yy142;
goto yy39;
751
} else {
752
753
754
if (yych <= 'F') goto yy142;
if (yych == 'L') goto yy112;
goto yy39;
755
756
}
} else {
757
if (yych <= 'k') {
758
759
760
761
if (yych <= 'U') goto yy112;
if (yych <= '`') goto yy39;
if (yych <= 'f') goto yy142;
goto yy39;
762
} else {
763
764
765
if (yych <= 'l') goto yy112;
if (yych == 'u') goto yy112;
goto yy39;
766
767
}
}
768
yy144:
769
++YYCURSOR;
770
771
{ RET(TOKEN_LSHIFTASSIGN); }
yy146:
772
++YYCURSOR;
773
{ RET(TOKEN_RSHIFTASSIGN); }
774
775
776
777
}
multilinecomment:
778
if (YYLIMIT == YYCURSOR) YYFILL(1);
779
matchptr = cursor;
780
781
782
783
// The "*\/" is just to avoid screwing up text editor syntax highlighting.
{
YYCTYPE yych;
784
if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
785
yych = *YYCURSOR;
786
if (yych <= '\f') {
787
788
789
if (yych <= 0x00) goto yy150;
if (yych == '\n') goto yy154;
goto yy152;
790
} else {
791
792
793
if (yych <= '\r') goto yy156;
if (yych == '*') goto yy157;
goto yy152;
794
}
795
yy150:
796
++YYCURSOR;
797
{
798
799
if (eoi)
RET(TOKEN_INCOMPLETE_COMMENT);
800
801
goto multilinecomment;
}
802
803
804
805
806
yy152:
++YYCURSOR;
yy153:
{ goto multilinecomment; }
yy154:
807
++YYCURSOR;
808
yy155:
809
{
810
s->line++;
811
812
goto multilinecomment;
}
813
yy156:
814
yych = *++YYCURSOR;
815
816
817
if (yych == '\n') goto yy154;
goto yy155;
yy157:
818
yych = *++YYCURSOR;
819
if (yych != '/') goto yy153;
820
++YYCURSOR;
821
{
822
823
if (s->report_comments)
RET(TOKEN_MULTI_COMMENT);
824
825
else if (s->report_whitespace)
RET(' ');
826
827
828
829
830
831
832
833
834
835
836
837
// Microsoft's preprocessor allows multiline comments
// before a preprocessor directive, even though C/C++
// doesn't. See if we've hit this case.
#if MATCH_MICROSOFT_PREPROCESSOR
if (s->tokenval == ((Token) '\n')) // was start of line?
{
update_state(s, eoi, cursor, token, (Token) '\n');
goto ppdirective; // may jump back to scanner_loop.
}
#endif
838
839
goto scanner_loop;
}
840
841
842
843
}
singlelinecomment:
844
if (YYLIMIT == YYCURSOR) YYFILL(1);
845
matchptr = cursor;
846
847
848
{
YYCTYPE yych;
849
if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
850
yych = *YYCURSOR;
851
if (yych <= '\n') {
852
853
854
if (yych <= 0x00) goto yy162;
if (yych <= '\t') goto yy164;
goto yy166;
855
} else {
856
857
if (yych == '\r') goto yy168;
goto yy164;
858
}
859
yy162:
860
++YYCURSOR;
861
862
863
864
865
866
867
868
869
870
{
if (eoi)
{
if (s->report_comments)
RET(TOKEN_SINGLE_COMMENT);
else
RET(TOKEN_EOI);
}
goto singlelinecomment;
}
871
yy164:
872
873
++YYCURSOR;
{ goto singlelinecomment; }
874
yy166:
875
++YYCURSOR;
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
yy167:
{
s->line++;
if (s->report_comments)
{
cursor = matchptr; // so we RET('\n') next.
RET(TOKEN_SINGLE_COMMENT);
}
token = matchptr;
RET('\n');
}
yy168:
yych = *++YYCURSOR;
if (yych == '\n') goto yy166;
goto yy167;
891
892
893
894
895
896
897
898
899
900
901
902
}
ppdirective:
if (YYLIMIT == YYCURSOR) YYFILL(1);
{
YYCTYPE yych;
unsigned int yyaccept = 0;
if ((YYLIMIT - YYCURSOR) < 8) YYFILL(8);
yych = *YYCURSOR;
if (yych <= '\f') {
903
904
if (yych == '\t') goto yy173;
if (yych >= '\v') goto yy173;
905
906
} else {
if (yych <= ' ') {
907
if (yych >= ' ') goto yy173;
908
} else {
909
if (yych == '#') goto yy176;
910
911
}
}
912
913
++YYCURSOR;
yy172:
914
915
916
917
918
{
token = cursor = (const uchar *) s->source;
limit = cursor + s->bytes_left;
goto scanner_loop;
}
919
yy173:
920
921
922
923
++YYCURSOR;
if (YYLIMIT <= YYCURSOR) YYFILL(1);
yych = *YYCURSOR;
if (yych <= '\n') {
924
if (yych == '\t') goto yy173;
925
} else {
926
927
if (yych <= '\f') goto yy173;
if (yych == ' ') goto yy173;
928
}
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
{ goto ppdirective; }
yy176:
yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
if (yych <= 'h') {
if (yych <= 0x1F) {
if (yych == '\t') goto yy178;
goto yy172;
} else {
if (yych <= ' ') goto yy178;
if (yych <= 'c') goto yy172;
if (yych <= 'e') goto yy178;
goto yy172;
}
} else {
if (yych <= 'o') {
if (yych <= 'i') goto yy178;
if (yych == 'l') goto yy178;
goto yy172;
} else {
if (yych <= 'p') goto yy178;
if (yych == 'u') goto yy178;
goto yy172;
}
}
yy177:
955
++YYCURSOR;
956
if ((YYLIMIT - YYCURSOR) < 7) YYFILL(7);
957
yych = *YYCURSOR;
958
yy178:
959
960
if (yych <= 'h') {
if (yych <= ' ') {
961
962
if (yych == '\t') goto yy177;
if (yych >= ' ') goto yy177;
963
} else {
964
965
966
if (yych <= 'c') goto yy179;
if (yych <= 'd') goto yy180;
if (yych <= 'e') goto yy181;
967
968
}
} else {
969
if (yych <= 'o') {
970
971
if (yych <= 'i') goto yy182;
if (yych == 'l') goto yy183;
972
} else {
973
974
if (yych <= 'p') goto yy184;
if (yych == 'u') goto yy185;
975
976
}
}
977
yy179:
978
YYCURSOR = YYMARKER;
979
980
if (yyaccept == 0) {
goto yy172;
981
} else {
982
goto yy191;
983
}
984
yy180:
985
yych = *++YYCURSOR;
986
987
988
if (yych == 'e') goto yy186;
goto yy179;
yy181:
989
990
yych = *++YYCURSOR;
if (yych <= 'm') {
991
992
if (yych == 'l') goto yy187;
goto yy179;
993
} else {
994
995
996
if (yych <= 'n') goto yy188;
if (yych == 'r') goto yy189;
goto yy179;
997
}
998
yy182:
999
yych = *++YYCURSOR;
1000
if (yych == 'f') goto yy190;