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: 712 1254 56.8 %
Date: 2020-09-22 Functions: 6 6 100.0 %
Legend: Lines: hit not hit

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

Generated by: LCOV version 1.10

Generated at Tue, 22 Sep 2020 23:19:46 +0000 (9 hours ago)

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