summaryrefslogtreecommitdiff
path: root/src/sp_config_scanner.cached.c
diff options
context:
space:
mode:
authorjvoisin2022-03-20 18:20:45 +0100
committerjvoisin2022-03-20 18:20:45 +0100
commit81dd7f2ef07af306fe83d7755cbac4529aa9fc8d (patch)
tree32cc44c6231b30db5ac7b15699297863460784aa /src/sp_config_scanner.cached.c
parent83b01942dfc80474cc05e09aeef4b44307a7120b (diff)
parentc38df1077a6c1dfbca1baca049214d053e2e7684 (diff)
Merge remote-tracking branch 'sektioneins/master'
Diffstat (limited to 'src/sp_config_scanner.cached.c')
-rw-r--r--src/sp_config_scanner.cached.c1677
1 files changed, 1677 insertions, 0 deletions
diff --git a/src/sp_config_scanner.cached.c b/src/sp_config_scanner.cached.c
new file mode 100644
index 0000000..7617ebf
--- /dev/null
+++ b/src/sp_config_scanner.cached.c
@@ -0,0 +1,1677 @@
1/* Generated by re2c */
2#include "php_snuffleupagus.h"
3
4enum YYCONDTYPE {
5 yycinit,
6 yyccond,
7 yyccond_op,
8 yycrule,
9};
10
11
12#define cs_log_error(fmt, ...) sp_log_err("config", fmt, ##__VA_ARGS__)
13#define cs_log_info(fmt, ...) sp_log_msg("config", SP_LOG_INFO, fmt, ##__VA_ARGS__)
14#define cs_log_warning(fmt, ...) sp_log_warn("config", fmt, ##__VA_ARGS__)
15
16
17zend_string *sp_get_arg_string(sp_parsed_keyword *kw) {
18 if (!kw || !kw->arg) {
19 return NULL;
20 }
21 zend_string *ret = zend_string_init(kw->arg, kw->arglen, 1);
22 char *pin, *pout;
23 pin = pout = ZSTR_VAL(ret);
24 char *pend = pin + ZSTR_LEN(ret);
25
26 while (pin < pend) {
27 if (*pin == '\\') {
28 pin++;
29 }
30 *pout = *pin;
31 pin++; pout++;
32 }
33
34 if (pin != pout) {
35 size_t len = pout - ZSTR_VAL(ret);
36 ret = zend_string_truncate(ret, len, 1);
37 ZSTR_VAL(ret)[len] = 0;
38 }
39
40 return ret;
41}
42
43zend_string *sp_get_textual_representation(sp_parsed_keyword *parsed_rule) {
44 // a rule is "sp.keyword...keyword(arg);\0"
45 size_t len = 3; // sp + ;
46 sp_parsed_keyword *kw;
47 for (kw = parsed_rule; kw->kw; kw++) {
48 len++; // .
49 len += kw->kwlen;
50 if (kw->argtype == SP_ARGTYPE_EMPTY) {
51 len += 2; // ()
52 } else if (kw->argtype == SP_ARGTYPE_STR) {
53 len += 4;
54 len += kw->arglen;
55 }
56 }
57 zend_string *ret = zend_string_alloc(len, 1);
58 char *ptr = ZSTR_VAL(ret);
59 memcpy(ptr, "sp", 2); ptr += 2;
60 for (kw = parsed_rule; kw->kw; kw++) {
61 *ptr++ = '.';
62 memcpy(ptr, kw->kw, kw->kwlen); ptr += kw->kwlen;
63 if (kw->argtype == SP_ARGTYPE_EMPTY || kw->argtype == SP_ARGTYPE_STR || kw->argtype == SP_ARGTYPE_UNKNOWN) {
64 *ptr++ = '(';
65 }
66 if (kw->argtype == SP_ARGTYPE_STR && kw->arg) {
67 *ptr++ = '"';
68 memcpy(ptr, kw->arg, kw->arglen); ptr += kw->arglen;
69 *ptr++ = '"';
70 }
71 if (kw->argtype == SP_ARGTYPE_EMPTY || kw->argtype == SP_ARGTYPE_STR || kw->argtype == SP_ARGTYPE_UNKNOWN) {
72 *ptr++ = ')';
73 }
74 }
75 *ptr++ = ';';
76 *ptr = 0;
77 return ret;
78}
79
80static void str_dtor(zval *zv) {
81 zend_string_release_ex(Z_STR_P(zv), 1);
82}
83
84// sy_ functions and macros are helpers for the shunting yard algorithm
85#define sy_res_push(val) \
86 if (cond_res_i >= 100) { cs_log_error("condition too complex on line %d", lineno); goto out; } \
87 cond_res[cond_res_i++] = val;
88#define sy_res_pop() cond_res[--cond_res_i]
89#define sy_op_push(op) \
90 if (cond_op_i >= 100) { cs_log_error("condition too complex on line %d", lineno); goto out; } \
91 cond_op[cond_op_i++] = op;
92#define sy_op_pop() cond_op[--cond_op_i]
93#define sy_op_peek() cond_op[cond_op_i-1]
94
95static inline int sy_op_precedence(char op) {
96 switch (op) {
97 case '!': return 120;
98 case '<':
99 case '>':
100 case 'L': // <=
101 case 'G': // >=
102 return 90;
103 case '&': return 70;
104 case '|': return 60;
105 case '=': return 20;
106 }
107 return 0;
108}
109static inline int sy_op_is_left_assoc(char op) {
110 switch (op) {
111 case '!': return 0;
112 }
113 return 1;
114}
115static int sy_apply_op(char op, int a, int b) {
116 switch (op) {
117 case '!': return !a;
118 case '&': return (b && a);
119 case '|': return (b || a);
120 case '<': return (b < a);
121 case 'L': return (b <= a);
122 case 'G': return (b >= a);
123 case '>': return (b > a);
124 case '=': return (b == a);
125 }
126 return 0;
127}
128
129#define SY_APPLY_OP_FROM_STACK() \
130 char op = sy_op_pop(); \
131 int unary = (op == '!'); \
132 if (cond_res_i < (2 - unary)) { cs_log_error("not enough input on line %d", lineno); goto out; } \
133 int a = sy_res_pop(); \
134 int b = unary ? 0 : sy_res_pop(); \
135 int res = sy_apply_op(op, a, b); \
136 sy_res_push(res);
137
138#define TMPSTR(tmpstr, t2, t1) \
139 char tmpstr[1024]; \
140 size_t tmplen = MIN(t2-t1-2, 1023); \
141 strncpy(tmpstr, t1+1, tmplen); \
142 tmpstr[tmplen] = 0;
143
144
145zend_result sp_config_scan(char *data, zend_result (*process_rule)(sp_parsed_keyword*))
146{
147 const char *YYCURSOR = data;
148 const char *YYMARKER, *t1, *t2, *t3, *t4;
149 const char *yyt1;
150const char *yyt2;
151const char *yyt3;
152const char *yyt4;
153
154
155 int ret = FAILURE;
156
157 const int max_keywords = 16;
158 sp_parsed_keyword parsed_rule[max_keywords+1];
159 int kw_i = 0;
160
161 HashTable vars;
162 zend_hash_init(&vars, 10, NULL, str_dtor, 1);
163 zend_hash_str_add_ptr(&vars, ZEND_STRL("PHP_VERSION_ID"), zend_string_init(ZEND_STRL(ZEND_TOSTR(PHP_VERSION_ID)), 1));
164
165
166 int cond_res[100] = {1};
167 int cond_res_i = 0;
168 char cond_op[100] = {0};
169 int cond_op_i = 0;
170
171 int cond = yycinit;
172 long lineno = 1;
173
174
175{
176 unsigned char yych;
177 unsigned int yyaccept = 0;
178 if (cond < 2) {
179 if (cond < 1) {
180 goto yyc_init;
181 } else {
182 goto yyc_cond;
183 }
184 } else {
185 if (cond < 3) {
186 goto yyc_cond_op;
187 } else {
188 goto yyc_rule;
189 }
190 }
191/* *********************************** */
192yyc_init:
193 {
194 static const unsigned char yybm[] = {
195 80, 80, 80, 80, 80, 80, 80, 80,
196 80, 88, 0, 80, 80, 16, 80, 80,
197 80, 80, 80, 80, 80, 80, 80, 80,
198 80, 80, 80, 80, 80, 80, 80, 80,
199 88, 80, 16, 80, 80, 80, 80, 80,
200 80, 80, 80, 80, 80, 80, 80, 80,
201 112, 112, 112, 112, 112, 112, 112, 112,
202 112, 112, 80, 80, 80, 80, 80, 80,
203 80, 112, 112, 112, 112, 112, 112, 112,
204 112, 112, 112, 112, 112, 112, 112, 112,
205 112, 112, 112, 112, 112, 112, 112, 112,
206 112, 112, 112, 80, 144, 80, 80, 112,
207 80, 112, 112, 112, 112, 112, 112, 112,
208 112, 112, 112, 112, 112, 112, 112, 112,
209 112, 112, 112, 112, 112, 112, 112, 112,
210 112, 112, 112, 80, 80, 80, 80, 80,
211 80, 80, 80, 80, 80, 80, 80, 80,
212 80, 80, 80, 80, 80, 80, 80, 80,
213 80, 80, 80, 80, 80, 80, 80, 80,
214 80, 80, 80, 80, 80, 80, 80, 80,
215 80, 80, 80, 80, 80, 80, 80, 80,
216 80, 80, 80, 80, 80, 80, 80, 80,
217 80, 80, 80, 80, 80, 80, 80, 80,
218 80, 80, 80, 80, 80, 80, 80, 80,
219 80, 80, 80, 80, 80, 80, 80, 80,
220 80, 80, 80, 80, 80, 80, 80, 80,
221 80, 80, 80, 80, 80, 80, 80, 80,
222 80, 80, 80, 80, 80, 80, 80, 80,
223 80, 80, 80, 80, 80, 80, 80, 80,
224 80, 80, 80, 80, 80, 80, 80, 80,
225 80, 80, 80, 80, 80, 80, 80, 80,
226 80, 80, 80, 80, 80, 80, 80, 80,
227 };
228 yych = *YYCURSOR;
229 if (yybm[0+yych] & 8) {
230 goto yy6;
231 }
232 if (yych <= '#') {
233 if (yych <= '\n') {
234 if (yych <= 0x00) goto yy2;
235 if (yych <= 0x08) goto yy4;
236 goto yy9;
237 } else {
238 if (yych == '\r') goto yy11;
239 if (yych <= '"') goto yy4;
240 goto yy12;
241 }
242 } else {
243 if (yych <= '?') {
244 if (yych == ';') goto yy12;
245 goto yy4;
246 } else {
247 if (yych <= '@') goto yy15;
248 if (yych == 's') goto yy16;
249 goto yy4;
250 }
251 }
252yy2:
253 ++YYCURSOR;
254 { ret = SUCCESS; goto out; }
255yy4:
256 ++YYCURSOR;
257yy5:
258 { cs_log_error("Parser error on line %d", lineno); goto out; }
259yy6:
260 yych = *++YYCURSOR;
261 if (yybm[0+yych] & 8) {
262 goto yy6;
263 }
264 { goto yyc_init; }
265yy9:
266 ++YYCURSOR;
267 { lineno++; goto yyc_init; }
268yy11:
269 yych = *++YYCURSOR;
270 if (yych == '\n') goto yy9;
271 goto yy5;
272yy12:
273 yych = *++YYCURSOR;
274 if (yybm[0+yych] & 16) {
275 goto yy12;
276 }
277 { goto yyc_init; }
278yy15:
279 yyaccept = 0;
280 yych = *(YYMARKER = ++YYCURSOR);
281 switch (yych) {
282 case 'c': goto yy17;
283 case 'e': goto yy19;
284 case 'i': goto yy20;
285 case 'l': goto yy21;
286 case 's': goto yy22;
287 case 'w': goto yy23;
288 default: goto yy5;
289 }
290yy16:
291 yyaccept = 0;
292 yych = *(YYMARKER = ++YYCURSOR);
293 if (yych == 'e') goto yy24;
294 if (yych == 'p') goto yy25;
295 goto yy5;
296yy17:
297 yych = *++YYCURSOR;
298 if (yych == 'o') goto yy27;
299yy18:
300 YYCURSOR = YYMARKER;
301 if (yyaccept <= 4) {
302 if (yyaccept <= 2) {
303 if (yyaccept <= 1) {
304 if (yyaccept == 0) {
305 goto yy5;
306 } else {
307 yyt2 = YYCURSOR;
308 goto yy67;
309 }
310 } else {
311 yyt2 = YYCURSOR;
312 goto yy71;
313 }
314 } else {
315 if (yyaccept == 3) {
316 goto yy67;
317 } else {
318 goto yy71;
319 }
320 }
321 } else {
322 if (yyaccept <= 6) {
323 if (yyaccept == 5) {
324 yyt2 = YYCURSOR;
325 goto yy86;
326 } else {
327 yyt4 = YYCURSOR;
328 goto yy91;
329 }
330 } else {
331 if (yyaccept == 7) {
332 goto yy86;
333 } else {
334 goto yy91;
335 }
336 }
337 }
338yy19:
339 yych = *++YYCURSOR;
340 if (yych == 'n') goto yy28;
341 if (yych == 'r') goto yy29;
342 goto yy18;
343yy20:
344 yych = *++YYCURSOR;
345 if (yych == 'n') goto yy30;
346 goto yy18;
347yy21:
348 yych = *++YYCURSOR;
349 if (yych == 'o') goto yy31;
350 goto yy18;
351yy22:
352 yych = *++YYCURSOR;
353 if (yych == 'e') goto yy24;
354 goto yy18;
355yy23:
356 yych = *++YYCURSOR;
357 if (yych == 'a') goto yy32;
358 goto yy18;
359yy24:
360 yych = *++YYCURSOR;
361 if (yych == 't') goto yy33;
362 goto yy18;
363yy25:
364 ++YYCURSOR;
365 { kw_i = 0; goto yyc_rule; }
366yy27:
367 yych = *++YYCURSOR;
368 if (yych == 'n') goto yy34;
369 goto yy18;
370yy28:
371 yych = *++YYCURSOR;
372 if (yych == 'd') goto yy35;
373 goto yy18;
374yy29:
375 yych = *++YYCURSOR;
376 if (yych == 'r') goto yy36;
377 goto yy18;
378yy30:
379 yych = *++YYCURSOR;
380 if (yych == 'f') goto yy37;
381 goto yy18;
382yy31:
383 yych = *++YYCURSOR;
384 if (yych == 'g') goto yy38;
385 goto yy18;
386yy32:
387 yych = *++YYCURSOR;
388 if (yych == 'r') goto yy39;
389 goto yy18;
390yy33:
391 yych = *++YYCURSOR;
392 if (yych == '\t') goto yy40;
393 if (yych == ' ') goto yy40;
394 goto yy18;
395yy34:
396 yych = *++YYCURSOR;
397 if (yych == 'd') goto yy42;
398 goto yy18;
399yy35:
400 yych = *++YYCURSOR;
401 if (yych == '_') goto yy43;
402 goto yy18;
403yy36:
404 yych = *++YYCURSOR;
405 if (yych == '"') goto yy18;
406 if (yych == 'o') goto yy46;
407 goto yy45;
408yy37:
409 yych = *++YYCURSOR;
410 if (yych != 'o') goto yy18;
411yy38:
412 yych = *++YYCURSOR;
413 if (yych == '"') goto yy18;
414 goto yy48;
415yy39:
416 yych = *++YYCURSOR;
417 if (yych == 'n') goto yy49;
418 goto yy18;
419yy40:
420 yych = *++YYCURSOR;
421 if (yych <= '@') {
422 if (yych <= '\t') {
423 if (yych <= 0x08) goto yy18;
424 goto yy40;
425 } else {
426 if (yych == ' ') goto yy40;
427 goto yy18;
428 }
429 } else {
430 if (yych <= '_') {
431 if (yych <= 'Z') {
432 yyt1 = YYCURSOR;
433 goto yy50;
434 }
435 if (yych <= '^') goto yy18;
436 yyt1 = YYCURSOR;
437 goto yy50;
438 } else {
439 if (yych <= '`') goto yy18;
440 if (yych <= 'z') {
441 yyt1 = YYCURSOR;
442 goto yy50;
443 }
444 goto yy18;
445 }
446 }
447yy42:
448 yych = *++YYCURSOR;
449 if (yych == 'i') goto yy52;
450 goto yy18;
451yy43:
452 yych = *++YYCURSOR;
453 if (yych == 'c') goto yy53;
454 goto yy18;
455yy44:
456 yych = *++YYCURSOR;
457yy45:
458 if (yych <= 0x1F) {
459 if (yych == '\t') goto yy44;
460 goto yy18;
461 } else {
462 if (yych <= ' ') goto yy44;
463 if (yych == '"') {
464 yyt1 = YYCURSOR;
465 goto yy54;
466 }
467 goto yy18;
468 }
469yy46:
470 yych = *++YYCURSOR;
471 if (yych == 'r') goto yy56;
472 goto yy18;
473yy47:
474 yych = *++YYCURSOR;
475yy48:
476 if (yych <= 0x1F) {
477 if (yych == '\t') goto yy47;
478 goto yy18;
479 } else {
480 if (yych <= ' ') goto yy47;
481 if (yych == '"') {
482 yyt1 = YYCURSOR;
483 goto yy57;
484 }
485 goto yy18;
486 }
487yy49:
488 yych = *++YYCURSOR;
489 if (yych == '"') goto yy18;
490 if (yych == 'i') goto yy61;
491 goto yy60;
492yy50:
493 yych = *++YYCURSOR;
494 if (yybm[0+yych] & 32) {
495 goto yy50;
496 }
497 if (yych == '\t') {
498 yyt2 = YYCURSOR;
499 goto yy62;
500 }
501 if (yych == ' ') {
502 yyt2 = YYCURSOR;
503 goto yy62;
504 }
505 goto yy18;
506yy52:
507 yych = *++YYCURSOR;
508 if (yych == 't') goto yy64;
509 goto yy18;
510yy53:
511 yych = *++YYCURSOR;
512 if (yych == 'o') goto yy65;
513 goto yy18;
514yy54:
515 yych = *++YYCURSOR;
516 if (yybm[0+yych] & 64) {
517 goto yy54;
518 }
519 if (yych <= '\r') goto yy18;
520 if (yych <= '"') goto yy66;
521 goto yy68;
522yy56:
523 yych = *++YYCURSOR;
524 if (yych == '"') goto yy18;
525 goto yy45;
526yy57:
527 yych = *++YYCURSOR;
528 if (yych <= '\r') {
529 if (yych == '\n') goto yy18;
530 if (yych <= '\f') goto yy57;
531 goto yy18;
532 } else {
533 if (yych <= '"') {
534 if (yych <= '!') goto yy57;
535 goto yy70;
536 } else {
537 if (yych == '\\') goto yy72;
538 goto yy57;
539 }
540 }
541yy59:
542 yych = *++YYCURSOR;
543yy60:
544 if (yych <= 0x1F) {
545 if (yych == '\t') goto yy59;
546 goto yy18;
547 } else {
548 if (yych <= ' ') goto yy59;
549 if (yych == '"') {
550 yyt1 = YYCURSOR;
551 goto yy74;
552 }
553 goto yy18;
554 }
555yy61:
556 yych = *++YYCURSOR;
557 if (yych == 'n') goto yy76;
558 goto yy18;
559yy62:
560 yych = *++YYCURSOR;
561 if (yych <= 0x1F) {
562 if (yych == '\t') goto yy62;
563 goto yy18;
564 } else {
565 if (yych <= ' ') goto yy62;
566 if (yych == '"') {
567 yyt3 = YYCURSOR;
568 goto yy77;
569 }
570 goto yy18;
571 }
572yy64:
573 yych = *++YYCURSOR;
574 if (yych == 'i') goto yy79;
575 goto yy18;
576yy65:
577 yych = *++YYCURSOR;
578 if (yych == 'n') goto yy80;
579 goto yy18;
580yy66:
581 yych = *++YYCURSOR;
582 yyt2 = YYCURSOR;
583 if (yych == ';') goto yy81;
584yy67:
585 t1 = yyt1;
586 t2 = yyt2;
587 {
588 if (!cond_res[0]) { goto yyc_init; }
589 TMPSTR(tmpstr, t2, t1);
590 cs_log_error("[line %d]: %s", lineno, tmpstr);
591 goto out;
592 }
593yy68:
594 yych = *++YYCURSOR;
595 if (yybm[0+yych] & 64) {
596 goto yy54;
597 }
598 if (yych <= '\r') goto yy18;
599 if (yych <= '"') goto yy82;
600 goto yy68;
601yy70:
602 yych = *++YYCURSOR;
603 yyt2 = YYCURSOR;
604 if (yych == ';') goto yy83;
605yy71:
606 t1 = yyt1;
607 t2 = yyt2;
608 {
609 if (!cond_res[0]) { goto yyc_init; }
610 TMPSTR(tmpstr, t2, t1);
611 cs_log_info("[line %d]: %s", lineno, tmpstr);
612 goto yyc_init;
613 }
614yy72:
615 yych = *++YYCURSOR;
616 if (yych <= '\r') {
617 if (yych == '\n') goto yy18;
618 if (yych <= '\f') goto yy57;
619 goto yy18;
620 } else {
621 if (yych <= '"') {
622 if (yych <= '!') goto yy57;
623 goto yy84;
624 } else {
625 if (yych == '\\') goto yy72;
626 goto yy57;
627 }
628 }
629yy74:
630 yych = *++YYCURSOR;
631 if (yych <= '\r') {
632 if (yych == '\n') goto yy18;
633 if (yych <= '\f') goto yy74;
634 goto yy18;
635 } else {
636 if (yych <= '"') {
637 if (yych <= '!') goto yy74;
638 goto yy85;
639 } else {
640 if (yych == '\\') goto yy87;
641 goto yy74;
642 }
643 }
644yy76:
645 yych = *++YYCURSOR;
646 if (yych == 'g') goto yy89;
647 goto yy18;
648yy77:
649 yych = *++YYCURSOR;
650 if (yych <= '\r') {
651 if (yych == '\n') goto yy18;
652 if (yych <= '\f') goto yy77;
653 goto yy18;
654 } else {
655 if (yych <= '"') {
656 if (yych <= '!') goto yy77;
657 goto yy90;
658 } else {
659 if (yych == '\\') goto yy92;
660 goto yy77;
661 }
662 }
663yy79:
664 yych = *++YYCURSOR;
665 if (yych == 'o') goto yy94;
666 goto yy18;
667yy80:
668 yych = *++YYCURSOR;
669 if (yych == 'd') goto yy95;
670 goto yy18;
671yy81:
672 ++YYCURSOR;
673 goto yy67;
674yy82:
675 yyaccept = 1;
676 yych = *(YYMARKER = ++YYCURSOR);
677 if (yybm[0+yych] & 128) {
678 goto yy68;
679 }
680 if (yych <= '\r') {
681 if (yych == '\n') {
682 yyt2 = YYCURSOR;
683 goto yy67;
684 }
685 if (yych <= '\f') goto yy54;
686 yyt2 = YYCURSOR;
687 goto yy67;
688 } else {
689 if (yych <= '"') {
690 if (yych <= '!') goto yy54;
691 goto yy66;
692 } else {
693 if (yych == ';') {
694 yyt2 = YYCURSOR;
695 goto yy96;
696 }
697 goto yy54;
698 }
699 }
700yy83:
701 ++YYCURSOR;
702 goto yy71;
703yy84:
704 yyaccept = 2;
705 yych = *(YYMARKER = ++YYCURSOR);
706 if (yych <= '!') {
707 if (yych <= '\n') {
708 if (yych <= '\t') goto yy57;
709 yyt2 = YYCURSOR;
710 goto yy71;
711 } else {
712 if (yych == '\r') {
713 yyt2 = YYCURSOR;
714 goto yy71;
715 }
716 goto yy57;
717 }
718 } else {
719 if (yych <= ';') {
720 if (yych <= '"') goto yy70;
721 if (yych <= ':') goto yy57;
722 yyt2 = YYCURSOR;
723 goto yy97;
724 } else {
725 if (yych == '\\') goto yy72;
726 goto yy57;
727 }
728 }
729yy85:
730 yych = *++YYCURSOR;
731 yyt2 = YYCURSOR;
732 if (yych == ';') goto yy98;
733yy86:
734 t1 = yyt1;
735 t2 = yyt2;
736 {
737 if (!cond_res[0]) { goto yyc_init; }
738 TMPSTR(tmpstr, t2, t1);
739 cs_log_warning("[line %d]: %s", lineno, tmpstr);
740 goto yyc_init;
741 }
742yy87:
743 yych = *++YYCURSOR;
744 if (yych <= '\r') {
745 if (yych == '\n') goto yy18;
746 if (yych <= '\f') goto yy74;
747 goto yy18;
748 } else {
749 if (yych <= '"') {
750 if (yych <= '!') goto yy74;
751 goto yy99;
752 } else {
753 if (yych == '\\') goto yy87;
754 goto yy74;
755 }
756 }
757yy89:
758 yych = *++YYCURSOR;
759 if (yych == '"') goto yy18;
760 goto yy60;
761yy90:
762 yych = *++YYCURSOR;
763 yyt4 = YYCURSOR;
764 goto yy101;
765yy91:
766 t1 = yyt1;
767 t2 = yyt2;
768 t3 = yyt3;
769 t4 = yyt4;
770 {
771 if (!cond_res[0]) { goto yyc_init; }
772 char *key = (char*)t1;
773 int keylen = t2-t1;
774 zend_string *tmp = zend_hash_str_find_ptr(&vars, key, keylen);
775 if (tmp) {
776 zend_hash_str_del(&vars, key, keylen);
777 }
778 tmp = zend_string_init(t3+1, t4-t3-2, 1);
779 zend_hash_str_add_ptr(&vars, key, keylen, tmp);
780 goto yyc_init;
781 }
782yy92:
783 yych = *++YYCURSOR;
784 if (yych <= '\r') {
785 if (yych == '\n') goto yy18;
786 if (yych <= '\f') goto yy77;
787 goto yy18;
788 } else {
789 if (yych <= '"') {
790 if (yych <= '!') goto yy77;
791 goto yy103;
792 } else {
793 if (yych == '\\') goto yy92;
794 goto yy77;
795 }
796 }
797yy94:
798 yych = *++YYCURSOR;
799 if (yych == 'n') goto yy104;
800 goto yy18;
801yy95:
802 yych = *++YYCURSOR;
803 if (yych == 'i') goto yy105;
804 goto yy18;
805yy96:
806 yyaccept = 3;
807 yych = *(YYMARKER = ++YYCURSOR);
808 if (yybm[0+yych] & 64) {
809 goto yy54;
810 }
811 if (yych <= '\r') goto yy67;
812 if (yych <= '"') goto yy66;
813 goto yy68;
814yy97:
815 yyaccept = 4;
816 yych = *(YYMARKER = ++YYCURSOR);
817 if (yych <= '\r') {
818 if (yych == '\n') goto yy71;
819 if (yych <= '\f') goto yy57;
820 goto yy71;
821 } else {
822 if (yych <= '"') {
823 if (yych <= '!') goto yy57;
824 goto yy70;
825 } else {
826 if (yych == '\\') goto yy72;
827 goto yy57;
828 }
829 }
830yy98:
831 ++YYCURSOR;
832 goto yy86;
833yy99:
834 yyaccept = 5;
835 yych = *(YYMARKER = ++YYCURSOR);
836 if (yych <= '!') {
837 if (yych <= '\n') {
838 if (yych <= '\t') goto yy74;
839 yyt2 = YYCURSOR;
840 goto yy86;
841 } else {
842 if (yych == '\r') {
843 yyt2 = YYCURSOR;
844 goto yy86;
845 }
846 goto yy74;
847 }
848 } else {
849 if (yych <= ';') {
850 if (yych <= '"') goto yy85;
851 if (yych <= ':') goto yy74;
852 yyt2 = YYCURSOR;
853 goto yy106;
854 } else {
855 if (yych == '\\') goto yy87;
856 goto yy74;
857 }
858 }
859yy100:
860 yych = *++YYCURSOR;
861yy101:
862 if (yych <= 0x1F) {
863 if (yych == '\t') goto yy100;
864 goto yy91;
865 } else {
866 if (yych <= ' ') goto yy100;
867 if (yych != ';') goto yy91;
868 }
869 ++YYCURSOR;
870 goto yy91;
871yy103:
872 yyaccept = 6;
873 yych = *(YYMARKER = ++YYCURSOR);
874 if (yych <= ' ') {
875 if (yych <= '\n') {
876 if (yych <= 0x08) goto yy77;
877 if (yych <= '\t') {
878 yyt4 = YYCURSOR;
879 goto yy107;
880 }
881 yyt4 = YYCURSOR;
882 goto yy91;
883 } else {
884 if (yych == '\r') {
885 yyt4 = YYCURSOR;
886 goto yy91;
887 }
888 if (yych <= 0x1F) goto yy77;
889 yyt4 = YYCURSOR;
890 goto yy107;
891 }
892 } else {
893 if (yych <= ':') {
894 if (yych == '"') goto yy90;
895 goto yy77;
896 } else {
897 if (yych <= ';') {
898 yyt4 = YYCURSOR;
899 goto yy109;
900 }
901 if (yych == '\\') goto yy92;
902 goto yy77;
903 }
904 }
905yy104:
906 yych = *++YYCURSOR;
907 if (yych == '\t') goto yy110;
908 if (yych == ' ') goto yy110;
909 goto yy18;
910yy105:
911 yych = *++YYCURSOR;
912 if (yych == 't') goto yy113;
913 goto yy18;
914yy106:
915 yyaccept = 7;
916 yych = *(YYMARKER = ++YYCURSOR);
917 if (yych <= '\r') {
918 if (yych == '\n') goto yy86;
919 if (yych <= '\f') goto yy74;
920 goto yy86;
921 } else {
922 if (yych <= '"') {
923 if (yych <= '!') goto yy74;
924 goto yy85;
925 } else {
926 if (yych == '\\') goto yy87;
927 goto yy74;
928 }
929 }
930yy107:
931 yyaccept = 8;
932 yych = *(YYMARKER = ++YYCURSOR);
933 if (yych <= ' ') {
934 if (yych <= '\n') {
935 if (yych <= 0x08) goto yy77;
936 if (yych <= '\t') goto yy107;
937 goto yy91;
938 } else {
939 if (yych == '\r') goto yy91;
940 if (yych <= 0x1F) goto yy77;
941 goto yy107;
942 }
943 } else {
944 if (yych <= ':') {
945 if (yych == '"') goto yy90;
946 goto yy77;
947 } else {
948 if (yych <= ';') goto yy109;
949 if (yych == '\\') goto yy92;
950 goto yy77;
951 }
952 }
953yy109:
954 yyaccept = 8;
955 yych = *(YYMARKER = ++YYCURSOR);
956 if (yych <= '\r') {
957 if (yych == '\n') goto yy91;
958 if (yych <= '\f') goto yy77;
959 goto yy91;
960 } else {
961 if (yych <= '"') {
962 if (yych <= '!') goto yy77;
963 goto yy90;
964 } else {
965 if (yych == '\\') goto yy92;
966 goto yy77;
967 }
968 }
969yy110:
970 yych = *++YYCURSOR;
971 if (yych == '\t') goto yy110;
972 if (yych == ' ') goto yy110;
973 { cond_res_i = 0; goto yyc_cond; }
974yy113:
975 yych = *++YYCURSOR;
976 if (yych != 'i') goto yy18;
977 yych = *++YYCURSOR;
978 if (yych != 'o') goto yy18;
979 yych = *++YYCURSOR;
980 if (yych != 'n') goto yy18;
981yy116:
982 yych = *++YYCURSOR;
983 if (yych <= 0x1F) {
984 if (yych == '\t') goto yy116;
985 goto yy18;
986 } else {
987 if (yych <= ' ') goto yy116;
988 if (yych != ';') goto yy18;
989 }
990 ++YYCURSOR;
991 { cond_res[0] = 1; cond_res_i = 0; goto yyc_init; }
992 }
993/* *********************************** */
994yyc_cond:
995 {
996 static const unsigned char yybm[] = {
997 64, 64, 64, 64, 64, 64, 64, 64,
998 64, 72, 0, 64, 64, 0, 64, 64,
999 64, 64, 64, 64, 64, 64, 64, 64,
1000 64, 64, 64, 64, 64, 64, 64, 64,
1001 72, 64, 0, 64, 64, 64, 64, 64,
1002 64, 64, 64, 64, 64, 64, 64, 64,
1003 112, 112, 112, 112, 112, 112, 112, 112,
1004 112, 112, 64, 64, 64, 64, 64, 64,
1005 64, 96, 96, 96, 96, 96, 96, 96,
1006 96, 96, 96, 96, 96, 96, 96, 96,
1007 96, 96, 96, 96, 96, 96, 96, 96,
1008 96, 96, 96, 64, 128, 64, 64, 96,
1009 64, 96, 96, 96, 96, 96, 96, 96,
1010 96, 96, 96, 96, 96, 96, 96, 96,
1011 96, 96, 96, 96, 96, 96, 96, 96,
1012 96, 96, 96, 64, 64, 64, 64, 64,
1013 64, 64, 64, 64, 64, 64, 64, 64,
1014 64, 64, 64, 64, 64, 64, 64, 64,
1015 64, 64, 64, 64, 64, 64, 64, 64,
1016 64, 64, 64, 64, 64, 64, 64, 64,
1017 64, 64, 64, 64, 64, 64, 64, 64,
1018 64, 64, 64, 64, 64, 64, 64, 64,
1019 64, 64, 64, 64, 64, 64, 64, 64,
1020 64, 64, 64, 64, 64, 64, 64, 64,
1021 64, 64, 64, 64, 64, 64, 64, 64,
1022 64, 64, 64, 64, 64, 64, 64, 64,
1023 64, 64, 64, 64, 64, 64, 64, 64,
1024 64, 64, 64, 64, 64, 64, 64, 64,
1025 64, 64, 64, 64, 64, 64, 64, 64,
1026 64, 64, 64, 64, 64, 64, 64, 64,
1027 64, 64, 64, 64, 64, 64, 64, 64,
1028 64, 64, 64, 64, 64, 64, 64, 64,
1029 };
1030 yych = *YYCURSOR;
1031 if (yybm[0+yych] & 8) {
1032 goto yy124;
1033 }
1034 if (yych <= '(') {
1035 if (yych <= '\r') {
1036 if (yych <= 0x08) goto yy122;
1037 if (yych <= '\n') goto yy127;
1038 if (yych >= '\r') goto yy129;
1039 } else {
1040 if (yych <= 0x1F) goto yy122;
1041 if (yych <= '!') goto yy130;
1042 if (yych >= '(') goto yy132;
1043 }
1044 } else {
1045 if (yych <= 'Z') {
1046 if (yych <= '/') goto yy122;
1047 if (yych <= '9') {
1048 yyt1 = YYCURSOR;
1049 goto yy134;
1050 }
1051 if (yych >= 'A') {
1052 yyt1 = YYCURSOR;
1053 goto yy137;
1054 }
1055 } else {
1056 if (yych <= '_') {
1057 if (yych >= '_') {
1058 yyt1 = YYCURSOR;
1059 goto yy137;
1060 }
1061 } else {
1062 if (yych <= '`') goto yy122;
1063 if (yych <= 'z') {
1064 yyt1 = YYCURSOR;
1065 goto yy137;
1066 }
1067 }
1068 }
1069 }
1070yy122:
1071 ++YYCURSOR;
1072yy123:
1073 { cs_log_error("Syntax error in condition on line %d", lineno); goto out; }
1074yy124:
1075 yych = *++YYCURSOR;
1076 if (yybm[0+yych] & 8) {
1077 goto yy124;
1078 }
1079 { goto yyc_cond; }
1080yy127:
1081 ++YYCURSOR;
1082 { lineno++; goto yyc_cond; }
1083yy129:
1084 yych = *++YYCURSOR;
1085 if (yych == '\n') goto yy127;
1086 goto yy123;
1087yy130:
1088 ++YYCURSOR;
1089 t1 = YYCURSOR - 1;
1090 { sy_op_push(*t1); goto yyc_cond; }
1091yy132:
1092 ++YYCURSOR;
1093 t1 = YYCURSOR - 1;
1094 { sy_op_push(*t1); goto yyc_cond; }
1095yy134:
1096 yych = *++YYCURSOR;
1097 if (yybm[0+yych] & 16) {
1098 goto yy134;
1099 }
1100 t1 = yyt1;
1101 t2 = YYCURSOR;
1102 { sy_res_push(atoi(t1)); goto yyc_cond_op; }
1103yy137:
1104 yyaccept = 0;
1105 yych = *(YYMARKER = ++YYCURSOR);
1106 if (yybm[0+yych] & 32) {
1107 goto yy137;
1108 }
1109 if (yych == '(') goto yy140;
1110yy139:
1111 t1 = yyt1;
1112 t2 = YYCURSOR;
1113 {
1114 zend_string *tmp = zend_hash_str_find_ptr(&vars, t1, t2-t1);
1115 if (!tmp) {
1116 cs_log_error("unknown variable in condition on line %d", lineno);
1117 goto out;
1118 }
1119 sy_res_push(atoi(ZSTR_VAL(tmp)));
1120 goto yyc_cond_op;
1121 }
1122yy140:
1123 yych = *++YYCURSOR;
1124 if (yych == '"') {
1125 yyt2 = YYCURSOR;
1126 goto yy142;
1127 }
1128 if (yych == ')') {
1129 yyt2 = YYCURSOR;
1130 goto yy144;
1131 }
1132yy141:
1133 YYCURSOR = YYMARKER;
1134 if (yyaccept == 0) {
1135 goto yy139;
1136 } else {
1137 goto yy145;
1138 }
1139yy142:
1140 yych = *++YYCURSOR;
1141 if (yybm[0+yych] & 64) {
1142 goto yy142;
1143 }
1144 if (yych <= '\r') goto yy141;
1145 if (yych <= '"') goto yy146;
1146 goto yy147;
1147yy144:
1148 ++YYCURSOR;
1149yy145:
1150 t1 = yyt1;
1151 t3 = yyt2;
1152 t2 = yyt2 - 1;
1153 t4 = YYCURSOR - 1;
1154 {
1155 if (t4-t3 >= 2 && strlen("extension_loaded") == t2-t1 && strncmp("extension_loaded", t1, t2-t1) == 0) {
1156 int is_loaded = (zend_hash_str_find_ptr(&module_registry, t3+1, t4-t3-2) != NULL);
1157 sy_res_push(is_loaded);
1158 } else {
1159 cs_log_error("unknown function in condition on line %d", lineno);
1160 goto out;
1161 }
1162 goto yyc_cond_op;
1163 }
1164yy146:
1165 yych = *++YYCURSOR;
1166 if (yych == ')') goto yy144;
1167 goto yy141;
1168yy147:
1169 yych = *++YYCURSOR;
1170 if (yybm[0+yych] & 64) {
1171 goto yy142;
1172 }
1173 if (yych <= '\r') goto yy141;
1174 if (yych >= '#') goto yy147;
1175 yych = *++YYCURSOR;
1176 if (yybm[0+yych] & 128) {
1177 goto yy147;
1178 }
1179 if (yych <= '\r') {
1180 if (yych == '\n') goto yy141;
1181 if (yych <= '\f') goto yy142;
1182 goto yy141;
1183 } else {
1184 if (yych <= '"') {
1185 if (yych <= '!') goto yy142;
1186 goto yy146;
1187 } else {
1188 if (yych != ')') goto yy142;
1189 }
1190 }
1191 yyaccept = 1;
1192 yych = *(YYMARKER = ++YYCURSOR);
1193 if (yybm[0+yych] & 64) {
1194 goto yy142;
1195 }
1196 if (yych <= '\r') goto yy145;
1197 if (yych <= '"') goto yy146;
1198 goto yy147;
1199 }
1200/* *********************************** */
1201yyc_cond_op:
1202 {
1203 static const unsigned char yybm[] = {
1204 0, 0, 0, 0, 0, 0, 0, 0,
1205 0, 128, 0, 0, 0, 0, 0, 0,
1206 0, 0, 0, 0, 0, 0, 0, 0,
1207 0, 0, 0, 0, 0, 0, 0, 0,
1208 128, 0, 0, 0, 0, 0, 0, 0,
1209 0, 0, 0, 0, 0, 0, 0, 0,
1210 0, 0, 0, 0, 0, 0, 0, 0,
1211 0, 0, 0, 0, 0, 0, 0, 0,
1212 0, 0, 0, 0, 0, 0, 0, 0,
1213 0, 0, 0, 0, 0, 0, 0, 0,
1214 0, 0, 0, 0, 0, 0, 0, 0,
1215 0, 0, 0, 0, 0, 0, 0, 0,
1216 0, 0, 0, 0, 0, 0, 0, 0,
1217 0, 0, 0, 0, 0, 0, 0, 0,
1218 0, 0, 0, 0, 0, 0, 0, 0,
1219 0, 0, 0, 0, 0, 0, 0, 0,
1220 0, 0, 0, 0, 0, 0, 0, 0,
1221 0, 0, 0, 0, 0, 0, 0, 0,
1222 0, 0, 0, 0, 0, 0, 0, 0,
1223 0, 0, 0, 0, 0, 0, 0, 0,
1224 0, 0, 0, 0, 0, 0, 0, 0,
1225 0, 0, 0, 0, 0, 0, 0, 0,
1226 0, 0, 0, 0, 0, 0, 0, 0,
1227 0, 0, 0, 0, 0, 0, 0, 0,
1228 0, 0, 0, 0, 0, 0, 0, 0,
1229 0, 0, 0, 0, 0, 0, 0, 0,
1230 0, 0, 0, 0, 0, 0, 0, 0,
1231 0, 0, 0, 0, 0, 0, 0, 0,
1232 0, 0, 0, 0, 0, 0, 0, 0,
1233 0, 0, 0, 0, 0, 0, 0, 0,
1234 0, 0, 0, 0, 0, 0, 0, 0,
1235 0, 0, 0, 0, 0, 0, 0, 0,
1236 };
1237 yych = *YYCURSOR;
1238 if (yybm[0+yych] & 128) {
1239 goto yy155;
1240 }
1241 if (yych <= ')') {
1242 if (yych <= '\r') {
1243 if (yych <= 0x08) goto yy153;
1244 if (yych <= '\n') goto yy158;
1245 if (yych >= '\r') goto yy160;
1246 } else {
1247 if (yych == '&') {
1248 yyt1 = YYCURSOR;
1249 goto yy161;
1250 }
1251 if (yych >= ')') goto yy162;
1252 }
1253 } else {
1254 if (yych <= '=') {
1255 if (yych <= ':') goto yy153;
1256 if (yych <= ';') goto yy164;
1257 if (yych <= '<') {
1258 yyt1 = YYCURSOR;
1259 goto yy166;
1260 }
1261 yyt1 = YYCURSOR;
1262 goto yy168;
1263 } else {
1264 if (yych <= '>') {
1265 yyt1 = YYCURSOR;
1266 goto yy166;
1267 }
1268 if (yych == '|') {
1269 yyt1 = YYCURSOR;
1270 goto yy169;
1271 }
1272 }
1273 }
1274yy153:
1275 ++YYCURSOR;
1276yy154:
1277 { cs_log_error("Syntax error in condition on line %d", lineno); goto out; }
1278yy155:
1279 yych = *++YYCURSOR;
1280 if (yybm[0+yych] & 128) {
1281 goto yy155;
1282 }
1283 { goto yyc_cond_op; }
1284yy158:
1285 ++YYCURSOR;
1286 { lineno++; goto yyc_cond_op; }
1287yy160:
1288 yych = *++YYCURSOR;
1289 if (yych == '\n') goto yy158;
1290 goto yy154;
1291yy161:
1292 yych = *++YYCURSOR;
1293 if (yych == '&') goto yy170;
1294 goto yy154;
1295yy162:
1296 ++YYCURSOR;
1297 {
1298 while (cond_op_i && sy_op_peek() != '(') {
1299 SY_APPLY_OP_FROM_STACK();
1300 }
1301 if (cond_op_i == 0 || sy_op_peek() != '(') {
1302 cs_log_error("unbalanced parathesis on line %d", lineno); goto out;
1303 }
1304 cond_op_i--;
1305 goto yyc_cond_op;
1306 }
1307yy164:
1308 ++YYCURSOR;
1309 {
1310 while (cond_op_i) {
1311 if (sy_op_peek() == '(') { cs_log_error("unbalanced parathesis on line %d", lineno); goto out; }
1312 SY_APPLY_OP_FROM_STACK();
1313 }
1314 if (cond_res_i > 1) { cs_log_error("invalid condition on line %d", lineno); goto out; }
1315 goto yyc_init;
1316 }
1317yy166:
1318 yych = *++YYCURSOR;
1319 if (yych == '=') goto yy170;
1320yy167:
1321 t1 = yyt1;
1322 t2 = YYCURSOR;
1323 {
1324 char op1 = *t1;
1325 if (t2-t1 == 2) {
1326 switch (op1) {
1327 case '<': op1 = 'L'; break; // <=
1328 case '>': op1 = 'G'; break; // >=
1329 }
1330 }
1331 while (cond_op_i && sy_op_peek() != '(' && ((sy_op_precedence(sy_op_peek()) > sy_op_precedence(*t1)) || (sy_op_precedence(sy_op_peek()) == sy_op_precedence(*t1) && sy_op_is_left_assoc(*t1)))) {
1332 SY_APPLY_OP_FROM_STACK();
1333 }
1334 sy_op_push(*t1);
1335 goto yyc_cond;
1336 }
1337yy168:
1338 yych = *++YYCURSOR;
1339 if (yych == '=') goto yy170;
1340 goto yy154;
1341yy169:
1342 yych = *++YYCURSOR;
1343 if (yych != '|') goto yy154;
1344yy170:
1345 ++YYCURSOR;
1346 goto yy167;
1347 }
1348/* *********************************** */
1349yyc_rule:
1350 {
1351 static const unsigned char yybm[] = {
1352 64, 64, 64, 64, 64, 64, 64, 64,
1353 64, 88, 16, 64, 64, 0, 64, 64,
1354 64, 64, 64, 64, 64, 64, 64, 64,
1355 64, 64, 64, 64, 64, 64, 64, 64,
1356 88, 64, 0, 64, 64, 64, 64, 64,
1357 64, 64, 64, 64, 64, 64, 64, 64,
1358 96, 96, 96, 96, 96, 96, 96, 96,
1359 96, 96, 64, 64, 64, 64, 64, 64,
1360 64, 96, 96, 96, 96, 96, 96, 96,
1361 96, 96, 96, 96, 96, 96, 96, 96,
1362 96, 96, 96, 96, 96, 96, 96, 96,
1363 96, 96, 96, 64, 128, 64, 64, 96,
1364 64, 96, 96, 96, 96, 96, 96, 96,
1365 96, 96, 96, 96, 96, 96, 96, 96,
1366 96, 96, 96, 96, 96, 96, 96, 96,
1367 96, 96, 96, 64, 64, 64, 64, 64,
1368 64, 64, 64, 64, 64, 64, 64, 64,
1369 64, 64, 64, 64, 64, 64, 64, 64,
1370 64, 64, 64, 64, 64, 64, 64, 64,
1371 64, 64, 64, 64, 64, 64, 64, 64,
1372 64, 64, 64, 64, 64, 64, 64, 64,
1373 64, 64, 64, 64, 64, 64, 64, 64,
1374 64, 64, 64, 64, 64, 64, 64, 64,
1375 64, 64, 64, 64, 64, 64, 64, 64,
1376 64, 64, 64, 64, 64, 64, 64, 64,
1377 64, 64, 64, 64, 64, 64, 64, 64,
1378 64, 64, 64, 64, 64, 64, 64, 64,
1379 64, 64, 64, 64, 64, 64, 64, 64,
1380 64, 64, 64, 64, 64, 64, 64, 64,
1381 64, 64, 64, 64, 64, 64, 64, 64,
1382 64, 64, 64, 64, 64, 64, 64, 64,
1383 64, 64, 64, 64, 64, 64, 64, 64,
1384 };
1385 yych = *YYCURSOR;
1386 if (yybm[0+yych] & 8) {
1387 goto yy175;
1388 }
1389 if (yych <= '\r') {
1390 if (yych <= 0x08) goto yy173;
1391 if (yych <= '\n') goto yy178;
1392 if (yych >= '\r') goto yy179;
1393 } else {
1394 if (yych <= '.') {
1395 if (yych >= '.') goto yy180;
1396 } else {
1397 if (yych == ';') goto yy181;
1398 }
1399 }
1400yy173:
1401 ++YYCURSOR;
1402yy174:
1403 { goto end_of_rule; }
1404yy175:
1405 yych = *++YYCURSOR;
1406 if (yybm[0+yych] & 8) {
1407 goto yy175;
1408 }
1409 { goto yyc_rule; }
1410yy178:
1411 yyaccept = 0;
1412 yych = *(YYMARKER = ++YYCURSOR);
1413 if (yych <= '\r') {
1414 if (yych <= 0x08) goto yy174;
1415 if (yych <= '\n') {
1416 yyt1 = YYCURSOR;
1417 goto yy183;
1418 }
1419 if (yych <= '\f') goto yy174;
1420 yyt1 = YYCURSOR;
1421 goto yy186;
1422 } else {
1423 if (yych <= ' ') {
1424 if (yych <= 0x1F) goto yy174;
1425 yyt1 = YYCURSOR;
1426 goto yy183;
1427 } else {
1428 if (yych == '.') {
1429 yyt1 = YYCURSOR;
1430 goto yy187;
1431 }
1432 goto yy174;
1433 }
1434 }
1435yy179:
1436 yyaccept = 0;
1437 yych = *(YYMARKER = ++YYCURSOR);
1438 if (yych == '\n') goto yy189;
1439 goto yy174;
1440yy180:
1441 yych = *++YYCURSOR;
1442 if (yych <= '^') {
1443 if (yych <= '@') goto yy174;
1444 if (yych <= 'Z') {
1445 yyt1 = YYCURSOR;
1446 goto yy190;
1447 }
1448 goto yy174;
1449 } else {
1450 if (yych == '`') goto yy174;
1451 if (yych <= 'z') {
1452 yyt1 = YYCURSOR;
1453 goto yy190;
1454 }
1455 goto yy174;
1456 }
1457yy181:
1458 ++YYCURSOR;
1459 {
1460 end_of_rule:
1461 if (!cond_res[0]) { goto yyc_init; }
1462 parsed_rule[kw_i++] = (sp_parsed_keyword){0, 0, 0, 0, 0, 0};
1463 if (process_rule && process_rule(parsed_rule) != SUCCESS) {
1464 goto out;
1465 }
1466 goto yyc_init;
1467 }
1468yy183:
1469 yych = *++YYCURSOR;
1470 if (yybm[0+yych] & 16) {
1471 goto yy183;
1472 }
1473 if (yych == '\r') goto yy186;
1474 if (yych == '.') goto yy187;
1475yy185:
1476 YYCURSOR = YYMARKER;
1477 if (yyaccept <= 1) {
1478 if (yyaccept == 0) {
1479 goto yy174;
1480 } else {
1481 yyt3 = yyt4 = NULL;
1482 yyt2 = YYCURSOR;
1483 goto yy192;
1484 }
1485 } else {
1486 goto yy192;
1487 }
1488yy186:
1489 yych = *++YYCURSOR;
1490 if (yych == '\n') goto yy183;
1491 goto yy185;
1492yy187:
1493 ++YYCURSOR;
1494 YYCURSOR = yyt1;
1495 { lineno++; goto yyc_rule; }
1496yy189:
1497 yych = *++YYCURSOR;
1498 if (yych <= '\r') {
1499 if (yych <= 0x08) goto yy185;
1500 if (yych <= '\n') {
1501 yyt1 = YYCURSOR;
1502 goto yy183;
1503 }
1504 if (yych <= '\f') goto yy185;
1505 yyt1 = YYCURSOR;
1506 goto yy186;
1507 } else {
1508 if (yych <= ' ') {
1509 if (yych <= 0x1F) goto yy185;
1510 yyt1 = YYCURSOR;
1511 goto yy183;
1512 } else {
1513 if (yych == '.') {
1514 yyt1 = YYCURSOR;
1515 goto yy187;
1516 }
1517 goto yy185;
1518 }
1519 }
1520yy190:
1521 yyaccept = 1;
1522 yych = *(YYMARKER = ++YYCURSOR);
1523 if (yybm[0+yych] & 32) {
1524 goto yy190;
1525 }
1526 if (yych == '(') {
1527 yyt2 = YYCURSOR;
1528 goto yy193;
1529 }
1530 yyt3 = yyt4 = NULL;
1531 yyt2 = YYCURSOR;
1532yy192:
1533 t1 = yyt1;
1534 t2 = yyt2;
1535 t3 = yyt3;
1536 t4 = yyt4;
1537 {
1538 if (!cond_res[0]) { goto yyc_rule; }
1539 if (kw_i == max_keywords) {
1540 cs_log_error("Too many keywords in rule (more than %d) on line %d", max_keywords, lineno);
1541 goto out;
1542 }
1543 sp_parsed_keyword kw = {.kw = (char*)t1, .kwlen = t2-t1, .arg = (char*)t3, .arglen = t4-t3, .argtype = SP_ARGTYPE_UNKNOWN, .lineno = lineno};
1544 if (t3 && t4) {
1545 if (t3 == t4) {
1546 kw.argtype = SP_ARGTYPE_EMPTY;
1547 } else if (t4-t3 >= 2 && *t3 == '"') {
1548 kw.arg = (char*)t3 + 1;
1549 kw.arglen = t4 - t3 - 2;
1550 kw.argtype = SP_ARGTYPE_STR;
1551 } else {
1552 zend_string *tmp = zend_hash_str_find_ptr(&vars, t3, t4-t3);
1553 if (!tmp) {
1554 cs_log_error("unknown variable on line %d", lineno);
1555 goto out;
1556 }
1557 kw.arg = ZSTR_VAL(tmp);
1558 kw.arglen = ZSTR_LEN(tmp);
1559 kw.argtype = SP_ARGTYPE_STR;
1560 }
1561 } else {
1562 kw.argtype = SP_ARGTYPE_NONE;
1563 }
1564 parsed_rule[kw_i++] = kw;
1565 goto yyc_rule;
1566 }
1567yy193:
1568 yych = *++YYCURSOR;
1569 if (yych <= '@') {
1570 if (yych <= '"') {
1571 if (yych <= '!') goto yy185;
1572 yyt3 = YYCURSOR;
1573 } else {
1574 if (yych == ')') {
1575 yyt3 = yyt4 = YYCURSOR;
1576 goto yy196;
1577 }
1578 goto yy185;
1579 }
1580 } else {
1581 if (yych <= '_') {
1582 if (yych <= 'Z') {
1583 yyt3 = YYCURSOR;
1584 goto yy197;
1585 }
1586 if (yych <= '^') goto yy185;
1587 yyt3 = YYCURSOR;
1588 goto yy197;
1589 } else {
1590 if (yych <= '`') goto yy185;
1591 if (yych <= 'z') {
1592 yyt3 = YYCURSOR;
1593 goto yy197;
1594 }
1595 goto yy185;
1596 }
1597 }
1598yy194:
1599 yych = *++YYCURSOR;
1600 if (yybm[0+yych] & 64) {
1601 goto yy194;
1602 }
1603 if (yych <= '\r') goto yy185;
1604 if (yych <= '"') goto yy199;
1605 goto yy200;
1606yy196:
1607 ++YYCURSOR;
1608 goto yy192;
1609yy197:
1610 yych = *++YYCURSOR;
1611 if (yych <= '@') {
1612 if (yych <= ')') {
1613 if (yych <= '(') goto yy185;
1614 yyt4 = YYCURSOR;
1615 goto yy196;
1616 } else {
1617 if (yych <= '/') goto yy185;
1618 if (yych <= '9') goto yy197;
1619 goto yy185;
1620 }
1621 } else {
1622 if (yych <= '_') {
1623 if (yych <= 'Z') goto yy197;
1624 if (yych <= '^') goto yy185;
1625 goto yy197;
1626 } else {
1627 if (yych <= '`') goto yy185;
1628 if (yych <= 'z') goto yy197;
1629 goto yy185;
1630 }
1631 }
1632yy199:
1633 yych = *++YYCURSOR;
1634 if (yych == ')') {
1635 yyt4 = YYCURSOR;
1636 goto yy196;
1637 }
1638 goto yy185;
1639yy200:
1640 yych = *++YYCURSOR;
1641 if (yybm[0+yych] & 64) {
1642 goto yy194;
1643 }
1644 if (yych <= '\r') goto yy185;
1645 if (yych >= '#') goto yy200;
1646 yych = *++YYCURSOR;
1647 if (yybm[0+yych] & 128) {
1648 goto yy200;
1649 }
1650 if (yych <= '\r') {
1651 if (yych == '\n') goto yy185;
1652 if (yych <= '\f') goto yy194;
1653 goto yy185;
1654 } else {
1655 if (yych <= '"') {
1656 if (yych <= '!') goto yy194;
1657 goto yy199;
1658 } else {
1659 if (yych != ')') goto yy194;
1660 yyt4 = YYCURSOR;
1661 }
1662 }
1663 yyaccept = 2;
1664 yych = *(YYMARKER = ++YYCURSOR);
1665 if (yybm[0+yych] & 64) {
1666 goto yy194;
1667 }
1668 if (yych <= '\r') goto yy192;
1669 if (yych <= '"') goto yy199;
1670 goto yy200;
1671 }
1672}
1673
1674out:
1675 zend_hash_destroy(&vars);
1676 return ret;
1677} \ No newline at end of file