Coverage Report

Created: 2026-09-14 06:25

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/php-src/ext/json/json_scanner.c
Line
Count
Source
1
/* Generated by re2c 1.3 */
2
/*
3
  +----------------------------------------------------------------------+
4
  | Copyright © The PHP Group and Contributors.                          |
5
  +----------------------------------------------------------------------+
6
  | This source file is subject to the Modified BSD License that is      |
7
  | bundled with this package in the file LICENSE, and is available      |
8
  | through the World Wide Web at <https://www.php.net/license/>.        |
9
  |                                                                      |
10
  | SPDX-License-Identifier: BSD-3-Clause                                |
11
  +----------------------------------------------------------------------+
12
  | Author: Jakub Zelenka <bukka@php.net>                                |
13
  +----------------------------------------------------------------------+
14
*/
15
16
#include "php.h"
17
#include "php_json_scanner.h"
18
#include "php_json_scanner_defs.h"
19
#include "php_json_parser.h"
20
#include "json_parser.tab.h"
21
22
18.7M
#define YYCTYPE     php_json_ctype
23
196M
#define YYCURSOR    s->cursor
24
#define YYLIMIT     s->limit
25
94.4M
#define YYMARKER    s->marker
26
#define YYCTXMARKER s->ctxmarker
27
28
37.4M
#define YYGETCONDITION()        s->state
29
135k
#define YYSETCONDITION(yystate) s->state = yystate
30
31
#define YYFILL(n)
32
33
132k
#define PHP_JSON_CONDITION_SET(condition) YYSETCONDITION(yyc##condition)
34
34.0M
#define PHP_JSON_CONDITION_GOTO(condition) goto yyc_##condition
35
#define PHP_JSON_CONDITION_SET_AND_GOTO(condition) \
36
62.2k
  PHP_JSON_CONDITION_SET(condition); \
37
62.2k
  PHP_JSON_CONDITION_GOTO(condition)
38
#define PHP_JSON_CONDITION_GOTO_STR_P2() \
39
52.5k
  do { \
40
52.5k
    if (s->utf8_invalid) { \
41
0
      PHP_JSON_CONDITION_GOTO(STR_P2_BIN); \
42
52.5k
    } else { \
43
52.5k
      PHP_JSON_CONDITION_GOTO(STR_P2_UTF); \
44
52.5k
    } \
45
52.5k
  } while(0)
