summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBen Fuhrmannek2021-08-17 13:06:39 +0200
committerBen Fuhrmannek2021-08-17 13:06:39 +0200
commit60fad2a6b3b61a63e2e829d60b7b0bda51099b19 (patch)
tree3b8d5ab5bc33dd6a26d78b174f10e6ac66de753a /src
parentdef7f6275073f2c0010324818903dead726c1e67 (diff)
added pregenerated scanner to relax re2c dependency
Diffstat (limited to 'src')
-rw-r--r--src/Makefile.frag7
-rw-r--r--src/config.m42
-rw-r--r--src/sp_config_scanner.cached.c670
3 files changed, 677 insertions, 2 deletions
diff --git a/src/Makefile.frag b/src/Makefile.frag
index c8458ea..1236599 100644
--- a/src/Makefile.frag
+++ b/src/Makefile.frag
@@ -1,2 +1,7 @@
1$(srcdir)/sp_config_scanner.c: $(srcdir)/sp_config_scanner.re 1$(srcdir)/sp_config_scanner.c: $(srcdir)/sp_config_scanner.re
2 @$(RE2C) $(RE2C_FLAGS) --no-generation-date -bc -o $@ $< 2 if re2c -v |grep ' 2\.' 2>/dev/null; then \
3 re2c -bc -o $@ $<; \
4 re2c --no-generation-date --no-version -bci -o $(srcdir)/sp_config_scanner.cached.c $<; \
5 else \
6 cp $(srcdir)/sp_config_scanner.cached.c $@; \
7 fi;
diff --git a/src/config.m4 b/src/config.m4
index f825cea..a2301fd 100644
--- a/src/config.m4
+++ b/src/config.m4
@@ -41,5 +41,5 @@ if test "$PHP_SNUFFLEUPAGUS" = "yes"; then
41 PHP_NEW_EXTENSION(snuffleupagus, $sources, $ext_shared,-DZEND_ENABLE_STATIC_TSRMLS_CACHE=1) 41 PHP_NEW_EXTENSION(snuffleupagus, $sources, $ext_shared,-DZEND_ENABLE_STATIC_TSRMLS_CACHE=1)
42fi 42fi
43 43
44PHP_PROG_RE2C([2.0]) 44# PHP_PROG_RE2C([2.0])
45PHP_ADD_MAKEFILE_FRAGMENT() 45PHP_ADD_MAKEFILE_FRAGMENT()
diff --git a/src/sp_config_scanner.cached.c b/src/sp_config_scanner.cached.c
new file mode 100644
index 0000000..8e05986
--- /dev/null
+++ b/src/sp_config_scanner.cached.c
@@ -0,0 +1,670 @@
1/* Generated by re2c */
2#include "php_snuffleupagus.h"
3
4enum YYCONDTYPE {
5 yycinit,
6 yycrule,
7};
8
9
10#define cs_error_log(fmt, ...) sp_log_err("config", fmt, ##__VA_ARGS__)
11
12zend_string *sp_get_arg_string(sp_parsed_keyword *kw) {
13 if (!kw || !kw->arg) {
14 return NULL;
15 }
16 zend_string *ret = zend_string_init(kw->arg, kw->arglen, 1);
17 char *pin, *pout;
18 pin = pout = ZSTR_VAL(ret);
19 char *pend = pin + ZSTR_LEN(ret);
20
21 while (pin < pend) {
22 if (*pin == '\\') {
23 pin++;
24 }
25 *pout = *pin;
26 pin++; pout++;
27 }
28
29 if (pin != pout) {
30 size_t len = pout - ZSTR_VAL(ret);
31 ret = zend_string_truncate(ret, len, 1);
32 ZSTR_VAL(ret)[len] = 0;
33 }
34
35 return ret;
36}
37
38zend_string *sp_get_textual_representation(sp_parsed_keyword *parsed_rule) {
39 // a rule is "sp.keyword...keyword(arg);\0"
40 size_t len = 3; // sp + ;
41 sp_parsed_keyword *kw;
42 for (kw = parsed_rule; kw->kw; kw++) {
43 len++; // .
44 len += kw->kwlen;
45 if (kw->argtype == SP_ARGTYPE_EMPTY) {
46 len += 2; // ()
47 } else if (kw->argtype == SP_ARGTYPE_STR) {
48 len += 4;
49 len += kw->arglen;
50 }
51 }
52 zend_string *ret = zend_string_alloc(len, 1);
53 char *ptr = ZSTR_VAL(ret);
54 memcpy(ptr, "sp", 2); ptr += 2;
55 for (kw = parsed_rule; kw->kw; kw++) {
56 *ptr++ = '.';
57 memcpy(ptr, kw->kw, kw->kwlen); ptr += kw->kwlen;
58 if (kw->argtype == SP_ARGTYPE_EMPTY || kw->argtype == SP_ARGTYPE_STR || kw->argtype == SP_ARGTYPE_UNKNOWN) {
59 *ptr++ = '(';
60 }
61 if (kw->argtype == SP_ARGTYPE_STR && kw->arg) {
62 *ptr++ = '"';
63 memcpy(ptr, kw->arg, kw->arglen); ptr += kw->arglen;
64 *ptr++ = '"';
65 }
66 if (kw->argtype == SP_ARGTYPE_EMPTY || kw->argtype == SP_ARGTYPE_STR || kw->argtype == SP_ARGTYPE_UNKNOWN) {
67 *ptr++ = ')';
68 }
69 }
70 *ptr++ = ';';
71 *ptr = 0;
72 return ret;
73}
74
75static void str_dtor(zval *zv) {
76 zend_string_release_ex(Z_STR_P(zv), 1);
77}
78
79zend_result sp_config_scan(char *data, zend_result (*process_rule)(sp_parsed_keyword*))
80{
81 const char *YYCURSOR = data;
82 const char *YYMARKER, *t1, *t2, *t3, *t4;
83 const char *yyt1;
84const char *yyt2;
85const char *yyt3;
86const char *yyt4;
87
88
89 int ret = FAILURE;
90
91 const int max_keywords = 16;
92 sp_parsed_keyword parsed_rule[max_keywords+1];
93 int kw_i = 0;
94
95 HashTable vars;
96 zend_hash_init(&vars, 10, NULL, str_dtor, 1);
97
98 int cond = yycinit;
99 long lineno = 1;
100
101
102{
103 char yych;
104 unsigned int yyaccept = 0;
105 if (cond < 1) {
106 goto yyc_init;
107 } else {
108 goto yyc_rule;
109 }
110/* *********************************** */
111yyc_init:
112 {
113 static const unsigned char yybm[] = {
114 72, 72, 72, 72, 72, 72, 72, 72,
115 72, 92, 16, 72, 72, 24, 72, 72,
116 72, 72, 72, 72, 72, 72, 72, 72,
117 72, 72, 72, 72, 72, 72, 72, 72,
118 92, 72, 8, 72, 72, 72, 72, 72,
119 72, 72, 72, 72, 72, 72, 72, 72,
120 104, 104, 104, 104, 104, 104, 104, 104,
121 104, 104, 72, 72, 72, 72, 72, 72,
122 72, 104, 104, 104, 104, 104, 104, 104,
123 104, 104, 104, 104, 104, 104, 104, 104,
124 104, 104, 104, 104, 104, 104, 104, 104,
125 104, 104, 104, 72, 136, 72, 72, 104,
126 72, 104, 104, 104, 104, 104, 104, 104,
127 104, 104, 104, 104, 104, 104, 104, 104,
128 104, 104, 104, 104, 104, 104, 104, 104,
129 104, 104, 104, 72, 72, 72, 72, 72,
130 72, 72, 72, 72, 72, 72, 72, 72,
131 72, 72, 72, 72, 72, 72, 72, 72,
132 72, 72, 72, 72, 72, 72, 72, 72,
133 72, 72, 72, 72, 72, 72, 72, 72,
134 72, 72, 72, 72, 72, 72, 72, 72,
135 72, 72, 72, 72, 72, 72, 72, 72,
136 72, 72, 72, 72, 72, 72, 72, 72,
137 72, 72, 72, 72, 72, 72, 72, 72,
138 72, 72, 72, 72, 72, 72, 72, 72,
139 72, 72, 72, 72, 72, 72, 72, 72,
140 72, 72, 72, 72, 72, 72, 72, 72,
141 72, 72, 72, 72, 72, 72, 72, 72,
142 72, 72, 72, 72, 72, 72, 72, 72,
143 72, 72, 72, 72, 72, 72, 72, 72,
144 72, 72, 72, 72, 72, 72, 72, 72,
145 72, 72, 72, 72, 72, 72, 72, 72,
146 };
147 yych = *YYCURSOR;
148 if (yybm[0+yych] & 4) {
149 goto yy6;
150 }
151 if (yych <= '"') {
152 if (yych <= '\n') {
153 if (yych <= 0x00) goto yy2;
154 if (yych <= 0x08) goto yy4;
155 goto yy9;
156 } else {
157 if (yych == '\r') goto yy11;
158 goto yy4;
159 }
160 } else {
161 if (yych <= ';') {
162 if (yych <= '#') goto yy12;
163 if (yych <= ':') goto yy4;
164 goto yy12;
165 } else {
166 if (yych == 's') goto yy15;
167 goto yy4;
168 }
169 }
170yy2:
171 ++YYCURSOR;
172 { ret = SUCCESS; goto out; }
173yy4:
174 ++YYCURSOR;
175yy5:
176 { cs_error_log("Parser error on line %d", lineno); goto out; }
177yy6:
178 yych = *++YYCURSOR;
179 if (yybm[0+yych] & 4) {
180 goto yy6;
181 }
182 { goto yyc_init; }
183yy9:
184 ++YYCURSOR;
185 { lineno++; goto yyc_init; }
186yy11:
187 yych = *++YYCURSOR;
188 if (yych == '\n') goto yy9;
189 goto yy5;
190yy12:
191 yych = *++YYCURSOR;
192 if (yybm[0+yych] & 8) {
193 goto yy12;
194 }
195 { goto yyc_init; }
196yy15:
197 yyaccept = 0;
198 yych = *(YYMARKER = ++YYCURSOR);
199 if (yych == 'e') goto yy16;
200 if (yych == 'p') goto yy18;
201 goto yy5;
202yy16:
203 yych = *++YYCURSOR;
204 if (yych == 't') goto yy20;
205yy17:
206 YYCURSOR = YYMARKER;
207 if (yyaccept <= 1) {
208 if (yyaccept == 0) {
209 goto yy5;
210 } else {
211 yyt4 = YYCURSOR;
212 goto yy30;
213 }
214 } else {
215 goto yy30;
216 }
217yy18:
218 ++YYCURSOR;
219 { kw_i = 0; goto yyc_rule; }
220yy20:
221 yych = *++YYCURSOR;
222 if (yybm[0+yych] & 16) {
223 goto yy21;
224 }
225 goto yy17;
226yy21:
227 yych = *++YYCURSOR;
228 if (yybm[0+yych] & 16) {
229 goto yy21;
230 }
231 if (yych <= '^') {
232 if (yych <= '@') goto yy17;
233 if (yych >= '[') goto yy17;
234 yyt1 = YYCURSOR;
235 } else {
236 if (yych == '`') goto yy17;
237 if (yych >= '{') goto yy17;
238 yyt1 = YYCURSOR;
239 }
240yy23:
241 yych = *++YYCURSOR;
242 if (yybm[0+yych] & 32) {
243 goto yy23;
244 }
245 if (yych <= '\f') {
246 if (yych <= 0x08) goto yy17;
247 if (yych >= '\v') goto yy17;
248 yyt2 = YYCURSOR;
249 } else {
250 if (yych <= '\r') {
251 yyt2 = YYCURSOR;
252 goto yy25;
253 }
254 if (yych != ' ') goto yy17;
255 yyt2 = YYCURSOR;
256 }
257yy25:
258 yych = *++YYCURSOR;
259 if (yych <= '\r') {
260 if (yych <= 0x08) goto yy17;
261 if (yych <= '\n') goto yy25;
262 if (yych <= '\f') goto yy17;
263 goto yy25;
264 } else {
265 if (yych <= ' ') {
266 if (yych <= 0x1F) goto yy17;
267 goto yy25;
268 } else {
269 if (yych != '"') goto yy17;
270 yyt3 = YYCURSOR;
271 }
272 }
273yy27:
274 yych = *++YYCURSOR;
275 if (yybm[0+yych] & 64) {
276 goto yy27;
277 }
278 if (yych <= '\r') goto yy17;
279 if (yych >= '#') goto yy31;
280yy29:
281 yych = *++YYCURSOR;
282 yyt4 = YYCURSOR;
283 if (yych == ';') goto yy33;
284yy30:
285 t1 = yyt1;
286 t2 = yyt2;
287 t3 = yyt3;
288 t4 = yyt4;
289 {
290 char *key = (char*)t1;
291 int keylen = t2-t1;
292 zend_string *tmp = zend_hash_str_find_ptr(&vars, key, keylen);
293 if (tmp) {
294 zend_hash_str_del(&vars, key, keylen);
295 }
296 tmp = zend_string_init(t3+1, t4-t3-2, 1);
297 zend_hash_str_add_ptr(&vars, key, keylen, tmp);
298 goto yyc_init;
299 }
300yy31:
301 yych = *++YYCURSOR;
302 if (yybm[0+yych] & 64) {
303 goto yy27;
304 }
305 if (yych <= '\r') goto yy17;
306 if (yych <= '"') goto yy34;
307 goto yy31;
308yy33:
309 ++YYCURSOR;
310 goto yy30;
311yy34:
312 yyaccept = 1;
313 yych = *(YYMARKER = ++YYCURSOR);
314 if (yybm[0+yych] & 128) {
315 goto yy31;
316 }
317 if (yych <= '\r') {
318 if (yych == '\n') {
319 yyt4 = YYCURSOR;
320 goto yy30;
321 }
322 if (yych <= '\f') goto yy27;
323 yyt4 = YYCURSOR;
324 goto yy30;
325 } else {
326 if (yych <= '"') {
327 if (yych <= '!') goto yy27;
328 goto yy29;
329 } else {
330 if (yych != ';') goto yy27;
331 yyt4 = YYCURSOR;
332 }
333 }
334 yyaccept = 2;
335 yych = *(YYMARKER = ++YYCURSOR);
336 if (yybm[0+yych] & 64) {
337 goto yy27;
338 }
339 if (yych <= '\r') goto yy30;
340 if (yych <= '"') goto yy29;
341 goto yy31;
342 }
343/* *********************************** */
344yyc_rule:
345 {
346 static const unsigned char yybm[] = {
347 64, 64, 64, 64, 64, 64, 64, 64,
348 64, 88, 16, 64, 64, 0, 64, 64,
349 64, 64, 64, 64, 64, 64, 64, 64,
350 64, 64, 64, 64, 64, 64, 64, 64,
351 88, 64, 0, 64, 64, 64, 64, 64,
352 64, 64, 64, 64, 64, 64, 64, 64,
353 96, 96, 96, 96, 96, 96, 96, 96,
354 96, 96, 64, 64, 64, 64, 64, 64,
355 64, 96, 96, 96, 96, 96, 96, 96,
356 96, 96, 96, 96, 96, 96, 96, 96,
357 96, 96, 96, 96, 96, 96, 96, 96,
358 96, 96, 96, 64, 128, 64, 64, 96,
359 64, 96, 96, 96, 96, 96, 96, 96,
360 96, 96, 96, 96, 96, 96, 96, 96,
361 96, 96, 96, 96, 96, 96, 96, 96,
362 96, 96, 96, 64, 64, 64, 64, 64,
363 64, 64, 64, 64, 64, 64, 64, 64,
364 64, 64, 64, 64, 64, 64, 64, 64,
365 64, 64, 64, 64, 64, 64, 64, 64,
366 64, 64, 64, 64, 64, 64, 64, 64,
367 64, 64, 64, 64, 64, 64, 64, 64,
368 64, 64, 64, 64, 64, 64, 64, 64,
369 64, 64, 64, 64, 64, 64, 64, 64,
370 64, 64, 64, 64, 64, 64, 64, 64,
371 64, 64, 64, 64, 64, 64, 64, 64,
372 64, 64, 64, 64, 64, 64, 64, 64,
373 64, 64, 64, 64, 64, 64, 64, 64,
374 64, 64, 64, 64, 64, 64, 64, 64,
375 64, 64, 64, 64, 64, 64, 64, 64,
376 64, 64, 64, 64, 64, 64, 64, 64,
377 64, 64, 64, 64, 64, 64, 64, 64,
378 64, 64, 64, 64, 64, 64, 64, 64,
379 };
380 yych = *YYCURSOR;
381 if (yybm[0+yych] & 8) {
382 goto yy40;
383 }
384 if (yych <= '\r') {
385 if (yych <= 0x08) goto yy38;
386 if (yych <= '\n') goto yy43;
387 if (yych >= '\r') goto yy44;
388 } else {
389 if (yych <= '.') {
390 if (yych >= '.') goto yy45;
391 } else {
392 if (yych == ';') goto yy46;
393 }
394 }
395yy38:
396 ++YYCURSOR;
397yy39:
398 { goto end_of_rule; }
399yy40:
400 yych = *++YYCURSOR;
401 if (yybm[0+yych] & 8) {
402 goto yy40;
403 }
404 { goto yyc_rule; }
405yy43:
406 yyaccept = 0;
407 yych = *(YYMARKER = ++YYCURSOR);
408 if (yych <= '\r') {
409 if (yych <= 0x08) goto yy39;
410 if (yych <= '\n') {
411 yyt1 = YYCURSOR;
412 goto yy48;
413 }
414 if (yych <= '\f') goto yy39;
415 yyt1 = YYCURSOR;
416 goto yy51;
417 } else {
418 if (yych <= ' ') {
419 if (yych <= 0x1F) goto yy39;
420 yyt1 = YYCURSOR;
421 goto yy48;
422 } else {
423 if (yych == '.') {
424 yyt1 = YYCURSOR;
425 goto yy52;
426 }
427 goto yy39;
428 }
429 }
430yy44:
431 yyaccept = 0;
432 yych = *(YYMARKER = ++YYCURSOR);
433 if (yych == '\n') goto yy54;
434 goto yy39;
435yy45:
436 yych = *++YYCURSOR;
437 if (yych <= '^') {
438 if (yych <= '@') goto yy39;
439 if (yych <= 'Z') {
440 yyt1 = YYCURSOR;
441 goto yy55;
442 }
443 goto yy39;
444 } else {
445 if (yych == '`') goto yy39;
446 if (yych <= 'z') {
447 yyt1 = YYCURSOR;
448 goto yy55;
449 }
450 goto yy39;
451 }
452yy46:
453 ++YYCURSOR;
454 {
455 end_of_rule:
456 parsed_rule[kw_i++] = (sp_parsed_keyword){0, 0, 0, 0, 0, 0};
457 if (process_rule && process_rule(parsed_rule) != SUCCESS) {
458 goto out;
459 }
460 goto yyc_init;
461 }
462yy48:
463 yych = *++YYCURSOR;
464 if (yybm[0+yych] & 16) {
465 goto yy48;
466 }
467 if (yych == '\r') goto yy51;
468 if (yych == '.') goto yy52;
469yy50:
470 YYCURSOR = YYMARKER;
471 if (yyaccept <= 1) {
472 if (yyaccept == 0) {
473 goto yy39;
474 } else {
475 yyt3 = yyt4 = NULL;
476 yyt2 = YYCURSOR;
477 goto yy57;
478 }
479 } else {
480 goto yy57;
481 }
482yy51:
483 yych = *++YYCURSOR;
484 if (yych == '\n') goto yy48;
485 goto yy50;
486yy52:
487 ++YYCURSOR;
488 YYCURSOR = yyt1;
489 { lineno++; goto yyc_rule; }
490yy54:
491 yych = *++YYCURSOR;
492 if (yych <= '\r') {
493 if (yych <= 0x08) goto yy50;
494 if (yych <= '\n') {
495 yyt1 = YYCURSOR;
496 goto yy48;
497 }
498 if (yych <= '\f') goto yy50;
499 yyt1 = YYCURSOR;
500 goto yy51;
501 } else {
502 if (yych <= ' ') {
503 if (yych <= 0x1F) goto yy50;
504 yyt1 = YYCURSOR;
505 goto yy48;
506 } else {
507 if (yych == '.') {
508 yyt1 = YYCURSOR;
509 goto yy52;
510 }
511 goto yy50;
512 }
513 }
514yy55:
515 yyaccept = 1;
516 yych = *(YYMARKER = ++YYCURSOR);
517 if (yybm[0+yych] & 32) {
518 goto yy55;
519 }
520 if (yych == '(') {
521 yyt2 = YYCURSOR;
522 goto yy58;
523 }
524 yyt3 = yyt4 = NULL;
525 yyt2 = YYCURSOR;
526yy57:
527 t1 = yyt1;
528 t2 = yyt2;
529 t3 = yyt3;
530 t4 = yyt4;
531 {
532 if (kw_i == max_keywords) {
533 cs_error_log("Too many keywords in rule (more than %d) on line %d", max_keywords, lineno);
534 goto out;
535 }
536 sp_parsed_keyword kw = {.kw = (char*)t1, .kwlen = t2-t1, .arg = (char*)t3, .arglen = t4-t3, .argtype = SP_ARGTYPE_UNKNOWN, .lineno = lineno};
537 if (t3 && t4) {
538 if (t3 == t4) {
539 kw.argtype = SP_ARGTYPE_EMPTY;
540 } else if (t4-t3 >= 2 && *t3 == '"') {
541 kw.arg = (char*)t3 + 1;
542 kw.arglen = t4 - t3 - 2;
543 kw.argtype = SP_ARGTYPE_STR;
544 } else {
545 zend_string *tmp = zend_hash_str_find_ptr(&vars, t3, t4-t3);
546 if (!tmp) {
547 cs_error_log("unknown variable on line %d", lineno);
548 goto out;
549 }
550 kw.arg = ZSTR_VAL(tmp);
551 kw.arglen = ZSTR_LEN(tmp);
552 kw.argtype = SP_ARGTYPE_STR;
553 }
554 } else {
555 kw.argtype = SP_ARGTYPE_NONE;
556 }
557 parsed_rule[kw_i++] = kw;
558 goto yyc_rule;
559 }
560yy58:
561 yych = *++YYCURSOR;
562 if (yych <= '@') {
563 if (yych <= '"') {
564 if (yych <= '!') goto yy50;
565 yyt3 = YYCURSOR;
566 } else {
567 if (yych == ')') {
568 yyt3 = yyt4 = YYCURSOR;
569 goto yy61;
570 }
571 goto yy50;
572 }
573 } else {
574 if (yych <= '_') {
575 if (yych <= 'Z') {
576 yyt3 = YYCURSOR;
577 goto yy62;
578 }
579 if (yych <= '^') goto yy50;
580 yyt3 = YYCURSOR;
581 goto yy62;
582 } else {
583 if (yych <= '`') goto yy50;
584 if (yych <= 'z') {
585 yyt3 = YYCURSOR;
586 goto yy62;
587 }
588 goto yy50;
589 }
590 }
591yy59:
592 yych = *++YYCURSOR;
593 if (yybm[0+yych] & 64) {
594 goto yy59;
595 }
596 if (yych <= '\r') goto yy50;
597 if (yych <= '"') goto yy64;
598 goto yy65;
599yy61:
600 ++YYCURSOR;
601 goto yy57;
602yy62:
603 yych = *++YYCURSOR;
604 if (yych <= '@') {
605 if (yych <= ')') {
606 if (yych <= '(') goto yy50;
607 yyt4 = YYCURSOR;
608 goto yy61;
609 } else {
610 if (yych <= '/') goto yy50;
611 if (yych <= '9') goto yy62;
612 goto yy50;
613 }
614 } else {
615 if (yych <= '_') {
616 if (yych <= 'Z') goto yy62;
617 if (yych <= '^') goto yy50;
618 goto yy62;
619 } else {
620 if (yych <= '`') goto yy50;
621 if (yych <= 'z') goto yy62;
622 goto yy50;
623 }
624 }
625yy64:
626 yych = *++YYCURSOR;
627 if (yych == ')') {
628 yyt4 = YYCURSOR;
629 goto yy61;
630 }
631 goto yy50;
632yy65:
633 yych = *++YYCURSOR;
634 if (yybm[0+yych] & 64) {
635 goto yy59;
636 }
637 if (yych <= '\r') goto yy50;
638 if (yych >= '#') goto yy65;
639 yych = *++YYCURSOR;
640 if (yybm[0+yych] & 128) {
641 goto yy65;
642 }
643 if (yych <= '\r') {
644 if (yych == '\n') goto yy50;
645 if (yych <= '\f') goto yy59;
646 goto yy50;
647 } else {
648 if (yych <= '"') {
649 if (yych <= '!') goto yy59;
650 goto yy64;
651 } else {
652 if (yych != ')') goto yy59;
653 yyt4 = YYCURSOR;
654 }
655 }
656 yyaccept = 2;
657 yych = *(YYMARKER = ++YYCURSOR);
658 if (yybm[0+yych] & 64) {
659 goto yy59;
660 }
661 if (yych <= '\r') goto yy57;
662 if (yych <= '"') goto yy64;
663 goto yy65;
664 }
665}
666
667out:
668 zend_hash_destroy(&vars);
669 return ret;
670} \ No newline at end of file