PHP  
 PHP: Test and Code Coverage Analysis
downloads | QA | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | my php.net 
 

LCOV - code coverage report
Current view: top level - ext/json - json_scanner.c (source / functions) Hit Total Coverage
Test: PHP Code Coverage Lines: 713 1250 57.0 %
Date: 2019-05-06 Functions: 6 6 100.0 %
Legend: Lines: hit not hit

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

Generated by: LCOV version 1.10

Generated at Mon, 06 May 2019 17:58:16 +0000 (998 days ago)

Copyright © 2005-2022 The PHP Group
All rights reserved.