46
47
48
9.32k
#define PHP_JSON_SCANNER_COPY_ESC() php_json_scanner_copy_string(s, 0)
49
39.5k
#define PHP_JSON_SCANNER_COPY_UTF() php_json_scanner_copy_string(s, 5)
50
3.64k
#define PHP_JSON_SCANNER_COPY_UTF_SP() php_json_scanner_copy_string(s, 11)
51
52
4.38M
#define PHP_JSON_INT_MAX_LENGTH (MAX_LENGTH_OF_LONG - 1)
53
54
4.38M
#define PHP_JSON_TOKEN_LENGTH() ((size_t) (s->cursor - s->token))
55
56
static void php_json_scanner_copy_string(php_json_scanner *s, size_t esc_size)
57
52.5k
{
58
52.5k
  size_t len = (size_t)(s->cursor - s->str_start - esc_size - 1);
59
52.5k
  if (len) {
60
22.1k
    memcpy(s->pstr, s->str_start, len);
61
22.1k
    s->pstr += len;
62
22.1k
  }
63
52.5k
}
64
65
static int php_json_hex_to_int(unsigned char code)
66
140k
{
67
140k
  if (code >= '0' && code <= '9') {
68
70.1k
    return code - '0';
69
70.1k
  } else if (code >= 'A' && code <= 'F') {
70
50.8k
    return code - ('A' - 10);
71
50.8k
  } else if (code >= 'a' && code <= 'f') {
72
19.0k
    return code - ('a' - 10);
73
19.0k
  } else {
74
    /* this should never happened (just to suppress compiler warning) */
75
0
    return -1;
76
0
  }
77
140k
}
78
79
static int php_json_ucs2_to_int_ex(php_json_scanner *s, int size, int start)
80
46.8k
{
81
46.8k
  int i, code = 0;
82
46.8k
  php_json_ctype *pc = s->cursor - start;
83
186k
  for (i = 0; i < size; i++) {
84
140k
    code |= php_json_hex_to_int(*(pc--)) << (i * 4);
85
140k
  }
86
46.8k
  return code;
87
46.8k
}
88
89
static int php_json_ucs2_to_int(php_json_scanner *s, int size)
90
43.2k
{
91
43.2k
  return php_json_ucs2_to_int_ex(s, size, 1);
92
43.2k
}
93
94
void php_json_scanner_init(php_json_scanner *s, const char *str, size_t str_len, int options)
95
13.6k
{
96
13.6k
  s->cursor = (php_json_ctype *) str;
97
13.6k
  s->limit = (php_json_ctype *) str + str_len;
98
13.6k
  s->options = options;
99
13.6k
  s->line = 1;
100
13.6k
  s->line_start = (php_json_ctype *) str;
101
13.6k
  PHP_JSON_CONDITION_SET(JS);
102
13.6k
}
103
104
int php_json_scan(php_json_scanner *s)
105
18.7M
{
106
18.7M
  ZVAL_NULL(&s->value);
107
108
18.7M
std:
109
18.7M
  s->token = s->cursor;
110
111
112
18.7M
  {
113
18.7M
    YYCTYPE yych;
114
18.7M
    unsigned int yyaccept = 0;
115
18.7M
    if (YYGETCONDITION() < 2) {
116
18.7M
      if (YYGETCONDITION() < 1) {
117
18.7M
        goto yyc_JS;
118
18.7M
      } else {
119
0
        goto yyc_STR_P1;
120
0
      }
121
18.7M
    } else {
122
0
      if (YYGETCONDITION() < 3) {
123
0
        goto yyc_STR_P2_BIN;
124
0
      } else {
125
0
        goto yyc_STR_P2_UTF;
126
0
      }
127
0
    }
128
/* *********************************** */
129
18.7M
yyc_JS:
130
18.7M
    {
131
18.7M
      static const unsigned char yybm[] = {
132
18.7M
          0,   0,   0,   0,   0,   0,   0,   0, 
133
18.7M
          0,  64,   0,   0,   0,  64,   0,   0, 
134
18.7M
          0,   0,   0,   0,   0,   0,   0,   0, 
135
18.7M
          0,   0,   0,   0,   0,   0,   0,   0, 
136
18.7M
         64,   0,   0,   0,   0,   0,   0,   0, 
137
18.7M
          0,   0,   0,   0,   0,   0,   0,   0, 
138
18.7M
        128, 128, 128, 128, 128, 128, 128, 128, 
139
18.7M
        128, 128,   0,   0,   0,   0,   0,   0, 
140
18.7M
          0,   0,   0,   0,   0,   0,   0,   0, 
141
18.7M
          0,   0,   0,   0,   0,   0,   0,   0, 
142
18.7M
          0,   0,   0,   0,   0,   0,   0,   0, 
143
18.7M
          0,   0,   0,   0,   0,   0,   0,   0, 
144
18.7M
          0,   0,   0,   0,   0,   0,   0,   0, 
145
18.7M
          0,   0,   0,   0,   0,   0,   0,   0, 
146
18.7M
          0,   0,   0,   0,   0,   0,   0,   0, 
147
18.7M
          0,   0,   0,   0,   0,   0,   0,   0, 
148
18.7M
          0,   0,   0,   0,   0,   0,   0,   0, 
149
18.7M
          0,   0,   0,   0,   0,   0,   0,   0, 
150
18.7M
          0,   0,   0,   0,   0,   0,   0,   0, 
151
18.7M
          0,   0,   0,   0,   0,   0,   0,   0, 
152
18.7M
          0,   0,   0,   0,   0,   0,   0,   0, 
153
18.7M
          0,   0,   0,   0,   0,   0,   0,   0, 
154
18.7M
          0,   0,   0,   0,   0,   0,   0,   0, 
155
18.7M
          0,   0,   0,   0,   0,   0,   0,   0, 
156
18.7M
          0,   0,   0,   0,   0,   0,   0,   0, 
157
18.7M
          0,   0,   0,   0,   0,   0,   0,   0, 
158
18.7M
          0,   0,   0,   0,   0,   0,   0,   0, 
159
18.7M
          0,   0,   0,   0,   0,   0,   0,   0, 
160
18.7M
          0,   0,   0,   0,   0,   0,   0,   0, 
161
18.7M
          0,   0,   0,   0,   0,   0,   0,   0, 
162
18.7M
          0,   0,   0,   0,   0,   0,   0,   0, 
163
18.7M
          0,   0,   0,   0,   0,   0,   0,   0, 
164
18.7M
      };
165
18.7M
      yych = *YYCURSOR;
166
18.7M
      if (yych <= ']') {
167
12.1M
        if (yych <= '"') {
168
71.9k
          if (yych <= '\f') {
169
8.89k
            if (yych <= 0x08) {
170
7.93k
              if (yych >= 0x01) goto yy5;
171
7.93k
            } else {
172
956
              if (yych <= '\t') goto yy7;
173
714
              if (yych <= '\n') goto yy10;
174
5
              goto yy5;
175
714
            }
176
63.0k
          } else {
177
63.0k
            if (yych <= 0x1F) {
178
469
              if (yych <= '\r') goto yy12;
179
37
              goto yy5;
180
62.5k
            } else {
181
62.5k
              if (yych <= ' ') goto yy7;
182
62.2k
              if (yych <= '!') goto yy13;
183
62.2k
              goto yy15;
184
62.2k
            }
185
63.0k
          }
186
12.1M
        } else {
187
12.1M
          if (yych <= '0') {
188
11.5M
            if (yych <= ',') {
189
7.64M
              if (yych <= '+') goto yy13;
190
7.64M
              goto yy17;
191
7.64M
            } else {
192
3.88M
              if (yych <= '-') goto yy19;
193
3.88M
              if (yych <= '/') goto yy13;
194
3.88M
              goto yy20;
195
3.88M
            }
196
11.5M
          } else {
197
591k
            if (yych <= 'Z') {
198
576k
              if (yych <= '9') goto yy22;
199
55.7k
              if (yych <= ':') goto yy24;
200
129
              goto yy13;
201
55.7k
            } else {
202
14.3k
              if (yych <= '[') goto yy26;
203
6.06k
              if (yych <= '\\') goto yy13;
204
6.04k
              goto yy28;
205
6.06k
            }
206
591k
          }
207
12.1M
        }
208
12.1M
      } else {
209
6.52M
        if (yych <= '}') {
210
6.52M
          if (yych <= 's') {
211
773
            if (yych <= 'f') {
212
467
              if (yych <= 'e') goto yy13;
213
298
              goto yy30;
214
467
            } else {
215
306
              if (yych == 'n') goto yy31;
216
25
              goto yy13;
217
306
            }
218
6.52M
          } else {
219
6.52M
            if (yych <= 'z') {
220
279
              if (yych <= 't') goto yy32;
221
15
              goto yy13;
222
6.52M
            } else {
223
6.52M
              if (yych <= '{') goto yy33;
224
3.25M
              if (yych <= '|') goto yy13;
225
3.25M
              goto yy35;
226
3.25M
            }
227
6.52M
          }
228
6.52M
        } else {
229
546
          if (yych <= 0xEC) {
230
295
            if (yych <= 0xC1) {
231
103
              if (yych <= 0x7F) goto yy13;
232
96
              goto yy37;
233
192
            } else {
234
192
              if (yych <= 0xDF) goto yy39;
235
109
              if (yych <= 0xE0) goto yy40;
236
52
              goto yy41;
237
109
            }
238
295
          } else {
239
251
            if (yych <= 0xF0) {
240
123
              if (yych <= 0xED) goto yy42;
241
73
              if (yych <= 0xEF) goto yy41;
242
60
              goto yy43;
243
128
            } else {
244
128
              if (yych <= 0xF3) goto yy44;
245
64
              if (yych <= 0xF4) goto yy45;
246
23
              goto yy37;
247
64
            }
248
251
          }
249
546
        }
250
6.52M
      }
251
7.92k
      ++YYCURSOR;
252
7.92k
      {
253
7.92k
    if (s->limit < s->cursor) {
254
7.90k
      return PHP_JSON_T_EOI;
255
7.90k
    } else {
256
15
      s->errcode = PHP_JSON_ERROR_CTRL_CHAR;
257
15
      return PHP_JSON_T_ERROR;
258
15
    }
259
7.92k
  }
260
55
yy5:
261
55
      ++YYCURSOR;
262
55
      {
263
55
    s->errcode = PHP_JSON_ERROR_CTRL_CHAR;
264
55
    return PHP_JSON_T_ERROR;
265
7.92k
  }
266
821
yy7:
267
821
      yych = *++YYCURSOR;
268
1.05k
yy8:
269
1.05k
      if (yybm[0+yych] & 64) {
270
262
        goto yy7;
271
262
      }
272
797
      { goto std; }
273
903
yy10:
274
903
      ++YYCURSOR;
275
903
      {
276
903
    s->line++;
277
903
    s->line_start = s->cursor;
278
903
    goto std;
279
1.05k
  }
280
432
yy12:
281
432
      yych = *++YYCURSOR;
282
432
      if (yych == '\n') goto yy10;
283
238
      goto yy8;
284
549
yy13:
285
549
      ++YYCURSOR;
286
840
yy14:
287
840
      {
288
840
    s->errcode = PHP_JSON_ERROR_SYNTAX;
289
840
    return PHP_JSON_T_ERROR;
290
549
  }
291
62.2k
yy15:
292
62.2k
      ++YYCURSOR;
293
62.2k
      {
294
62.2k
    s->str_start = s->cursor;
295
62.2k
    s->str_esc = 0;
296
62.2k
    s->utf8_invalid = 0;
297
62.2k
    s->utf8_invalid_count = 0;
298
62.2k
    PHP_JSON_CONDITION_SET_AND_GOTO(STR_P1);
299
549
  }
300
7.64M
yy17:
301
7.64M
      ++YYCURSOR;
302
7.64M
      { return ','; }
303
1.21k
yy19:
304
1.21k
      yych = *++YYCURSOR;
305
1.21k
      if (yych <= '/') goto yy14;
306
1.17k
      if (yych <= '0') goto yy20;
307
873
      if (yych <= '9') goto yy22;
308
23
      goto yy14;
309
3.88M
yy20:
310
3.88M
      yyaccept = 0;
311
3.88M
      yych = *(YYMARKER = ++YYCURSOR);
312
3.88M
      if (yych <= 'D') {
313
3.87M
        if (yych == '.') goto yy46;
314
3.87M
      } else {
315
3.62k
        if (yych <= 'E') goto yy48;
316
3.33k
        if (yych == 'e') goto yy48;
317
3.33k
      }
318
4.38M
yy21:
319
4.38M
      {
320
4.38M
    bool bigint = 0, negative = s->token[0] == '-';
321
4.38M
    size_t digits = PHP_JSON_TOKEN_LENGTH();
322
4.38M
    digits -= negative;
323
4.38M
    if (digits >= PHP_JSON_INT_MAX_LENGTH) {
324
2.70k
      if (digits == PHP_JSON_INT_MAX_LENGTH) {
325
1.05k
        int cmp = strncmp((char *) (s->token + negative), LONG_MIN_DIGITS, PHP_JSON_INT_MAX_LENGTH);
326
1.05k
        if (!(cmp < 0 || (cmp == 0 && negative))) {
327
616
          bigint = 1;
328
616
        }
329
1.65k
      } else {
330
1.65k
        bigint = 1;
331
1.65k
      }
332
2.70k
    }
333
4.38M
    if (!bigint) {
334
4.37M
      ZVAL_LONG(&s->value, ZEND_STRTOL((char *) s->token, NULL, 10));
335
4.37M
      return PHP_JSON_T_INT;
336
4.37M
    } else if (s->options & PHP_JSON_BIGINT_AS_STRING) {
337
0
      ZVAL_STRINGL(&s->value, (char *) s->token, (size_t)(s->cursor - s->token));
338
0
      return PHP_JSON_T_STRING;
339
2.27k
    } else {
340
2.27k
      ZVAL_DOUBLE(&s->value, zend_strtod((char *) s->token, NULL));
341
2.27k
      return PHP_JSON_T_DOUBLE;
342
2.27k
    }
343
4.38M
  }
344
23.0M
yy22:
345
23.0M
      yyaccept = 0;
346
23.0M
      yych = *(YYMARKER = ++YYCURSOR);
347
23.0M
      if (yybm[0+yych] & 128) {
348
22.5M
        goto yy22;
349
22.5M
      }
350
521k
      if (yych <= 'D') {
351
507k
        if (yych == '.') goto yy46;
352
499k
        goto yy21;
353
507k
      } else {
354
14.7k
        if (yych <= 'E') goto yy48;
355
13.1k
        if (yych == 'e') goto yy48;
356
3.09k
        goto yy21;
357
13.1k
      }
358
55.5k
yy24:
359
55.5k
      ++YYCURSOR;
360
55.5k
      { return ':'; }
361
8.28k
yy26:
362
8.28k
      ++YYCURSOR;
363
8.28k
      { return '['; }
364
6.04k
yy28:
365
6.04k
      ++YYCURSOR;
366
6.04k
      { return ']'; }
367
298
yy30:
368
298
      yyaccept = 1;
369
298
      yych = *(YYMARKER = ++YYCURSOR);
370
298
      if (yych == 'a') goto yy49;
371
29
      goto yy14;
372
281
yy31:
373
281
      yyaccept = 1;
374
281
      yych = *(YYMARKER = ++YYCURSOR);
375
281
      if (yych == 'u') goto yy50;
376
25
      goto yy14;
377
264
yy32:
378
264
      yyaccept = 1;
379
264
      yych = *(YYMARKER = ++YYCURSOR);
380
264
      if (yych == 'r') goto yy51;
381
22
      goto yy14;
382
3.26M
yy33:
383
3.26M
      ++YYCURSOR;
384
3.26M
      { return '{'; }
385
3.25M
yy35:
386
3.25M
      ++YYCURSOR;
387
3.25M
      { return '}'; }
388
119
yy37:
389
119
      ++YYCURSOR;
390
493
yy38:
391
493
      {
392
493
    s->errcode = PHP_JSON_ERROR_UTF8;
393
493
    return PHP_JSON_T_ERROR;
394
119
  }
395
83
yy39:
396
83
      yych = *++YYCURSOR;
397
83
      if (yych <= 0x7F) goto yy38;
398
46
      if (yych <= 0xBF) goto yy13;
399
29
      goto yy38;
400
57
yy40:
401
57
      yyaccept = 2;
402
57
      yych = *(YYMARKER = ++YYCURSOR);
403
57
      if (yych <= 0x9F) goto yy38;
404
36
      if (yych <= 0xBF) goto yy52;
405
11
      goto yy38;
406
65
yy41:
407
65
      yyaccept = 2;
408
65
      yych = *(YYMARKER = ++YYCURSOR);
409
65
      if (yych <= 0x7F) goto yy38;
410
43
      if (yych <= 0xBF) goto yy52;
411
11
      goto yy38;
412
50
yy42:
413
50
      yyaccept = 2;
414
50
      yych = *(YYMARKER = ++YYCURSOR);
415
50
      if (yych <= 0x7F) goto yy38;
416
45
      if (yych <= 0x9F) goto yy52;
417
19
      goto yy38;
418
60
yy43:
419
60
      yyaccept = 2;
420
60
      yych = *(YYMARKER = ++YYCURSOR);
421
60
      if (yych <= 0x8F) goto yy38;
422
39
      if (yych <= 0xBF) goto yy53;
423
13
      goto yy38;
424
64
yy44:
425
64
      yyaccept = 2;
426
64
      yych = *(YYMARKER = ++YYCURSOR);
427
64
      if (yych <= 0x7F) goto yy38;
428
51
      if (yych <= 0xBF) goto yy53;
429
15
      goto yy38;
430
41
yy45:
431
41
      yyaccept = 2;
432
41
      yych = *(YYMARKER = ++YYCURSOR);
433
41
      if (yych <= 0x7F) goto yy38;
434
34
      if (yych <= 0x8F) goto yy53;
435
23
      goto yy38;
436
9.33k
yy46:
437
9.33k
      yych = *++YYCURSOR;
438
9.33k
      if (yych <= '/') goto yy47;
439
9.29k
      if (yych <= '9') goto yy54;
440
538
yy47:
441
538
      YYCURSOR = YYMARKER;
442
538
      if (yyaccept <= 1) {
443
339
        if (yyaccept == 0) {
444
182
          goto yy21;
445
182
        } else {
446
157
          goto yy14;
447
157
        }
448
339
      } else {
449
199
        if (yyaccept == 2) {
450
127
          goto yy38;
451
127
        } else {
452
72
          goto yy56;
453
72
        }
454
199
      }
455
14.8k
yy48:
456
14.8k
      yych = *++YYCURSOR;
457
14.8k
      if (yych <= ',') {
458
405
        if (yych == '+') goto yy57;
459
123
        goto yy47;
460
14.4k
      } else {
461
14.4k
        if (yych <= '-') goto yy57;
462
8.56k
        if (yych <= '/') goto yy47;
463
8.55k
        if (yych <= '9') goto yy58;
464
30
        goto yy47;
465
8.55k
      }
466
269
yy49:
467
269
      yych = *++YYCURSOR;
468
269
      if (yych == 'l') goto yy60;
469
29
      goto yy47;
470
256
yy50:
471
256
      yych = *++YYCURSOR;
472
256
      if (yych == 'l') goto yy61;
473
23
      goto yy47;
474
242
yy51:
475
242
      yych = *++YYCURSOR;
476
242
      if (yych == 'u') goto yy62;
477
23
      goto yy47;
478
102
yy52:
479
102
      yych = *++YYCURSOR;
480
102
      if (yych <= 0x7F) goto yy47;
481
46
      if (yych <= 0xBF) goto yy13;
482
17
      goto yy47;
483
73
yy53:
484
73
      yych = *++YYCURSOR;
485
73
      if (yych <= 0x7F) goto yy47;
486
30
      if (yych <= 0xBF) goto yy52;
487
11
      goto yy47;
488
67.3M
yy54:
489
67.3M
      yyaccept = 3;
490
67.3M
      yych = *(YYMARKER = ++YYCURSOR);
491
67.3M
      if (yych <= 'D') {
492
67.3M
        if (yych <= '/') goto yy56;
493
67.3M
        if (yych <= '9') goto yy54;
494
67.3M
      } else {
495
2.52k
        if (yych <= 'E') goto yy48;
496
2.19k
        if (yych == 'e') goto yy48;
497
2.19k
      }
498
21.7k
yy56:
499
21.7k
      {
500
21.7k
    ZVAL_DOUBLE(&s->value, zend_strtod((char *) s->token, NULL));
501
21.7k
    return PHP_JSON_T_DOUBLE;
502
67.3M
  }
503
6.14k
yy57:
504
6.14k
      yych = *++YYCURSOR;
505
6.14k
      if (yych <= '/') goto yy47;
506
6.11k
      if (yych >= ':') goto yy47;
507
40.8k
yy58:
508
40.8k
      yych = *++YYCURSOR;
509
40.8k
      if (yych <= '/') goto yy56;
510
26.4k
      if (yych <= '9') goto yy58;
511
256
      goto yy56;
512
256
yy60:
513
240
      yych = *++YYCURSOR;
514
240
      if (yych == 's') goto yy63;
515
17
      goto yy47;
516
233
yy61:
517
233
      yych = *++YYCURSOR;
518
233
      if (yych == 'l') goto yy64;
519
19
      goto yy47;
520
219
yy62:
521
219
      yych = *++YYCURSOR;
522
219
      if (yych == 'e') goto yy66;
523
23
      goto yy47;
524
223
yy63:
525
223
      yych = *++YYCURSOR;
526
223
      if (yych == 'e') goto yy68;
527
23
      goto yy47;
528
214
yy64:
529
214
      ++YYCURSOR;
530
214
      {
531
214
    ZVAL_NULL(&s->value);
532
214
    return PHP_JSON_T_NUL;
533
223
  }
534
196
yy66:
535
196
      ++YYCURSOR;
536
196
      {
537
196
    ZVAL_TRUE(&s->value);
538
196
    return PHP_JSON_T_TRUE;
539
223
  }
540
200
yy68:
541
200
      ++YYCURSOR;
542
200
      {
543
200
    ZVAL_FALSE(&s->value);
544
200
    return PHP_JSON_T_FALSE;
545
223
  }
546
223
    }
547
/* *********************************** */
548
21.6M
yyc_STR_P1:
549
21.6M
    yych = *YYCURSOR;
550
21.6M
    if (yych <= 0xC1) {
551
21.6M
      if (yych <= '"') {
552
61.0k
        if (yych <= 0x00) goto yy72;
553
60.5k
        if (yych <= 0x1F) goto yy74;
554
60.5k
        if (yych <= '!') goto yy76;
555
59.8k
        goto yy78;
556
21.6M
      } else {
557
21.6M
        if (yych == '\\') goto yy80;
558
21.5M
        if (yych <= 0x7F) goto yy76;
559
29
        goto yy82;
560
21.5M
      }
561
21.6M
    } else {
562
2.41k
      if (yych <= 0xED) {
563
1.11k
        if (yych <= 0xDF) goto yy84;
564
845
        if (yych <= 0xE0) goto yy85;
565
521
        if (yych <= 0xEC) goto yy86;
566
232
        goto yy87;
567
1.29k
      } else {
568
1.29k
        if (yych <= 0xF0) {
569
698
          if (yych <= 0xEF) goto yy86;
570
414
          goto yy88;
571
698
        } else {
572
596
          if (yych <= 0xF3) goto yy89;
573
275
          if (yych <= 0xF4) goto yy90;
574
11
          goto yy82;
575
275
        }
576
1.29k
      }
577
2.41k
    }
578
446
yy72:
579
446
    ++YYCURSOR;
580
446
    {
581
446
    if (s->limit < s->cursor) {
582
441
      s->errcode = PHP_JSON_ERROR_SYNTAX;
583
441
    } else {
584
5
      s->errcode = PHP_JSON_ERROR_CTRL_CHAR;
585
5
    }
586
446
    return PHP_JSON_T_ERROR;
587
21.6M
  }
588
19
yy74:
589
19
    ++YYCURSOR;
590
19
    {
591
19
    s->errcode = PHP_JSON_ERROR_CTRL_CHAR;
592
19
    return PHP_JSON_T_ERROR;
593
21.6M
  }
594
21.5M
yy76:
595
21.5M
    ++YYCURSOR;
596
21.5M
    { PHP_JSON_CONDITION_GOTO(STR_P1); }
597
59.8k
yy78:
598
59.8k
    ++YYCURSOR;
599
59.8k
    {
600
59.8k
    zend_string *str;
601
59.8k
    size_t len = (size_t)(s->cursor - s->str_start - s->str_esc - 1 + s->utf8_invalid_count);
602
59.8k
    if (len == 0) {
603
20.5k
      PHP_JSON_CONDITION_SET(JS);
604
20.5k
      ZVAL_EMPTY_STRING(&s->value);
605
20.5k
      return PHP_JSON_T_ESTRING;
606
20.5k
    }
607
39.2k
    str = zend_string_alloc(len, 0);
608
39.2k
    ZSTR_VAL(str)[len] = '\0';
609
39.2k
    ZVAL_STR(&s->value, str);
610
39.2k
    if (s->str_esc || s->utf8_invalid) {
611
3.23k
      s->pstr = (php_json_ctype *) Z_STRVAL(s->value);
612
3.23k
      s->cursor = s->str_start;
613
3.23k
      PHP_JSON_CONDITION_GOTO_STR_P2();
614
36.0k
    } else {
615
36.0k
      memcpy(Z_STRVAL(s->value), s->str_start, len);
616
36.0k
      PHP_JSON_CONDITION_SET(JS);
617
36.0k
      return PHP_JSON_T_STRING;
618
36.0k
    }
619
39.2k
  }
620
54.6k
yy80:
621
54.6k
    yyaccept = 0;
622
54.6k
    yych = *(YYMARKER = ++YYCURSOR);
623
54.6k
    if (yych <= 'e') {
624
4.89k
      if (yych <= '/') {
625
983
        if (yych == '"') goto yy91;
626
539
        if (yych >= '/') goto yy91;
627
3.91k
      } else {
628
3.91k
        if (yych <= '\\') {
629
3.45k
          if (yych >= '\\') goto yy91;
630
3.45k
        } else {
631
455
          if (yych == 'b') goto yy91;
632
455
        }
633
3.91k
      }
634
49.7k
    } else {
635
49.7k
      if (yych <= 'q') {
636
993
        if (yych <= 'f') goto yy91;
637
404
        if (yych == 'n') goto yy91;
638
48.7k
      } else {
639
48.7k
        if (yych <= 's') {
640
441
          if (yych <= 'r') goto yy91;
641
48.3k
        } else {
642
48.3k
          if (yych <= 't') goto yy91;
643
47.3k
          if (yych <= 'u') goto yy93;
644
47.3k
        }
645
48.7k
      }
646
49.7k
    }
647
1.18k
yy81:
648
1.18k
    {
649
1.18k
    s->errcode = PHP_JSON_ERROR_SYNTAX;
650
1.18k
    return PHP_JSON_T_ERROR;
651
54.6k
  }
652
40
yy82:
653
40
    ++YYCURSOR;
654
442
yy83:
655
442
    {
656
442
    if (s->options & (PHP_JSON_INVALID_UTF8_IGNORE | PHP_JSON_INVALID_UTF8_SUBSTITUTE)) {
657
0
      if (s->options & PHP_JSON_INVALID_UTF8_SUBSTITUTE) {
658
0
        if (s->utf8_invalid_count > INT_MAX - 2) {
659
0
          s->errcode = PHP_JSON_ERROR_UTF8;
660
0
          return PHP_JSON_T_ERROR;
661
0
        }
662
0
        s->utf8_invalid_count += 2;
663
0
      } else {
664
0
        s->utf8_invalid_count--;
665
0
      }
666
0
      s->utf8_invalid = 1;
667
0
      PHP_JSON_CONDITION_GOTO(STR_P1);
668
0
    }
669
442
    s->errcode = PHP_JSON_ERROR_UTF8;
670
442
    return PHP_JSON_T_ERROR;
671
442
  }
672
274
yy84:
673
274
    yych = *++YYCURSOR;
674
274
    if (yych <= 0x7F) goto yy83;
675
261
    if (yych <= 0xBF) goto yy76;
676
17
    goto yy83;
677
324
yy85:
678
324
    yyaccept = 1;
679
324
    yych = *(YYMARKER = ++YYCURSOR);
680
324
    if (yych <= 0x9F) goto yy83;
681
299
    if (yych <= 0xBF) goto yy95;
682
7
    goto yy83;
683
573
yy86:
684
573
    yyaccept = 1;
685
573
    yych = *(YYMARKER = ++YYCURSOR);
686
573
    if (yych <= 0x7F) goto yy83;
687
535
    if (yych <= 0xBF) goto yy95;
688
15
    goto yy83;
689
232
yy87:
690
232
    yyaccept = 1;
691
232
    yych = *(YYMARKER = ++YYCURSOR);
692
232
    if (yych <= 0x7F) goto yy83;
693
229
    if (yych <= 0x9F) goto yy95;
694
19
    goto yy83;
695
414
yy88:
696
414
    yyaccept = 1;
697
414
    yych = *(YYMARKER = ++YYCURSOR);
698
414
    if (yych <= 0x8F) goto yy83;
699
395
    if (yych <= 0xBF) goto yy96;
700
7
    goto yy83;
701
321
yy89:
702
321
    yyaccept = 1;
703
321
    yych = *(YYMARKER = ++YYCURSOR);
704
321
    if (yych <= 0x7F) goto yy83;
705
314
    if (yych <= 0xBF) goto yy96;
706
15
    goto yy83;
707
264
yy90:
708
264
    yyaccept = 1;
709
264
    yych = *(YYMARKER = ++YYCURSOR);
710
264
    if (yych <= 0x7F) goto yy83;
711
259
    if (yych <= 0x8F) goto yy96;
712
25
    goto yy83;
713
7.24k
yy91:
714
7.24k
    ++YYCURSOR;
715
7.24k
    {
716
7.24k
    s->str_esc++;
717
7.24k
    PHP_JSON_CONDITION_GOTO(STR_P1);
718
259
  }
719
47.3k
yy93:
720
47.3k
    yych = *++YYCURSOR;
721
47.3k
    if (yych <= 'D') {
722
44.0k
      if (yych <= '9') {
723
37.6k
        if (yych <= '/') goto yy94;
724
37.6k
        if (yych <= '0') goto yy97;
725
3.23k
        goto yy98;
726
37.6k
      } else {
727
6.42k
        if (yych <= '@') goto yy94;
728
6.41k
        if (yych <= 'C') goto yy98;
729
4.38k
        goto yy99;
730
6.41k
      }
731
44.0k
    } else {
732
3.25k
      if (yych <= 'c') {
733
817
        if (yych <= 'F') goto yy98;
734
467
        if (yych >= 'a') goto yy98;
735
2.43k
      } else {
736
2.43k
        if (yych <= 'd') goto yy99;
737
526
        if (yych <= 'f') goto yy98;
738
526
      }
739
3.25k
    }
740
1.49k
yy94:
741
1.49k
    YYCURSOR = YYMARKER;
742
1.49k
    if (yyaccept <= 1) {
743
1.27k
      if (yyaccept == 0) {
744
1.08k
        goto yy81;
745
1.08k
      } else {
746
187
        goto yy83;
747
187
      }
748
1.27k
    } else {
749
219
      goto yy117;
750
219
    }
751
1.85k
yy95:
752
1.85k
    yych = *++YYCURSOR;
753
1.85k
    if (yych <= 0x7F) goto yy94;
754
1.77k
    if (yych <= 0xBF) goto yy76;
755
15
    goto yy94;
756
921
yy96:
757
921
    yych = *++YYCURSOR;
758
921
    if (yych <= 0x7F) goto yy94;
759
847
    if (yych <= 0xBF) goto yy95;
760
13
    goto yy94;
761
34.3k
yy97:
762
34.3k
    yych = *++YYCURSOR;
763
34.3k
    if (yych <= '9') {
764
33.4k
      if (yych <= '/') goto yy94;
765
33.4k
      if (yych <= '0') goto yy100;
766
7.01k
      if (yych <= '7') goto yy101;
767
2.20k
      goto yy102;
768
7.01k
    } else {
769
943
      if (yych <= 'F') {
770
627
        if (yych <= '@') goto yy94;
771
618
        goto yy102;
772
627
      } else {
773
316
        if (yych <= '`') goto yy94;
774
307
        if (yych <= 'f') goto yy102;
775
17
        goto yy94;
776
307
      }
777
943
    }
778
6.58k
yy98:
779
6.58k
    yych = *++YYCURSOR;
780
6.58k
    if (yych <= '@') {
781
5.22k
      if (yych <= '/') goto yy94;
782
5.13k
      if (yych <= '9') goto yy102;
783
11
      goto yy94;
784
5.13k
    } else {
785
1.35k
      if (yych <= 'F') goto yy102;
786
846
      if (yych <= '`') goto yy94;
787
837
      if (yych <= 'f') goto yy102;
788
13
      goto yy94;
789
837
    }
790
6.29k
yy99:
791
6.29k
    yych = *++YYCURSOR;
792
6.29k
    if (yych <= 'B') {
793
4.61k
      if (yych <= '7') {
794
829
        if (yych <= '/') goto yy94;
795
796
        goto yy102;
796
3.79k
      } else {
797
3.79k
        if (yych <= '9') goto yy103;
798
3.11k
        if (yych <= '@') goto yy94;
799
3.09k
        goto yy103;
800
3.11k
      }
801
4.61k
    } else {
802
1.67k
      if (yych <= '`') {
803
93
        if (yych <= 'F') goto yy104;
804
15
        goto yy94;
805
1.58k
      } else {
806
1.58k
        if (yych <= 'b') goto yy103;
807
78
        if (yych <= 'f') goto yy104;
808
23
        goto yy94;
809
78
      }
810
1.67k
    }
811
26.4k
yy100:
812
26.4k
    yych = *++YYCURSOR;
813
26.4k
    if (yych <= '@') {
814
22.3k
      if (yych <= '/') goto yy94;
815
22.3k
      if (yych <= '7') goto yy105;
816
5.12k
      if (yych <= '9') goto yy106;
817
9
      goto yy94;
818
5.12k
    } else {
819
4.08k
      if (yych <= 'F') goto yy106;
820
3.23k
      if (yych <= '`') goto yy94;
821
3.23k
      if (yych <= 'f') goto yy106;
822
27
      goto yy94;
823
3.23k
    }
824
4.80k
yy101:
825
4.80k
    yych = *++YYCURSOR;
826
4.80k
    if (yych <= '@') {
827
1.70k
      if (yych <= '/') goto yy94;
828
1.68k
      if (yych <= '9') goto yy106;
829
5
      goto yy94;
830
3.10k
    } else {
831
3.10k
      if (yych <= 'F') goto yy106;
832
951
      if (yych <= '`') goto yy94;
833
942
      if (yych <= 'f') goto yy106;
834
13
      goto yy94;
835
942
    }
836
10.3k
yy102:
837
10.3k
    yych = *++YYCURSOR;
838
10.3k
    if (yych <= '@') {
839
6.75k
      if (yych <= '/') goto yy94;
840
6.64k
      if (yych <= '9') goto yy107;
841
7
      goto yy94;
842
6.64k
    } else {
843
3.61k
      if (yych <= 'F') goto yy107;
844
2.26k
      if (yych <= '`') goto yy94;
845
2.25k
      if (yych <= 'f') goto yy107;
846
15
      goto yy94;
847
2.25k
    }
848
5.28k
yy103:
849
5.28k
    yych = *++YYCURSOR;
850
5.28k
    if (yych <= '@') {
851
886
      if (yych <= '/') goto yy94;
852
842
      if (yych <= '9') goto yy108;
853
3
      goto yy94;
854
4.39k
    } else {
855
4.39k
      if (yych <= 'F') goto yy108;
856
1.31k
      if (yych <= '`') goto yy94;
857
1.30k
      if (yych <= 'f') goto yy108;
858
23
      goto yy94;
859
1.30k
    }
860
133
yy104:
861
133
    yych = *++YYCURSOR;
862
133
    if (yych <= '@') {
863
61
      if (yych <= '/') goto yy94;
864
29
      if (yych <= '9') goto yy109;
865
3
      goto yy94;
866
72
    } else {
867
72
      if (yych <= 'F') goto yy109;
868
47
      if (yych <= '`') goto yy94;
869
44
      if (yych <= 'f') goto yy109;
870
15
      goto yy94;
871
44
    }
872
17.2k
yy105:
873
17.2k
    yych = *++YYCURSOR;
874
17.2k
    if (yych <= '@') {
875
4.14k
      if (yych <= '/') goto yy94;
876
4.12k
      if (yych <= '9') goto yy110;
877
3
      goto yy94;
878
13.0k
    } else {
879
13.0k
      if (yych <= 'F') goto yy110;
880
1.45k
      if (yych <= '`') goto yy94;
881
1.44k
      if (yych <= 'f') goto yy110;
882
17
      goto yy94;
883
1.44k
    }
884
13.9k
yy106:
885
13.9k
    yych = *++YYCURSOR;
886
13.9k
    if (yych <= '@') {
887
3.57k
      if (yych <= '/') goto yy94;
888
3.47k
      if (yych <= '9') goto yy112;
889
5
      goto yy94;
890
10.3k
    } else {
891
10.3k
      if (yych <= 'F') goto yy112;
892
4.41k
      if (yych <= '`') goto yy94;
893
4.40k
      if (yych <= 'f') goto yy112;
894
23
      goto yy94;
895
4.40k
    }
896
10.2k
yy107:
897
10.2k
    yych = *++YYCURSOR;
898
10.2k
    if (yych <= '@') {
899
4.11k
      if (yych <= '/') goto yy94;
900
4.06k
      if (yych <= '9') goto yy114;
901
7
      goto yy94;
902
6.11k
    } else {
903
6.11k
      if (yych <= 'F') goto yy114;
904
2.13k
      if (yych <= '`') goto yy94;
905
2.13k
      if (yych <= 'f') goto yy114;
906
17
      goto yy94;
907
2.13k
    }
908
5.20k
yy108:
909
5.20k
    yych = *++YYCURSOR;
910
5.20k
    if (yych <= '@') {
911
730
      if (yych <= '/') goto yy94;
912
682
      if (yych <= '9') goto yy116;
913
7
      goto yy94;
914
4.47k
    } else {
915
4.47k
      if (yych <= 'F') goto yy116;
916
889
      if (yych <= '`') goto yy94;
917
882
      if (yych <= 'f') goto yy116;
918
15
      goto yy94;
919
882
    }
920
80
yy109:
921
80
    yych = *++YYCURSOR;
922
80
    if (yych <= '@') {
923
41
      if (yych <= '/') goto yy94;
924
8
      if (yych <= '9') goto yy118;
925
3
      goto yy94;
926
39
    } else {
927
39
      if (yych <= 'F') goto yy118;
928
35
      if (yych <= '`') goto yy94;
929
24
      if (yych <= 'f') goto yy118;
930
17
      goto yy94;
931
24
    }
932
17.1k
yy110:
933
17.1k
    ++YYCURSOR;
934
17.1k
    {
935
17.1k
    s->str_esc += 5;
936
17.1k
    PHP_JSON_CONDITION_GOTO(STR_P1);
937
80
  }
938
13.7k
yy112:
939
13.7k
    ++YYCURSOR;
940
13.7k
    {
941
13.7k
    s->str_esc += 4;
942
13.7k
    PHP_JSON_CONDITION_GOTO(STR_P1);
943
80
  }
944
10.1k
yy114:
945
10.1k
    ++YYCURSOR;
946
10.1k
    {
947
10.1k
    s->str_esc += 3;
948
10.1k
    PHP_JSON_CONDITION_GOTO(STR_P1);
949
80
  }
950
5.12k
yy116:
951
5.12k
    yyaccept = 2;
952
5.12k
    yych = *(YYMARKER = ++YYCURSOR);
953
5.12k
    if (yych == '\\') goto yy119;
954
303
yy117:
955
303
    {
956
303
    s->errcode = PHP_JSON_ERROR_UTF16;
957
303
    return PHP_JSON_T_ERROR;
958
5.12k
  }
959
16
yy118:
960
16
    ++YYCURSOR;
961
16
    goto yy117;
962
5.05k
yy119:
963
5.05k
    yych = *++YYCURSOR;
964
5.05k
    if (yych != 'u') goto yy94;
965
5.03k
    yych = *++YYCURSOR;
966
5.03k
    if (yych == 'D') goto yy121;
967
896
    if (yych != 'd') goto yy94;
968
5.02k
yy121:
969
5.02k
    yych = *++YYCURSOR;
970
5.02k
    if (yych <= 'B') goto yy94;
971
5.00k
    if (yych <= 'F') goto yy122;
972
1.34k
    if (yych <= 'b') goto yy94;
973
1.33k
    if (yych >= 'g') goto yy94;
974
4.98k
yy122:
975
4.98k
    yych = *++YYCURSOR;
976
4.98k
    if (yych <= '@') {
977
828
      if (yych <= '/') goto yy94;
978
795
      if (yych >= ':') goto yy94;
979
4.15k
    } else {
980
4.15k
      if (yych <= 'F') goto yy123;
981
1.09k
      if (yych <= '`') goto yy94;
982
1.08k
      if (yych >= 'g') goto yy94;
983
1.08k
    }
984
4.92k
yy123:
985
4.92k
    yych = *++YYCURSOR;
986
4.92k
    if (yych <= '@') {
987
931
      if (yych <= '/') goto yy94;
988
879
      if (yych >= ':') goto yy94;
989
3.98k
    } else {
990
3.98k
      if (yych <= 'F') goto yy124;
991
1.04k
      if (yych <= '`') goto yy94;
992
1.03k
      if (yych >= 'g') goto yy94;
993
1.03k
    }
994
4.83k
yy124:
995
4.83k
    ++YYCURSOR;
996
4.83k
    {
997
4.83k
    s->str_esc += 8;
998
4.83k
    PHP_JSON_CONDITION_GOTO(STR_P1);
999
4.92k
  }
1000
/* *********************************** */
1001
0
yyc_STR_P2_BIN:
1002
0
    yych = *YYCURSOR;
1003
0
    if (yych <= 0xDF) {
1004
0
      if (yych <= '[') {
1005
0
        if (yych == '"') goto yy130;
1006
0
      } else {
1007
0
        if (yych <= '\\') goto yy132;
1008
0
        if (yych <= 0x7F) goto yy128;
1009
0
        if (yych <= 0xC1) goto yy134;
1010
0
        goto yy136;
1011
0
      }
1012
0
    } else {
1013
0
      if (yych <= 0xEF) {
1014
0
        if (yych <= 0xE0) goto yy137;
1015
0
        if (yych == 0xED) goto yy139;
1016
0
        goto yy138;
1017
0
      } else {
1018
0
        if (yych <= 0xF0) goto yy140;
1019
0
        if (yych <= 0xF3) goto yy141;
1020
0
        if (yych <= 0xF4) goto yy142;
1021
0
        goto yy134;
1022
0
      }
1023
0
    }
1024
0
yy128:
1025
0
    ++YYCURSOR;
1026
0
    { PHP_JSON_CONDITION_GOTO(STR_P2_BIN); }
1027
0
yy130:
1028
0
    ++YYCURSOR;
1029
0
    YYSETCONDITION(yycJS);
1030
0
    {
1031
0
    PHP_JSON_SCANNER_COPY_ESC();
1032
0
    return PHP_JSON_T_STRING;
1033
0
  }
1034
0
yy132:
1035
0
    yyaccept = 0;
1036
0
    yych = *(YYMARKER = ++YYCURSOR);
1037
0
    if (yych == 'u') goto yy143;
1038
0
yy133:
1039
0
    {
1040
0
    unsigned char esc;
1041
0
    PHP_JSON_SCANNER_COPY_ESC();
1042
0
    switch (*s->cursor) {
1043
0
      case 'b':
1044
0
        esc = '\b';
1045
0
        break;
1046
0
      case 'f':
1047
0
        esc = '\f';       break;
1048
0
      case 'n':
1049
0
        esc = '\n';
1050
0
        break;
1051
0
      case 'r':
1052
0
        esc = '\r';
1053
0
        break;
1054
0
      case 't':
1055
0
        esc = '\t';
1056
0
        break;
1057
0
      case '\\':
1058
0
      case '/':
1059
0
      case '"':
1060
0
        esc = *s->cursor;
1061
0
        break;
1062
0
      default:
1063
0
        s->errcode = PHP_JSON_ERROR_SYNTAX;
1064
0
        return PHP_JSON_T_ERROR;
1065
0
    }
1066
0
    *(s->pstr++) = esc;
1067
0
    ++YYCURSOR;
1068
0
    s->str_start = s->cursor;
1069
0
    PHP_JSON_CONDITION_GOTO_STR_P2();
1070
0
  }
1071
0
yy134:
1072
0
    ++YYCURSOR;
1073
0
yy135:
1074
0
    {
1075
0
    if (s->utf8_invalid) {
1076
0
      PHP_JSON_SCANNER_COPY_ESC();
1077
0
      if (s->options & PHP_JSON_INVALID_UTF8_SUBSTITUTE) {
1078
0
        *(s->pstr++) = (unsigned char) (0xe0 | (0xfffd >> 12));
1079
0
        *(s->pstr++) = (unsigned char) (0x80 | ((0xfffd >> 6) & 0x3f));
1080
0
        *(s->pstr++) = (unsigned char) (0x80 | (0xfffd & 0x3f));
1081
0
      }
1082
0
      s->str_start = s->cursor;
1083
0
    }
1084
0
    PHP_JSON_CONDITION_GOTO(STR_P2_BIN);
1085
0
  }
1086
0
yy136:
1087
0
    yych = *++YYCURSOR;
1088
0
    if (yych <= 0x7F) goto yy135;
1089
0
    if (yych <= 0xBF) goto yy128;
1090
0
    goto yy135;
1091
0
yy137:
1092
0
    yyaccept = 1;
1093
0
    yych = *(YYMARKER = ++YYCURSOR);
1094
0
    if (yych <= 0x9F) goto yy135;
1095
0
    if (yych <= 0xBF) goto yy145;
1096
0
    goto yy135;
1097
0
yy138:
1098
0
    yyaccept = 1;
1099
0
    yych = *(YYMARKER = ++YYCURSOR);
1100
0
    if (yych <= 0x7F) goto yy135;
1101
0
    if (yych <= 0xBF) goto yy145;
1102
0
    goto yy135;
1103
0
yy139:
1104
0
    yyaccept = 1;
1105
0
    yych = *(YYMARKER = ++YYCURSOR);
1106
0
    if (yych <= 0x7F) goto yy135;
1107
0
    if (yych <= 0x9F) goto yy145;
1108
0
    goto yy135;
1109
0
yy140:
1110
0
    yyaccept = 1;
1111
0
    yych = *(YYMARKER = ++YYCURSOR);
1112
0
    if (yych <= 0x8F) goto yy135;
1113
0
    if (yych <= 0xBF) goto yy146;
1114
0
    goto yy135;
1115
0
yy141:
1116
0
    yyaccept = 1;
1117
0
    yych = *(YYMARKER = ++YYCURSOR);
1118
0
    if (yych <= 0x7F) goto yy135;
1119
0
    if (yych <= 0xBF) goto yy146;
1120
0
    goto yy135;
1121
0
yy142:
1122
0
    yyaccept = 1;
1123
0
    yych = *(YYMARKER = ++YYCURSOR);
1124
0
    if (yych <= 0x7F) goto yy135;
1125
0
    if (yych <= 0x8F) goto yy146;
1126
0
    goto yy135;
1127
0
yy143:
1128
0
    yych = *++YYCURSOR;
1129
0
    if (yych <= 'D') {
1130
0
      if (yych <= '9') {
1131
0
        if (yych <= '/') goto yy144;
1132
0
        if (yych <= '0') goto yy147;
1133
0
        goto yy148;
1134
0
      } else {
1135
0
        if (yych <= '@') goto yy144;
1136
0
        if (yych <= 'C') goto yy148;
1137
0
        goto yy149;
1138
0
      }
1139
0
    } else {
1140
0
      if (yych <= 'c') {
1141
0
        if (yych <= 'F') goto yy148;
1142
0
        if (yych >= 'a') goto yy148;
1143
0
      } else {
1144
0
        if (yych <= 'd') goto yy149;
1145
0
        if (yych <= 'f') goto yy148;
1146
0
      }
1147
0
    }
1148
0
yy144:
1149
0
    YYCURSOR = YYMARKER;
1150
0
    if (yyaccept == 0) {
1151
0
      goto yy133;
1152
0
    } else {
1153
0
      goto yy135;
1154
0
    }
1155
0
yy145:
1156
0
    yych = *++YYCURSOR;
1157
0
    if (yych <= 0x7F) goto yy144;
1158
0
    if (yych <= 0xBF) goto yy128;
1159
0
    goto yy144;
1160
0
yy146:
1161
0
    yych = *++YYCURSOR;
1162
0
    if (yych <= 0x7F) goto yy144;
1163
0
    if (yych <= 0xBF) goto yy145;
1164
0
    goto yy144;
1165
0
yy147:
1166
0
    yych = *++YYCURSOR;
1167
0
    if (yych <= '9') {
1168
0
      if (yych <= '/') goto yy144;
1169
0
      if (yych <= '0') goto yy150;
1170
0
      if (yych <= '7') goto yy151;
1171
0
      goto yy152;
1172
0
    } else {
1173
0
      if (yych <= 'F') {
1174
0
        if (yych <= '@') goto yy144;
1175
0
        goto yy152;
1176
0
      } else {
1177
0
        if (yych <= '`') goto yy144;
1178
0
        if (yych <= 'f') goto yy152;
1179
0
        goto yy144;
1180
0
      }
1181
0
    }
1182
0
yy148:
1183
0
    yych = *++YYCURSOR;
1184
0
    if (yych <= '@') {
1185
0
      if (yych <= '/') goto yy144;
1186
0
      if (yych <= '9') goto yy152;
1187
0
      goto yy144;
1188
0
    } else {
1189
0
      if (yych <= 'F') goto yy152;
1190
0
      if (yych <= '`') goto yy144;
1191
0
      if (yych <= 'f') goto yy152;
1192
0
      goto yy144;
1193
0
    }
1194
0
yy149:
1195
0
    yych = *++YYCURSOR;
1196
0
    if (yych <= '@') {
1197
0
      if (yych <= '/') goto yy144;
1198
0
      if (yych <= '7') goto yy152;
1199
0
      if (yych <= '9') goto yy153;
1200
0
      goto yy144;
1201
0
    } else {
1202
0
      if (yych <= 'B') goto yy153;
1203
0
      if (yych <= '`') goto yy144;
1204
0
      if (yych <= 'b') goto yy153;
1205
0
      goto yy144;
1206
0
    }
1207
0
yy150:
1208
0
    yych = *++YYCURSOR;
1209
0
    if (yych <= '@') {
1210
0
      if (yych <= '/') goto yy144;
1211
0
      if (yych <= '7') goto yy154;
1212
0
      if (yych <= '9') goto yy155;
1213
0
      goto yy144;
1214
0
    } else {
1215
0
      if (yych <= 'F') goto yy155;
1216
0
      if (yych <= '`') goto yy144;
1217
0
      if (yych <= 'f') goto yy155;
1218
0
      goto yy144;
1219
0
    }
1220
0
yy151:
1221
0
    yych = *++YYCURSOR;
1222
0
    if (yych <= '@') {
1223
0
      if (yych <= '/') goto yy144;
1224
0
      if (yych <= '9') goto yy155;
1225
0
      goto yy144;
1226
0
    } else {
1227
0
      if (yych <= 'F') goto yy155;
1228
0
      if (yych <= '`') goto yy144;
1229
0
      if (yych <= 'f') goto yy155;
1230
0
      goto yy144;
1231
0
    }
1232
0
yy152:
1233
0
    yych = *++YYCURSOR;
1234
0
    if (yych <= '@') {
1235
0
      if (yych <= '/') goto yy144;
1236
0
      if (yych <= '9') goto yy156;
1237
0
      goto yy144;
1238
0
    } else {
1239
0
      if (yych <= 'F') goto yy156;
1240
0
      if (yych <= '`') goto yy144;
1241
0
      if (yych <= 'f') goto yy156;
1242
0
      goto yy144;
1243
0
    }
1244
0
yy153:
1245
0
    yych = *++YYCURSOR;
1246
0
    if (yych <= '@') {
1247
0
      if (yych <= '/') goto yy144;
1248
0
      if (yych <= '9') goto yy157;
1249
0
      goto yy144;
1250
0
    } else {
1251
0
      if (yych <= 'F') goto yy157;
1252
0
      if (yych <= '`') goto yy144;
1253
0
      if (yych <= 'f') goto yy157;
1254
0
      goto yy144;
1255
0
    }
1256
0
yy154:
1257
0
    yych = *++YYCURSOR;
1258
0
    if (yych <= '@') {
1259
0
      if (yych <= '/') goto yy144;
1260
0
      if (yych <= '9') goto yy158;
1261
0
      goto yy144;
1262
0
    } else {
1263
0
      if (yych <= 'F') goto yy158;
1264
0
      if (yych <= '`') goto yy144;
1265
0
      if (yych <= 'f') goto yy158;
1266
0
      goto yy144;
1267
0
    }
1268
0
yy155:
1269
0
    yych = *++YYCURSOR;
1270
0
    if (yych <= '@') {
1271
0
      if (yych <= '/') goto yy144;
1272
0
      if (yych <= '9') goto yy160;
1273
0
      goto yy144;
1274
0
    } else {
1275
0
      if (yych <= 'F') goto yy160;
1276
0
      if (yych <= '`') goto yy144;
1277
0
      if (yych <= 'f') goto yy160;
1278
0
      goto yy144;
1279
0
    }
1280
0
yy156:
1281
0
    yych = *++YYCURSOR;
1282
0
    if (yych <= '@') {
1283
0
      if (yych <= '/') goto yy144;
1284
0
      if (yych <= '9') goto yy162;
1285
0
      goto yy144;
1286
0
    } else {
1287
0
      if (yych <= 'F') goto yy162;
1288
0
      if (yych <= '`') goto yy144;
1289
0
      if (yych <= 'f') goto yy162;
1290
0
      goto yy144;
1291
0
    }
1292
0
yy157:
1293
0
    yych = *++YYCURSOR;
1294
0
    if (yych <= '@') {
1295
0
      if (yych <= '/') goto yy144;
1296
0
      if (yych <= '9') goto yy164;
1297
0
      goto yy144;
1298
0
    } else {
1299
0
      if (yych <= 'F') goto yy164;
1300
0
      if (yych <= '`') goto yy144;
1301
0
      if (yych <= 'f') goto yy164;
1302
0
      goto yy144;
1303
0
    }
1304
0
yy158:
1305
0
    ++YYCURSOR;
1306
0
    {
1307
0
    int utf16 = php_json_ucs2_to_int(s, 2);
1308
0
    PHP_JSON_SCANNER_COPY_UTF();
1309
0
    *(s->pstr++) = (unsigned char) utf16;
1310
0
    s->str_start = s->cursor;
1311
0
    PHP_JSON_CONDITION_GOTO_STR_P2();
1312
0
  }
1313
0
yy160:
1314
0
    ++YYCURSOR;
1315
0
    {
1316
0
    int utf16 = php_json_ucs2_to_int(s, 3);
1317
0
    PHP_JSON_SCANNER_COPY_UTF();
1318
0
    *(s->pstr++) = (unsigned char) (0xc0 | (utf16 >> 6));
1319
0
    *(s->pstr++) = (unsigned char) (0x80 | (utf16 & 0x3f));
1320
0
    s->str_start = s->cursor;
1321
0
    PHP_JSON_CONDITION_GOTO_STR_P2();
1322
0
  }
1323
0
yy162:
1324
0
    ++YYCURSOR;
1325
0
    {
1326
0
    int utf16 = php_json_ucs2_to_int(s, 4);
1327
0
    PHP_JSON_SCANNER_COPY_UTF();
1328
0
    *(s->pstr++) = (unsigned char) (0xe0 | (utf16 >> 12));
1329
0
    *(s->pstr++) = (unsigned char) (0x80 | ((utf16 >> 6) & 0x3f));
1330
0
    *(s->pstr++) = (unsigned char) (0x80 | (utf16 & 0x3f));
1331
0
    s->str_start = s->cursor;
1332
0
    PHP_JSON_CONDITION_GOTO_STR_P2();
1333
0
  }
1334
0
yy164:
1335
0
    yych = *++YYCURSOR;
1336
0
    if (yych != '\\') goto yy144;
1337
0
    yych = *++YYCURSOR;
1338
0
    if (yych != 'u') goto yy144;
1339
0
    yych = *++YYCURSOR;
1340
0
    if (yych == 'D') goto yy167;
1341
0
    if (yych != 'd') goto yy144;
1342
0
yy167:
1343
0
    yych = *++YYCURSOR;
1344
0
    if (yych <= 'B') goto yy144;
1345
0
    if (yych <= 'F') goto yy168;
1346
0
    if (yych <= 'b') goto yy144;
1347
0
    if (yych >= 'g') goto yy144;
1348
0
yy168:
1349
0
    yych = *++YYCURSOR;
1350
0
    if (yych <= '@') {
1351
0
      if (yych <= '/') goto yy144;
1352
0
      if (yych >= ':') goto yy144;
1353
0
    } else {
1354
0
      if (yych <= 'F') goto yy169;
1355
0
      if (yych <= '`') goto yy144;
1356
0
      if (yych >= 'g') goto yy144;
1357
0
    }
1358
0
yy169:
1359
0
    yych = *++YYCURSOR;
1360
0
    if (yych <= '@') {
1361
0
      if (yych <= '/') goto yy144;
1362
0
      if (yych >= ':') goto yy144;
1363
0
    } else {
1364
0
      if (yych <= 'F') goto yy170;
1365
0
      if (yych <= '`') goto yy144;
1366
0
      if (yych >= 'g') goto yy144;
1367
0
    }
1368
0
yy170:
1369
0
    ++YYCURSOR;
1370
0
    {
1371
0
    int utf32, utf16_hi, utf16_lo;
1372
0
    utf16_hi = php_json_ucs2_to_int(s, 4);
1373
0
    utf16_lo = php_json_ucs2_to_int_ex(s, 4, 7);
1374
0
    utf32 = ((utf16_lo & 0x3FF) << 10) + (utf16_hi & 0x3FF) + 0x10000;
1375
0
    PHP_JSON_SCANNER_COPY_UTF_SP();
1376
0
    *(s->pstr++) = (unsigned char) (0xf0 | (utf32 >> 18));
1377
0
    *(s->pstr++) = (unsigned char) (0x80 | ((utf32 >> 12) & 0x3f));
1378
0
    *(s->pstr++) = (unsigned char) (0x80 | ((utf32 >> 6) & 0x3f));
1379
0
    *(s->pstr++) = (unsigned char) (0x80 | (utf32 & 0x3f));
1380
0
    s->str_start = s->cursor;
1381
0
    PHP_JSON_CONDITION_GOTO_STR_P2();
1382
0
  }
1383
/* *********************************** */
1384
12.4M
yyc_STR_P2_UTF:
1385
12.4M
    yych = *YYCURSOR;
1386
12.4M
    if (yych == '"') goto yy176;
1387
12.4M
    if (yych == '\\') goto yy178;
1388
12.4M
    ++YYCURSOR;
1389
12.4M
    { PHP_JSON_CONDITION_GOTO(STR_P2_UTF); }
1390
3.23k
yy176:
1391
3.23k
    ++YYCURSOR;
1392
3.23k
    YYSETCONDITION(yycJS);
1393
3.23k
    {
1394
3.23k
    PHP_JSON_SCANNER_COPY_ESC();
1395
3.23k
    return PHP_JSON_T_STRING;
1396
12.4M
  }
1397
49.3k
yy178:
1398
49.3k
    yych = *(YYMARKER = ++YYCURSOR);
1399
49.3k
    if (yych == 'u') goto yy180;
1400
6.09k
yy179:
1401
6.09k
    {
1402
6.09k
    unsigned char esc;
1403
6.09k
    PHP_JSON_SCANNER_COPY_ESC();
1404
6.09k
    switch (*s->cursor) {
1405
252
      case 'b':
1406
252
        esc = '\b';
1407
252
        break;
1408
525
      case 'f':
1409
525
        esc = '\f';       break;
1410
325
      case 'n':
1411
325
        esc = '\n';
1412
325
        break;
1413
246
      case 'r':
1414
246
        esc = '\r';
1415
246
        break;
1416
805
      case 't':
1417
805
        esc = '\t';
1418
805
        break;
1419
3.23k
      case '\\':
1420
3.68k
      case '/':
1421
3.93k
      case '"':
1422
3.93k
        esc = *s->cursor;
1423
3.93k
        break;
1424
0
      default:
1425
0
        s->errcode = PHP_JSON_ERROR_SYNTAX;
1426
0
        return PHP_JSON_T_ERROR;
1427
6.09k
    }
1428
6.09k
    *(s->pstr++) = esc;
1429
6.09k
    ++YYCURSOR;
1430
6.09k
    s->str_start = s->cursor;
1431
6.09k
    PHP_JSON_CONDITION_GOTO_STR_P2();
1432
6.09k
  }
1433
43.2k
yy180:
1434
43.2k
    yych = *++YYCURSOR;
1435
43.2k
    if (yych <= 'D') {
1436
41.6k
      if (yych <= '9') {
1437
36.2k
        if (yych <= '/') goto yy181;
1438
36.2k
        if (yych <= '0') goto yy182;
1439
3.03k
        goto yy183;
1440
36.2k
      } else {
1441
5.41k
        if (yych <= '@') goto yy181;
1442
5.41k
        if (yych <= 'C') goto yy183;
1443
3.52k
        goto yy184;
1444
5.41k
      }
1445
41.6k
    } else {
1446
1.58k
      if (yych <= 'c') {
1447
420
        if (yych <= 'F') goto yy183;
1448
202
        if (yych >= 'a') goto yy183;
1449
1.16k
      } else {
1450
1.16k
        if (yych <= 'd') goto yy184;
1451
412
        if (yych <= 'f') goto yy183;
1452
412
      }
1453
1.58k
    }
1454
0
yy181:
1455
0
    YYCURSOR = YYMARKER;
1456
0
    goto yy179;
1457
33.1k
yy182:
1458
33.1k
    yych = *++YYCURSOR;
1459
33.1k
    if (yych <= '9') {
1460
32.4k
      if (yych <= '/') goto yy181;
1461
32.4k
      if (yych <= '0') goto yy185;
1462
6.44k
      if (yych <= '7') goto yy186;
1463
1.97k
      goto yy187;
1464
6.44k
    } else {
1465
774
      if (yych <= 'F') {
1466
568
        if (yych <= '@') goto yy181;
1467
568
        goto yy187;
1468
568
      } else {
1469
206
        if (yych <= '`') goto yy181;
1470
206
        if (yych <= 'f') goto yy187;
1471
0
        goto yy181;
1472
206
      }
1473
774
    }
1474
5.75k
yy183:
1475
5.75k
    yych = *++YYCURSOR;
1476
5.75k
    if (yych <= '@') {
1477
4.88k
      if (yych <= '/') goto yy181;
1478
4.88k
      if (yych <= '9') goto yy187;
1479
0
      goto yy181;
1480
4.88k
    } else {
1481
873
      if (yych <= 'F') goto yy187;
1482
528
      if (yych <= '`') goto yy181;
1483
528
      if (yych <= 'f') goto yy187;
1484
0
      goto yy181;
1485
528
    }
1486
4.28k
yy184:
1487
4.28k
    yych = *++YYCURSOR;
1488
4.28k
    if (yych <= '@') {
1489
1.12k
      if (yych <= '/') goto yy181;
1490
1.12k
      if (yych <= '7') goto yy187;
1491
490
      if (yych <= '9') goto yy188;
1492
0
      goto yy181;
1493
3.15k
    } else {
1494
3.15k
      if (yych <= 'B') goto yy188;
1495
475
      if (yych <= '`') goto yy181;
1496
475
      if (yych <= 'b') goto yy188;
1497
0
      goto yy181;
1498
475
    }
1499
25.9k
yy185:
1500
25.9k
    yych = *++YYCURSOR;
1501
25.9k
    if (yych <= '@') {
1502
22.1k
      if (yych <= '/') goto yy181;
1503
22.1k
      if (yych <= '7') goto yy189;
1504
5.06k
      if (yych <= '9') goto yy190;
1505
0
      goto yy181;
1506
5.06k
    } else {
1507
3.88k
      if (yych <= 'F') goto yy190;
1508
3.11k
      if (yych <= '`') goto yy181;
1509
3.11k
      if (yych <= 'f') goto yy190;
1510
0
      goto yy181;
1511
3.11k
    }
1512
4.46k
yy186:
1513
4.46k
    yych = *++YYCURSOR;
1514
4.46k
    if (yych <= '@') {
1515
1.56k
      if (yych <= '/') goto yy181;
1516
1.56k
      if (yych <= '9') goto yy190;
1517
0
      goto yy181;
1518
2.90k
    } else {
1519
2.90k
      if (yych <= 'F') goto yy190;
1520
881
      if (yych <= '`') goto yy181;
1521
881
      if (yych <= 'f') goto yy190;
1522
0
      goto yy181;
1523
881
    }
1524
9.13k
yy187:
1525
9.13k
    yych = *++YYCURSOR;
1526
9.13k
    if (yych <= '@') {
1527
5.91k
      if (yych <= '/') goto yy181;
1528
5.91k
      if (yych <= '9') goto yy191;
1529
0
      goto yy181;
1530
5.91k
    } else {
1531
3.21k
      if (yych <= 'F') goto yy191;
1532
2.06k
      if (yych <= '`') goto yy181;
1533
2.06k
      if (yych <= 'f') goto yy191;
1534
0
      goto yy181;
1535
2.06k
    }
1536
3.64k
yy188:
1537
3.64k
    yych = *++YYCURSOR;
1538
3.64k
    if (yych <= '@') {
1539
657
      if (yych <= '/') goto yy181;
1540
657
      if (yych <= '9') goto yy192;
1541
0
      goto yy181;
1542
2.99k
    } else {
1543
2.99k
      if (yych <= 'F') goto yy192;
1544
512
      if (yych <= '`') goto yy181;
1545
512
      if (yych <= 'f') goto yy192;
1546
0
      goto yy181;
1547
512
    }
1548
17.0k
yy189:
1549
17.0k
    yych = *++YYCURSOR;
1550
17.0k
    if (yych <= '@') {
1551
4.08k
      if (yych <= '/') goto yy181;
1552
4.08k
      if (yych <= '9') goto yy193;
1553
0
      goto yy181;
1554
12.9k
    } else {
1555
12.9k
      if (yych <= 'F') goto yy193;
1556
1.40k
      if (yych <= '`') goto yy181;
1557
1.40k
      if (yych <= 'f') goto yy193;
1558
0
      goto yy181;
1559
1.40k
    }
1560
13.4k
yy190:
1561
13.4k
    yych = *++YYCURSOR;
1562
13.4k
    if (yych <= '@') {
1563
3.35k
      if (yych <= '/') goto yy181;
1564
3.35k
      if (yych <= '9') goto yy195;
1565
0
      goto yy181;
1566
10.0k
    } else {
1567
10.0k
      if (yych <= 'F') goto yy195;
1568
4.31k
      if (yych <= '`') goto yy181;
1569
4.31k
      if (yych <= 'f') goto yy195;
1570
0
      goto yy181;
1571
4.31k
    }
1572
9.13k
yy191:
1573
9.13k
    yych = *++YYCURSOR;
1574
9.13k
    if (yych <= '@') {
1575
3.44k
      if (yych <= '/') goto yy181;
1576
3.44k
      if (yych <= '9') goto yy197;
1577
0
      goto yy181;
1578
5.69k
    } else {
1579
5.69k
      if (yych <= 'F') goto yy197;
1580
1.93k
      if (yych <= '`') goto yy181;
1581
1.93k
      if (yych <= 'f') goto yy197;
1582
0
      goto yy181;
1583
1.93k
    }
1584
3.64k
yy192:
1585
3.64k
    yych = *++YYCURSOR;
1586
3.64k
    if (yych <= '@') {
1587
498
      if (yych <= '/') goto yy181;
1588
498
      if (yych <= '9') goto yy199;
1589
0
      goto yy181;
1590
3.15k
    } else {
1591
3.15k
      if (yych <= 'F') goto yy199;
1592
343
      if (yych <= '`') goto yy181;
1593
343
      if (yych <= 'f') goto yy199;
1594
0
      goto yy181;
1595
343
    }
1596
17.0k
yy193:
1597
17.0k
    ++YYCURSOR;
1598
17.0k
    {
1599
17.0k
    int utf16 = php_json_ucs2_to_int(s, 2);
1600
17.0k
    PHP_JSON_SCANNER_COPY_UTF();
1601
17.0k
    *(s->pstr++) = (unsigned char) utf16;
1602
17.0k
    s->str_start = s->cursor;
1603
17.0k
    PHP_JSON_CONDITION_GOTO_STR_P2();
1604
17.0k
  }
1605
13.4k
yy195:
1606
13.4k
    ++YYCURSOR;
1607
13.4k
    {
1608
13.4k
    int utf16 = php_json_ucs2_to_int(s, 3);
1609
13.4k
    PHP_JSON_SCANNER_COPY_UTF();
1610
13.4k
    *(s->pstr++) = (unsigned char) (0xc0 | (utf16 >> 6));
1611
13.4k
    *(s->pstr++) = (unsigned char) (0x80 | (utf16 & 0x3f));
1612
13.4k
    s->str_start = s->cursor;
1613
13.4k
    PHP_JSON_CONDITION_GOTO_STR_P2();
1614
13.4k
  }
1615
9.13k
yy197:
1616
9.13k
    ++YYCURSOR;
1617
9.13k
    {
1618
9.13k
    int utf16 = php_json_ucs2_to_int(s, 4);
1619
9.13k
    PHP_JSON_SCANNER_COPY_UTF();
1620
9.13k
    *(s->pstr++) = (unsigned char) (0xe0 | (utf16 >> 12));
1621
9.13k
    *(s->pstr++) = (unsigned char) (0x80 | ((utf16 >> 6) & 0x3f));
1622
9.13k
    *(s->pstr++) = (unsigned char) (0x80 | (utf16 & 0x3f));
1623
9.13k
    s->str_start = s->cursor;
1624
9.13k
    PHP_JSON_CONDITION_GOTO_STR_P2();
1625
9.13k
  }
1626
3.64k
yy199:
1627
3.64k
    yych = *++YYCURSOR;
1628
3.64k
    if (yych != '\\') goto yy181;
1629
3.64k
    yych = *++YYCURSOR;
1630
3.64k
    if (yych != 'u') goto yy181;
1631
3.64k
    yych = *++YYCURSOR;
1632
3.64k
    if (yych == 'D') goto yy202;
1633
375
    if (yych != 'd') goto yy181;
1634
3.64k
yy202:
1635
3.64k
    yych = *++YYCURSOR;
1636
3.64k
    if (yych <= 'B') goto yy181;
1637
3.64k
    if (yych <= 'F') goto yy203;
1638
590
    if (yych <= 'b') goto yy181;
1639
590
    if (yych >= 'g') goto yy181;
1640
3.64k
yy203:
1641
3.64k
    yych = *++YYCURSOR;
1642
3.64k
    if (yych <= '@') {
1643
617
      if (yych <= '/') goto yy181;
1644
617
      if (yych >= ':') goto yy181;
1645
3.03k
    } else {
1646
3.03k
      if (yych <= 'F') goto yy204;
1647
476
      if (yych <= '`') goto yy181;
1648
476
      if (yych >= 'g') goto yy181;
1649
476
    }
1650
3.64k
yy204:
1651
3.64k
    yych = *++YYCURSOR;
1652
3.64k
    if (yych <= '@') {
1653
725
      if (yych <= '/') goto yy181;
1654
725
      if (yych >= ':') goto yy181;
1655
2.92k
    } else {
1656
2.92k
      if (yych <= 'F') goto yy205;
1657
477
      if (yych <= '`') goto yy181;
1658
477
      if (yych >= 'g') goto yy181;
1659
477
    }
1660
3.64k
yy205:
1661
3.64k
    ++YYCURSOR;
1662
3.64k
    {
1663
3.64k
    int utf32, utf16_hi, utf16_lo;
1664
3.64k
    utf16_hi = php_json_ucs2_to_int(s, 4);
1665
3.64k
    utf16_lo = php_json_ucs2_to_int_ex(s, 4, 7);
1666
3.64k
    utf32 = ((utf16_lo & 0x3FF) << 10) + (utf16_hi & 0x3FF) + 0x10000;
1667
3.64k
    PHP_JSON_SCANNER_COPY_UTF_SP();
1668
3.64k
    *(s->pstr++) = (unsigned char) (0xf0 | (utf32 >> 18));
1669
3.64k
    *(s->pstr++) = (unsigned char) (0x80 | ((utf32 >> 12) & 0x3f));
1670
3.64k
    *(s->pstr++) = (unsigned char) (0x80 | ((utf32 >> 6) & 0x3f));
1671
3.64k
    *(s->pstr++) = (unsigned char) (0x80 | (utf32 & 0x3f));
1672
3.64k
    s->str_start = s->cursor;
1673
3.64k
    PHP_JSON_CONDITION_GOTO_STR_P2();
1674
3.64k
  }
1675
3.64k
  }
1676
1677
1678
3.64k
}