12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661 |
- #include "php.h"
- #include "php_json_scanner.h"
- #include "php_json_scanner_defs.h"
- #include "php_json_parser.h"
- #include "json_parser.tab.h"
- #define YYCTYPE php_json_ctype
- #define YYCURSOR s->cursor
- #define YYLIMIT s->limit
- #define YYMARKER s->marker
- #define YYCTXMARKER s->ctxmarker
- #define YYGETCONDITION() s->state
- #define YYSETCONDITION(yystate) s->state = yystate
- #define YYFILL(n)
- #define PHP_JSON_CONDITION_SET(condition) YYSETCONDITION(yyc##condition)
- #define PHP_JSON_CONDITION_GOTO(condition) goto yyc_##condition
- #define PHP_JSON_CONDITION_SET_AND_GOTO(condition) \
- PHP_JSON_CONDITION_SET(condition); \
- PHP_JSON_CONDITION_GOTO(condition)
- #define PHP_JSON_CONDITION_GOTO_STR_P2() \
- do { \
- if (s->utf8_invalid) { \
- PHP_JSON_CONDITION_GOTO(STR_P2_BIN); \
- } else { \
- PHP_JSON_CONDITION_GOTO(STR_P2_UTF); \
- } \
- } while(0)
- #define PHP_JSON_SCANNER_COPY_ESC() php_json_scanner_copy_string(s, 0)
- #define PHP_JSON_SCANNER_COPY_UTF() php_json_scanner_copy_string(s, 5)
- #define PHP_JSON_SCANNER_COPY_UTF_SP() php_json_scanner_copy_string(s, 11)
- #define PHP_JSON_INT_MAX_LENGTH (MAX_LENGTH_OF_LONG - 1)
- static void php_json_scanner_copy_string(php_json_scanner *s, int esc_size)
- {
- size_t len = s->cursor - s->str_start - esc_size - 1;
- if (len) {
- memcpy(s->pstr, s->str_start, len);
- s->pstr += len;
- }
- }
- static int php_json_hex_to_int(char code)
- {
- if (code >= '0' && code <= '9') {
- return code - '0';
- } else if (code >= 'A' && code <= 'F') {
- return code - ('A' - 10);
- } else if (code >= 'a' && code <= 'f') {
- return code - ('a' - 10);
- } else {
-
- return -1;
- }
- }
- static int php_json_ucs2_to_int_ex(php_json_scanner *s, int size, int start)
- {
- int i, code = 0;
- php_json_ctype *pc = s->cursor - start;
- for (i = 0; i < size; i++) {
- code |= php_json_hex_to_int(*(pc--)) << (i * 4);
- }
- return code;
- }
- static int php_json_ucs2_to_int(php_json_scanner *s, int size)
- {
- return php_json_ucs2_to_int_ex(s, size, 1);
- }
- void php_json_scanner_init(php_json_scanner *s, char *str, size_t str_len, int options)
- {
- s->cursor = (php_json_ctype *) str;
- s->limit = (php_json_ctype *) str + str_len;
- s->options = options;
- PHP_JSON_CONDITION_SET(JS);
- }
- int php_json_scan(php_json_scanner *s)
- {
- ZVAL_NULL(&s->value);
-
- std:
- s->token = s->cursor;
- {
- YYCTYPE yych;
- unsigned int yyaccept = 0;
- if (YYGETCONDITION() < 2) {
- if (YYGETCONDITION() < 1) {
- goto yyc_JS;
- } else {
- goto yyc_STR_P1;
- }
- } else {
- if (YYGETCONDITION() < 3) {
- goto yyc_STR_P2_BIN;
- } else {
- goto yyc_STR_P2_UTF;
- }
- }
- yyc_JS:
- {
- static const unsigned char yybm[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 64, 0, 0, 0, 64, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 64, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- };
- yych = *YYCURSOR;
- if (yych <= ']') {
- if (yych <= '"') {
- if (yych <= '\f') {
- if (yych <= 0x08) {
- if (yych >= 0x01) goto yy5;
- } else {
- if (yych <= '\t') goto yy7;
- if (yych <= '\n') goto yy10;
- goto yy5;
- }
- } else {
- if (yych <= 0x1F) {
- if (yych <= '\r') goto yy11;
- goto yy5;
- } else {
- if (yych <= ' ') goto yy7;
- if (yych <= '!') goto yy12;
- goto yy14;
- }
- }
- } else {
- if (yych <= '0') {
- if (yych <= ',') {
- if (yych <= '+') goto yy12;
- goto yy16;
- } else {
- if (yych <= '-') goto yy18;
- if (yych <= '/') goto yy12;
- goto yy19;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '9') goto yy21;
- if (yych <= ':') goto yy23;
- goto yy12;
- } else {
- if (yych <= '[') goto yy25;
- if (yych <= '\\') goto yy12;
- goto yy27;
- }
- }
- }
- } else {
- if (yych <= '}') {
- if (yych <= 's') {
- if (yych <= 'f') {
- if (yych <= 'e') goto yy12;
- goto yy29;
- } else {
- if (yych == 'n') goto yy30;
- goto yy12;
- }
- } else {
- if (yych <= 'z') {
- if (yych <= 't') goto yy31;
- goto yy12;
- } else {
- if (yych <= '{') goto yy32;
- if (yych <= '|') goto yy12;
- goto yy34;
- }
- }
- } else {
- if (yych <= 0xEC) {
- if (yych <= 0xC1) {
- if (yych <= 0x7F) goto yy12;
- goto yy36;
- } else {
- if (yych <= 0xDF) goto yy38;
- if (yych <= 0xE0) goto yy39;
- goto yy40;
- }
- } else {
- if (yych <= 0xF0) {
- if (yych <= 0xED) goto yy41;
- if (yych <= 0xEF) goto yy40;
- goto yy42;
- } else {
- if (yych <= 0xF3) goto yy43;
- if (yych <= 0xF4) goto yy44;
- goto yy36;
- }
- }
- }
- }
- ++YYCURSOR;
- {
- if (s->limit < s->cursor) {
- return PHP_JSON_T_EOI;
- } else {
- s->errcode = PHP_JSON_ERROR_CTRL_CHAR;
- return PHP_JSON_T_ERROR;
- }
- }
- yy5:
- ++YYCURSOR;
- {
- s->errcode = PHP_JSON_ERROR_CTRL_CHAR;
- return PHP_JSON_T_ERROR;
- }
- yy7:
- yych = *++YYCURSOR;
- yy8:
- if (yybm[0+yych] & 64) {
- goto yy7;
- }
- yy9:
- { goto std; }
- yy10:
- ++YYCURSOR;
- goto yy9;
- yy11:
- yych = *++YYCURSOR;
- if (yych == '\n') goto yy10;
- goto yy8;
- yy12:
- ++YYCURSOR;
- yy13:
- {
- s->errcode = PHP_JSON_ERROR_SYNTAX;
- return PHP_JSON_T_ERROR;
- }
- yy14:
- ++YYCURSOR;
- {
- s->str_start = s->cursor;
- s->str_esc = 0;
- s->utf8_invalid = 0;
- s->utf8_invalid_count = 0;
- PHP_JSON_CONDITION_SET_AND_GOTO(STR_P1);
- }
- yy16:
- ++YYCURSOR;
- { return ','; }
- yy18:
- yych = *++YYCURSOR;
- if (yych <= '/') goto yy13;
- if (yych <= '0') goto yy19;
- if (yych <= '9') goto yy21;
- goto yy13;
- yy19:
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if (yych <= 'D') {
- if (yych == '.') goto yy45;
- } else {
- if (yych <= 'E') goto yy47;
- if (yych == 'e') goto yy47;
- }
- yy20:
- {
- zend_bool bigint = 0, negative = s->token[0] == '-';
- size_t digits = (size_t) (s->cursor - s->token - negative);
- if (digits >= PHP_JSON_INT_MAX_LENGTH) {
- if (digits == PHP_JSON_INT_MAX_LENGTH) {
- int cmp = strncmp((char *) (s->token + negative), LONG_MIN_DIGITS, PHP_JSON_INT_MAX_LENGTH);
- if (!(cmp < 0 || (cmp == 0 && negative))) {
- bigint = 1;
- }
- } else {
- bigint = 1;
- }
- }
- if (!bigint) {
- ZVAL_LONG(&s->value, ZEND_STRTOL((char *) s->token, NULL, 10));
- return PHP_JSON_T_INT;
- } else if (s->options & PHP_JSON_BIGINT_AS_STRING) {
- ZVAL_STRINGL(&s->value, (char *) s->token, s->cursor - s->token);
- return PHP_JSON_T_STRING;
- } else {
- ZVAL_DOUBLE(&s->value, zend_strtod((char *) s->token, NULL));
- return PHP_JSON_T_DOUBLE;
- }
- }
- yy21:
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if (yybm[0+yych] & 128) {
- goto yy21;
- }
- if (yych <= 'D') {
- if (yych == '.') goto yy45;
- goto yy20;
- } else {
- if (yych <= 'E') goto yy47;
- if (yych == 'e') goto yy47;
- goto yy20;
- }
- yy23:
- ++YYCURSOR;
- { return ':'; }
- yy25:
- ++YYCURSOR;
- { return '['; }
- yy27:
- ++YYCURSOR;
- { return ']'; }
- yy29:
- yyaccept = 1;
- yych = *(YYMARKER = ++YYCURSOR);
- if (yych == 'a') goto yy48;
- goto yy13;
- yy30:
- yyaccept = 1;
- yych = *(YYMARKER = ++YYCURSOR);
- if (yych == 'u') goto yy49;
- goto yy13;
- yy31:
- yyaccept = 1;
- yych = *(YYMARKER = ++YYCURSOR);
- if (yych == 'r') goto yy50;
- goto yy13;
- yy32:
- ++YYCURSOR;
- { return '{'; }
- yy34:
- ++YYCURSOR;
- { return '}'; }
- yy36:
- ++YYCURSOR;
- yy37:
- {
- s->errcode = PHP_JSON_ERROR_UTF8;
- return PHP_JSON_T_ERROR;
- }
- yy38:
- yych = *++YYCURSOR;
- if (yych <= 0x7F) goto yy37;
- if (yych <= 0xBF) goto yy12;
- goto yy37;
- yy39:
- yyaccept = 2;
- yych = *(YYMARKER = ++YYCURSOR);
- if (yych <= 0x9F) goto yy37;
- if (yych <= 0xBF) goto yy51;
- goto yy37;
- yy40:
- yyaccept = 2;
- yych = *(YYMARKER = ++YYCURSOR);
- if (yych <= 0x7F) goto yy37;
- if (yych <= 0xBF) goto yy51;
- goto yy37;
- yy41:
- yyaccept = 2;
- yych = *(YYMARKER = ++YYCURSOR);
- if (yych <= 0x7F) goto yy37;
- if (yych <= 0x9F) goto yy51;
- goto yy37;
- yy42:
- yyaccept = 2;
- yych = *(YYMARKER = ++YYCURSOR);
- if (yych <= 0x8F) goto yy37;
- if (yych <= 0xBF) goto yy52;
- goto yy37;
- yy43:
- yyaccept = 2;
- yych = *(YYMARKER = ++YYCURSOR);
- if (yych <= 0x7F) goto yy37;
- if (yych <= 0xBF) goto yy52;
- goto yy37;
- yy44:
- yyaccept = 2;
- yych = *(YYMARKER = ++YYCURSOR);
- if (yych <= 0x7F) goto yy37;
- if (yych <= 0x8F) goto yy52;
- goto yy37;
- yy45:
- yych = *++YYCURSOR;
- if (yych <= '/') goto yy46;
- if (yych <= '9') goto yy53;
- yy46:
- YYCURSOR = YYMARKER;
- if (yyaccept <= 1) {
- if (yyaccept == 0) {
- goto yy20;
- } else {
- goto yy13;
- }
- } else {
- if (yyaccept == 2) {
- goto yy37;
- } else {
- goto yy55;
- }
- }
- yy47:
- yych = *++YYCURSOR;
- if (yych <= ',') {
- if (yych == '+') goto yy56;
- goto yy46;
- } else {
- if (yych <= '-') goto yy56;
- if (yych <= '/') goto yy46;
- if (yych <= '9') goto yy57;
- goto yy46;
- }
- yy48:
- yych = *++YYCURSOR;
- if (yych == 'l') goto yy59;
- goto yy46;
- yy49:
- yych = *++YYCURSOR;
- if (yych == 'l') goto yy60;
- goto yy46;
- yy50:
- yych = *++YYCURSOR;
- if (yych == 'u') goto yy61;
- goto yy46;
- yy51:
- yych = *++YYCURSOR;
- if (yych <= 0x7F) goto yy46;
- if (yych <= 0xBF) goto yy12;
- goto yy46;
- yy52:
- yych = *++YYCURSOR;
- if (yych <= 0x7F) goto yy46;
- if (yych <= 0xBF) goto yy51;
- goto yy46;
- yy53:
- yyaccept = 3;
- yych = *(YYMARKER = ++YYCURSOR);
- if (yych <= 'D') {
- if (yych <= '/') goto yy55;
- if (yych <= '9') goto yy53;
- } else {
- if (yych <= 'E') goto yy47;
- if (yych == 'e') goto yy47;
- }
- yy55:
- {
- ZVAL_DOUBLE(&s->value, zend_strtod((char *) s->token, NULL));
- return PHP_JSON_T_DOUBLE;
- }
- yy56:
- yych = *++YYCURSOR;
- if (yych <= '/') goto yy46;
- if (yych >= ':') goto yy46;
- yy57:
- yych = *++YYCURSOR;
- if (yych <= '/') goto yy55;
- if (yych <= '9') goto yy57;
- goto yy55;
- yy59:
- yych = *++YYCURSOR;
- if (yych == 's') goto yy62;
- goto yy46;
- yy60:
- yych = *++YYCURSOR;
- if (yych == 'l') goto yy63;
- goto yy46;
- yy61:
- yych = *++YYCURSOR;
- if (yych == 'e') goto yy65;
- goto yy46;
- yy62:
- yych = *++YYCURSOR;
- if (yych == 'e') goto yy67;
- goto yy46;
- yy63:
- ++YYCURSOR;
- {
- ZVAL_NULL(&s->value);
- return PHP_JSON_T_NUL;
- }
- yy65:
- ++YYCURSOR;
- {
- ZVAL_TRUE(&s->value);
- return PHP_JSON_T_TRUE;
- }
- yy67:
- ++YYCURSOR;
- {
- ZVAL_FALSE(&s->value);
- return PHP_JSON_T_FALSE;
- }
- }
- yyc_STR_P1:
- yych = *YYCURSOR;
- if (yych <= 0xDF) {
- if (yych <= '[') {
- if (yych <= 0x1F) goto yy71;
- if (yych == '"') goto yy75;
- goto yy73;
- } else {
- if (yych <= '\\') goto yy77;
- if (yych <= 0x7F) goto yy73;
- if (yych <= 0xC1) goto yy79;
- goto yy81;
- }
- } else {
- if (yych <= 0xEF) {
- if (yych <= 0xE0) goto yy82;
- if (yych == 0xED) goto yy84;
- goto yy83;
- } else {
- if (yych <= 0xF0) goto yy85;
- if (yych <= 0xF3) goto yy86;
- if (yych <= 0xF4) goto yy87;
- goto yy79;
- }
- }
- yy71:
- ++YYCURSOR;
- {
- s->errcode = PHP_JSON_ERROR_CTRL_CHAR;
- return PHP_JSON_T_ERROR;
- }
- yy73:
- ++YYCURSOR;
- { PHP_JSON_CONDITION_GOTO(STR_P1); }
- yy75:
- ++YYCURSOR;
- {
- zend_string *str;
- size_t len = s->cursor - s->str_start - s->str_esc - 1 + s->utf8_invalid_count;
- if (len == 0) {
- PHP_JSON_CONDITION_SET(JS);
- ZVAL_EMPTY_STRING(&s->value);
- return PHP_JSON_T_ESTRING;
- }
- str = zend_string_alloc(len, 0);
- ZSTR_VAL(str)[len] = '\0';
- ZVAL_STR(&s->value, str);
- if (s->str_esc || s->utf8_invalid) {
- s->pstr = (php_json_ctype *) Z_STRVAL(s->value);
- s->cursor = s->str_start;
- PHP_JSON_CONDITION_GOTO_STR_P2();
- } else {
- memcpy(Z_STRVAL(s->value), s->str_start, len);
- PHP_JSON_CONDITION_SET(JS);
- return PHP_JSON_T_STRING;
- }
- }
- yy77:
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if (yych <= 'e') {
- if (yych <= '/') {
- if (yych == '"') goto yy88;
- if (yych >= '/') goto yy88;
- } else {
- if (yych <= '\\') {
- if (yych >= '\\') goto yy88;
- } else {
- if (yych == 'b') goto yy88;
- }
- }
- } else {
- if (yych <= 'q') {
- if (yych <= 'f') goto yy88;
- if (yych == 'n') goto yy88;
- } else {
- if (yych <= 's') {
- if (yych <= 'r') goto yy88;
- } else {
- if (yych <= 't') goto yy88;
- if (yych <= 'u') goto yy90;
- }
- }
- }
- yy78:
- {
- s->errcode = PHP_JSON_ERROR_SYNTAX;
- return PHP_JSON_T_ERROR;
- }
- yy79:
- ++YYCURSOR;
- yy80:
- {
- if (s->options & (PHP_JSON_INVALID_UTF8_IGNORE | PHP_JSON_INVALID_UTF8_SUBSTITUTE)) {
- if (s->options & PHP_JSON_INVALID_UTF8_SUBSTITUTE) {
- if (s->utf8_invalid_count > INT_MAX - 2) {
- s->errcode = PHP_JSON_ERROR_UTF8;
- return PHP_JSON_T_ERROR;
- }
- s->utf8_invalid_count += 2;
- } else {
- s->utf8_invalid_count--;
- }
- s->utf8_invalid = 1;
- PHP_JSON_CONDITION_GOTO(STR_P1);
- }
- s->errcode = PHP_JSON_ERROR_UTF8;
- return PHP_JSON_T_ERROR;
- }
- yy81:
- yych = *++YYCURSOR;
- if (yych <= 0x7F) goto yy80;
- if (yych <= 0xBF) goto yy73;
- goto yy80;
- yy82:
- yyaccept = 1;
- yych = *(YYMARKER = ++YYCURSOR);
- if (yych <= 0x9F) goto yy80;
- if (yych <= 0xBF) goto yy92;
- goto yy80;
- yy83:
- yyaccept = 1;
- yych = *(YYMARKER = ++YYCURSOR);
- if (yych <= 0x7F) goto yy80;
- if (yych <= 0xBF) goto yy92;
- goto yy80;
- yy84:
- yyaccept = 1;
- yych = *(YYMARKER = ++YYCURSOR);
- if (yych <= 0x7F) goto yy80;
- if (yych <= 0x9F) goto yy92;
- goto yy80;
- yy85:
- yyaccept = 1;
- yych = *(YYMARKER = ++YYCURSOR);
- if (yych <= 0x8F) goto yy80;
- if (yych <= 0xBF) goto yy93;
- goto yy80;
- yy86:
- yyaccept = 1;
- yych = *(YYMARKER = ++YYCURSOR);
- if (yych <= 0x7F) goto yy80;
- if (yych <= 0xBF) goto yy93;
- goto yy80;
- yy87:
- yyaccept = 1;
- yych = *(YYMARKER = ++YYCURSOR);
- if (yych <= 0x7F) goto yy80;
- if (yych <= 0x8F) goto yy93;
- goto yy80;
- yy88:
- ++YYCURSOR;
- {
- s->str_esc++;
- PHP_JSON_CONDITION_GOTO(STR_P1);
- }
- yy90:
- yych = *++YYCURSOR;
- if (yych <= 'D') {
- if (yych <= '9') {
- if (yych <= '/') goto yy91;
- if (yych <= '0') goto yy94;
- goto yy95;
- } else {
- if (yych <= '@') goto yy91;
- if (yych <= 'C') goto yy95;
- goto yy96;
- }
- } else {
- if (yych <= 'c') {
- if (yych <= 'F') goto yy95;
- if (yych >= 'a') goto yy95;
- } else {
- if (yych <= 'd') goto yy96;
- if (yych <= 'f') goto yy95;
- }
- }
- yy91:
- YYCURSOR = YYMARKER;
- if (yyaccept <= 1) {
- if (yyaccept == 0) {
- goto yy78;
- } else {
- goto yy80;
- }
- } else {
- goto yy114;
- }
- yy92:
- yych = *++YYCURSOR;
- if (yych <= 0x7F) goto yy91;
- if (yych <= 0xBF) goto yy73;
- goto yy91;
- yy93:
- yych = *++YYCURSOR;
- if (yych <= 0x7F) goto yy91;
- if (yych <= 0xBF) goto yy92;
- goto yy91;
- yy94:
- yych = *++YYCURSOR;
- if (yych <= '9') {
- if (yych <= '/') goto yy91;
- if (yych <= '0') goto yy97;
- if (yych <= '7') goto yy98;
- goto yy99;
- } else {
- if (yych <= 'F') {
- if (yych <= '@') goto yy91;
- goto yy99;
- } else {
- if (yych <= '`') goto yy91;
- if (yych <= 'f') goto yy99;
- goto yy91;
- }
- }
- yy95:
- yych = *++YYCURSOR;
- if (yych <= '@') {
- if (yych <= '/') goto yy91;
- if (yych <= '9') goto yy99;
- goto yy91;
- } else {
- if (yych <= 'F') goto yy99;
- if (yych <= '`') goto yy91;
- if (yych <= 'f') goto yy99;
- goto yy91;
- }
- yy96:
- yych = *++YYCURSOR;
- if (yych <= 'B') {
- if (yych <= '7') {
- if (yych <= '/') goto yy91;
- goto yy99;
- } else {
- if (yych <= '9') goto yy100;
- if (yych <= '@') goto yy91;
- goto yy100;
- }
- } else {
- if (yych <= '`') {
- if (yych <= 'F') goto yy101;
- goto yy91;
- } else {
- if (yych <= 'b') goto yy100;
- if (yych <= 'f') goto yy101;
- goto yy91;
- }
- }
- yy97:
- yych = *++YYCURSOR;
- if (yych <= '@') {
- if (yych <= '/') goto yy91;
- if (yych <= '7') goto yy102;
- if (yych <= '9') goto yy103;
- goto yy91;
- } else {
- if (yych <= 'F') goto yy103;
- if (yych <= '`') goto yy91;
- if (yych <= 'f') goto yy103;
- goto yy91;
- }
- yy98:
- yych = *++YYCURSOR;
- if (yych <= '@') {
- if (yych <= '/') goto yy91;
- if (yych <= '9') goto yy103;
- goto yy91;
- } else {
- if (yych <= 'F') goto yy103;
- if (yych <= '`') goto yy91;
- if (yych <= 'f') goto yy103;
- goto yy91;
- }
- yy99:
- yych = *++YYCURSOR;
- if (yych <= '@') {
- if (yych <= '/') goto yy91;
- if (yych <= '9') goto yy104;
- goto yy91;
- } else {
- if (yych <= 'F') goto yy104;
- if (yych <= '`') goto yy91;
- if (yych <= 'f') goto yy104;
- goto yy91;
- }
- yy100:
- yych = *++YYCURSOR;
- if (yych <= '@') {
- if (yych <= '/') goto yy91;
- if (yych <= '9') goto yy105;
- goto yy91;
- } else {
- if (yych <= 'F') goto yy105;
- if (yych <= '`') goto yy91;
- if (yych <= 'f') goto yy105;
- goto yy91;
- }
- yy101:
- yych = *++YYCURSOR;
- if (yych <= '@') {
- if (yych <= '/') goto yy91;
- if (yych <= '9') goto yy106;
- goto yy91;
- } else {
- if (yych <= 'F') goto yy106;
- if (yych <= '`') goto yy91;
- if (yych <= 'f') goto yy106;
- goto yy91;
- }
- yy102:
- yych = *++YYCURSOR;
- if (yych <= '@') {
- if (yych <= '/') goto yy91;
- if (yych <= '9') goto yy107;
- goto yy91;
- } else {
- if (yych <= 'F') goto yy107;
- if (yych <= '`') goto yy91;
- if (yych <= 'f') goto yy107;
- goto yy91;
- }
- yy103:
- yych = *++YYCURSOR;
- if (yych <= '@') {
- if (yych <= '/') goto yy91;
- if (yych <= '9') goto yy109;
- goto yy91;
- } else {
- if (yych <= 'F') goto yy109;
- if (yych <= '`') goto yy91;
- if (yych <= 'f') goto yy109;
- goto yy91;
- }
- yy104:
- yych = *++YYCURSOR;
- if (yych <= '@') {
- if (yych <= '/') goto yy91;
- if (yych <= '9') goto yy111;
- goto yy91;
- } else {
- if (yych <= 'F') goto yy111;
- if (yych <= '`') goto yy91;
- if (yych <= 'f') goto yy111;
- goto yy91;
- }
- yy105:
- yych = *++YYCURSOR;
- if (yych <= '@') {
- if (yych <= '/') goto yy91;
- if (yych <= '9') goto yy113;
- goto yy91;
- } else {
- if (yych <= 'F') goto yy113;
- if (yych <= '`') goto yy91;
- if (yych <= 'f') goto yy113;
- goto yy91;
- }
- yy106:
- yych = *++YYCURSOR;
- if (yych <= '@') {
- if (yych <= '/') goto yy91;
- if (yych <= '9') goto yy115;
- goto yy91;
- } else {
- if (yych <= 'F') goto yy115;
- if (yych <= '`') goto yy91;
- if (yych <= 'f') goto yy115;
- goto yy91;
- }
- yy107:
- ++YYCURSOR;
- {
- s->str_esc += 5;
- PHP_JSON_CONDITION_GOTO(STR_P1);
- }
- yy109:
- ++YYCURSOR;
- {
- s->str_esc += 4;
- PHP_JSON_CONDITION_GOTO(STR_P1);
- }
- yy111:
- ++YYCURSOR;
- {
- s->str_esc += 3;
- PHP_JSON_CONDITION_GOTO(STR_P1);
- }
- yy113:
- yyaccept = 2;
- yych = *(YYMARKER = ++YYCURSOR);
- if (yych == '\\') goto yy116;
- yy114:
- {
- s->errcode = PHP_JSON_ERROR_UTF16;
- return PHP_JSON_T_ERROR;
- }
- yy115:
- ++YYCURSOR;
- goto yy114;
- yy116:
- yych = *++YYCURSOR;
- if (yych != 'u') goto yy91;
- yych = *++YYCURSOR;
- if (yych == 'D') goto yy118;
- if (yych != 'd') goto yy91;
- yy118:
- yych = *++YYCURSOR;
- if (yych <= 'B') goto yy91;
- if (yych <= 'F') goto yy119;
- if (yych <= 'b') goto yy91;
- if (yych >= 'g') goto yy91;
- yy119:
- yych = *++YYCURSOR;
- if (yych <= '@') {
- if (yych <= '/') goto yy91;
- if (yych >= ':') goto yy91;
- } else {
- if (yych <= 'F') goto yy120;
- if (yych <= '`') goto yy91;
- if (yych >= 'g') goto yy91;
- }
- yy120:
- yych = *++YYCURSOR;
- if (yych <= '@') {
- if (yych <= '/') goto yy91;
- if (yych >= ':') goto yy91;
- } else {
- if (yych <= 'F') goto yy121;
- if (yych <= '`') goto yy91;
- if (yych >= 'g') goto yy91;
- }
- yy121:
- ++YYCURSOR;
- {
- s->str_esc += 8;
- PHP_JSON_CONDITION_GOTO(STR_P1);
- }
- yyc_STR_P2_BIN:
- yych = *YYCURSOR;
- if (yych <= 0xDF) {
- if (yych <= '[') {
- if (yych == '"') goto yy127;
- } else {
- if (yych <= '\\') goto yy129;
- if (yych <= 0x7F) goto yy125;
- if (yych <= 0xC1) goto yy131;
- goto yy133;
- }
- } else {
- if (yych <= 0xEF) {
- if (yych <= 0xE0) goto yy134;
- if (yych == 0xED) goto yy136;
- goto yy135;
- } else {
- if (yych <= 0xF0) goto yy137;
- if (yych <= 0xF3) goto yy138;
- if (yych <= 0xF4) goto yy139;
- goto yy131;
- }
- }
- yy125:
- ++YYCURSOR;
- { PHP_JSON_CONDITION_GOTO(STR_P2_BIN); }
- yy127:
- ++YYCURSOR;
- YYSETCONDITION(yycJS);
- {
- PHP_JSON_SCANNER_COPY_ESC();
- return PHP_JSON_T_STRING;
- }
- yy129:
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if (yych == 'u') goto yy140;
- yy130:
- {
- char esc;
- PHP_JSON_SCANNER_COPY_ESC();
- switch (*s->cursor) {
- case 'b':
- esc = '\b';
- break;
- case 'f':
- esc = '\f'; break;
- case 'n':
- esc = '\n';
- break;
- case 'r':
- esc = '\r';
- break;
- case 't':
- esc = '\t';
- break;
- case '\\':
- case '/':
- case '"':
- esc = *s->cursor;
- break;
- default:
- s->errcode = PHP_JSON_ERROR_SYNTAX;
- return PHP_JSON_T_ERROR;
- }
- *(s->pstr++) = esc;
- ++YYCURSOR;
- s->str_start = s->cursor;
- PHP_JSON_CONDITION_GOTO_STR_P2();
- }
- yy131:
- ++YYCURSOR;
- yy132:
- {
- if (s->utf8_invalid) {
- PHP_JSON_SCANNER_COPY_ESC();
- if (s->options & PHP_JSON_INVALID_UTF8_SUBSTITUTE) {
- *(s->pstr++) = (char) (0xe0 | (0xfffd >> 12));
- *(s->pstr++) = (char) (0x80 | ((0xfffd >> 6) & 0x3f));
- *(s->pstr++) = (char) (0x80 | (0xfffd & 0x3f));
- }
- s->str_start = s->cursor;
- }
- PHP_JSON_CONDITION_GOTO(STR_P2_BIN);
- }
- yy133:
- yych = *++YYCURSOR;
- if (yych <= 0x7F) goto yy132;
- if (yych <= 0xBF) goto yy125;
- goto yy132;
- yy134:
- yyaccept = 1;
- yych = *(YYMARKER = ++YYCURSOR);
- if (yych <= 0x9F) goto yy132;
- if (yych <= 0xBF) goto yy142;
- goto yy132;
- yy135:
- yyaccept = 1;
- yych = *(YYMARKER = ++YYCURSOR);
- if (yych <= 0x7F) goto yy132;
- if (yych <= 0xBF) goto yy142;
- goto yy132;
- yy136:
- yyaccept = 1;
- yych = *(YYMARKER = ++YYCURSOR);
- if (yych <= 0x7F) goto yy132;
- if (yych <= 0x9F) goto yy142;
- goto yy132;
- yy137:
- yyaccept = 1;
- yych = *(YYMARKER = ++YYCURSOR);
- if (yych <= 0x8F) goto yy132;
- if (yych <= 0xBF) goto yy143;
- goto yy132;
- yy138:
- yyaccept = 1;
- yych = *(YYMARKER = ++YYCURSOR);
- if (yych <= 0x7F) goto yy132;
- if (yych <= 0xBF) goto yy143;
- goto yy132;
- yy139:
- yyaccept = 1;
- yych = *(YYMARKER = ++YYCURSOR);
- if (yych <= 0x7F) goto yy132;
- if (yych <= 0x8F) goto yy143;
- goto yy132;
- yy140:
- yych = *++YYCURSOR;
- if (yych <= 'D') {
- if (yych <= '9') {
- if (yych <= '/') goto yy141;
- if (yych <= '0') goto yy144;
- goto yy145;
- } else {
- if (yych <= '@') goto yy141;
- if (yych <= 'C') goto yy145;
- goto yy146;
- }
- } else {
- if (yych <= 'c') {
- if (yych <= 'F') goto yy145;
- if (yych >= 'a') goto yy145;
- } else {
- if (yych <= 'd') goto yy146;
- if (yych <= 'f') goto yy145;
- }
- }
- yy141:
- YYCURSOR = YYMARKER;
- if (yyaccept == 0) {
- goto yy130;
- } else {
- goto yy132;
- }
- yy142:
- yych = *++YYCURSOR;
- if (yych <= 0x7F) goto yy141;
- if (yych <= 0xBF) goto yy125;
- goto yy141;
- yy143:
- yych = *++YYCURSOR;
- if (yych <= 0x7F) goto yy141;
- if (yych <= 0xBF) goto yy142;
- goto yy141;
- yy144:
- yych = *++YYCURSOR;
- if (yych <= '9') {
- if (yych <= '/') goto yy141;
- if (yych <= '0') goto yy147;
- if (yych <= '7') goto yy148;
- goto yy149;
- } else {
- if (yych <= 'F') {
- if (yych <= '@') goto yy141;
- goto yy149;
- } else {
- if (yych <= '`') goto yy141;
- if (yych <= 'f') goto yy149;
- goto yy141;
- }
- }
- yy145:
- yych = *++YYCURSOR;
- if (yych <= '@') {
- if (yych <= '/') goto yy141;
- if (yych <= '9') goto yy149;
- goto yy141;
- } else {
- if (yych <= 'F') goto yy149;
- if (yych <= '`') goto yy141;
- if (yych <= 'f') goto yy149;
- goto yy141;
- }
- yy146:
- yych = *++YYCURSOR;
- if (yych <= '@') {
- if (yych <= '/') goto yy141;
- if (yych <= '7') goto yy149;
- if (yych <= '9') goto yy150;
- goto yy141;
- } else {
- if (yych <= 'B') goto yy150;
- if (yych <= '`') goto yy141;
- if (yych <= 'b') goto yy150;
- goto yy141;
- }
- yy147:
- yych = *++YYCURSOR;
- if (yych <= '@') {
- if (yych <= '/') goto yy141;
- if (yych <= '7') goto yy151;
- if (yych <= '9') goto yy152;
- goto yy141;
- } else {
- if (yych <= 'F') goto yy152;
- if (yych <= '`') goto yy141;
- if (yych <= 'f') goto yy152;
- goto yy141;
- }
- yy148:
- yych = *++YYCURSOR;
- if (yych <= '@') {
- if (yych <= '/') goto yy141;
- if (yych <= '9') goto yy152;
- goto yy141;
- } else {
- if (yych <= 'F') goto yy152;
- if (yych <= '`') goto yy141;
- if (yych <= 'f') goto yy152;
- goto yy141;
- }
- yy149:
- yych = *++YYCURSOR;
- if (yych <= '@') {
- if (yych <= '/') goto yy141;
- if (yych <= '9') goto yy153;
- goto yy141;
- } else {
- if (yych <= 'F') goto yy153;
- if (yych <= '`') goto yy141;
- if (yych <= 'f') goto yy153;
- goto yy141;
- }
- yy150:
- yych = *++YYCURSOR;
- if (yych <= '@') {
- if (yych <= '/') goto yy141;
- if (yych <= '9') goto yy154;
- goto yy141;
- } else {
- if (yych <= 'F') goto yy154;
- if (yych <= '`') goto yy141;
- if (yych <= 'f') goto yy154;
- goto yy141;
- }
- yy151:
- yych = *++YYCURSOR;
- if (yych <= '@') {
- if (yych <= '/') goto yy141;
- if (yych <= '9') goto yy155;
- goto yy141;
- } else {
- if (yych <= 'F') goto yy155;
- if (yych <= '`') goto yy141;
- if (yych <= 'f') goto yy155;
- goto yy141;
- }
- yy152:
- yych = *++YYCURSOR;
- if (yych <= '@') {
- if (yych <= '/') goto yy141;
- if (yych <= '9') goto yy157;
- goto yy141;
- } else {
- if (yych <= 'F') goto yy157;
- if (yych <= '`') goto yy141;
- if (yych <= 'f') goto yy157;
- goto yy141;
- }
- yy153:
- yych = *++YYCURSOR;
- if (yych <= '@') {
- if (yych <= '/') goto yy141;
- if (yych <= '9') goto yy159;
- goto yy141;
- } else {
- if (yych <= 'F') goto yy159;
- if (yych <= '`') goto yy141;
- if (yych <= 'f') goto yy159;
- goto yy141;
- }
- yy154:
- yych = *++YYCURSOR;
- if (yych <= '@') {
- if (yych <= '/') goto yy141;
- if (yych <= '9') goto yy161;
- goto yy141;
- } else {
- if (yych <= 'F') goto yy161;
- if (yych <= '`') goto yy141;
- if (yych <= 'f') goto yy161;
- goto yy141;
- }
- yy155:
- ++YYCURSOR;
- {
- int utf16 = php_json_ucs2_to_int(s, 2);
- PHP_JSON_SCANNER_COPY_UTF();
- *(s->pstr++) = (char) utf16;
- s->str_start = s->cursor;
- PHP_JSON_CONDITION_GOTO_STR_P2();
- }
- yy157:
- ++YYCURSOR;
- {
- int utf16 = php_json_ucs2_to_int(s, 3);
- PHP_JSON_SCANNER_COPY_UTF();
- *(s->pstr++) = (char) (0xc0 | (utf16 >> 6));
- *(s->pstr++) = (char) (0x80 | (utf16 & 0x3f));
- s->str_start = s->cursor;
- PHP_JSON_CONDITION_GOTO_STR_P2();
- }
- yy159:
- ++YYCURSOR;
- {
- int utf16 = php_json_ucs2_to_int(s, 4);
- PHP_JSON_SCANNER_COPY_UTF();
- *(s->pstr++) = (char) (0xe0 | (utf16 >> 12));
- *(s->pstr++) = (char) (0x80 | ((utf16 >> 6) & 0x3f));
- *(s->pstr++) = (char) (0x80 | (utf16 & 0x3f));
- s->str_start = s->cursor;
- PHP_JSON_CONDITION_GOTO_STR_P2();
- }
- yy161:
- yych = *++YYCURSOR;
- if (yych != '\\') goto yy141;
- yych = *++YYCURSOR;
- if (yych != 'u') goto yy141;
- yych = *++YYCURSOR;
- if (yych == 'D') goto yy164;
- if (yych != 'd') goto yy141;
- yy164:
- yych = *++YYCURSOR;
- if (yych <= 'B') goto yy141;
- if (yych <= 'F') goto yy165;
- if (yych <= 'b') goto yy141;
- if (yych >= 'g') goto yy141;
- yy165:
- yych = *++YYCURSOR;
- if (yych <= '@') {
- if (yych <= '/') goto yy141;
- if (yych >= ':') goto yy141;
- } else {
- if (yych <= 'F') goto yy166;
- if (yych <= '`') goto yy141;
- if (yych >= 'g') goto yy141;
- }
- yy166:
- yych = *++YYCURSOR;
- if (yych <= '@') {
- if (yych <= '/') goto yy141;
- if (yych >= ':') goto yy141;
- } else {
- if (yych <= 'F') goto yy167;
- if (yych <= '`') goto yy141;
- if (yych >= 'g') goto yy141;
- }
- yy167:
- ++YYCURSOR;
- {
- int utf32, utf16_hi, utf16_lo;
- utf16_hi = php_json_ucs2_to_int(s, 4);
- utf16_lo = php_json_ucs2_to_int_ex(s, 4, 7);
- utf32 = ((utf16_lo & 0x3FF) << 10) + (utf16_hi & 0x3FF) + 0x10000;
- PHP_JSON_SCANNER_COPY_UTF_SP();
- *(s->pstr++) = (char) (0xf0 | (utf32 >> 18));
- *(s->pstr++) = (char) (0x80 | ((utf32 >> 12) & 0x3f));
- *(s->pstr++) = (char) (0x80 | ((utf32 >> 6) & 0x3f));
- *(s->pstr++) = (char) (0x80 | (utf32 & 0x3f));
- s->str_start = s->cursor;
- PHP_JSON_CONDITION_GOTO_STR_P2();
- }
- yyc_STR_P2_UTF:
- yych = *YYCURSOR;
- if (yych == '"') goto yy173;
- if (yych == '\\') goto yy175;
- ++YYCURSOR;
- { PHP_JSON_CONDITION_GOTO(STR_P2_UTF); }
- yy173:
- ++YYCURSOR;
- YYSETCONDITION(yycJS);
- {
- PHP_JSON_SCANNER_COPY_ESC();
- return PHP_JSON_T_STRING;
- }
- yy175:
- yych = *(YYMARKER = ++YYCURSOR);
- if (yych == 'u') goto yy177;
- yy176:
- {
- char esc;
- PHP_JSON_SCANNER_COPY_ESC();
- switch (*s->cursor) {
- case 'b':
- esc = '\b';
- break;
- case 'f':
- esc = '\f'; break;
- case 'n':
- esc = '\n';
- break;
- case 'r':
- esc = '\r';
- break;
- case 't':
- esc = '\t';
- break;
- case '\\':
- case '/':
- case '"':
- esc = *s->cursor;
- break;
- default:
- s->errcode = PHP_JSON_ERROR_SYNTAX;
- return PHP_JSON_T_ERROR;
- }
- *(s->pstr++) = esc;
- ++YYCURSOR;
- s->str_start = s->cursor;
- PHP_JSON_CONDITION_GOTO_STR_P2();
- }
- yy177:
- yych = *++YYCURSOR;
- if (yych <= 'D') {
- if (yych <= '9') {
- if (yych <= '/') goto yy178;
- if (yych <= '0') goto yy179;
- goto yy180;
- } else {
- if (yych <= '@') goto yy178;
- if (yych <= 'C') goto yy180;
- goto yy181;
- }
- } else {
- if (yych <= 'c') {
- if (yych <= 'F') goto yy180;
- if (yych >= 'a') goto yy180;
- } else {
- if (yych <= 'd') goto yy181;
- if (yych <= 'f') goto yy180;
- }
- }
- yy178:
- YYCURSOR = YYMARKER;
- goto yy176;
- yy179:
- yych = *++YYCURSOR;
- if (yych <= '9') {
- if (yych <= '/') goto yy178;
- if (yych <= '0') goto yy182;
- if (yych <= '7') goto yy183;
- goto yy184;
- } else {
- if (yych <= 'F') {
- if (yych <= '@') goto yy178;
- goto yy184;
- } else {
- if (yych <= '`') goto yy178;
- if (yych <= 'f') goto yy184;
- goto yy178;
- }
- }
- yy180:
- yych = *++YYCURSOR;
- if (yych <= '@') {
- if (yych <= '/') goto yy178;
- if (yych <= '9') goto yy184;
- goto yy178;
- } else {
- if (yych <= 'F') goto yy184;
- if (yych <= '`') goto yy178;
- if (yych <= 'f') goto yy184;
- goto yy178;
- }
- yy181:
- yych = *++YYCURSOR;
- if (yych <= '@') {
- if (yych <= '/') goto yy178;
- if (yych <= '7') goto yy184;
- if (yych <= '9') goto yy185;
- goto yy178;
- } else {
- if (yych <= 'B') goto yy185;
- if (yych <= '`') goto yy178;
- if (yych <= 'b') goto yy185;
- goto yy178;
- }
- yy182:
- yych = *++YYCURSOR;
- if (yych <= '@') {
- if (yych <= '/') goto yy178;
- if (yych <= '7') goto yy186;
- if (yych <= '9') goto yy187;
- goto yy178;
- } else {
- if (yych <= 'F') goto yy187;
- if (yych <= '`') goto yy178;
- if (yych <= 'f') goto yy187;
- goto yy178;
- }
- yy183:
- yych = *++YYCURSOR;
- if (yych <= '@') {
- if (yych <= '/') goto yy178;
- if (yych <= '9') goto yy187;
- goto yy178;
- } else {
- if (yych <= 'F') goto yy187;
- if (yych <= '`') goto yy178;
- if (yych <= 'f') goto yy187;
- goto yy178;
- }
- yy184:
- yych = *++YYCURSOR;
- if (yych <= '@') {
- if (yych <= '/') goto yy178;
- if (yych <= '9') goto yy188;
- goto yy178;
- } else {
- if (yych <= 'F') goto yy188;
- if (yych <= '`') goto yy178;
- if (yych <= 'f') goto yy188;
- goto yy178;
- }
- yy185:
- yych = *++YYCURSOR;
- if (yych <= '@') {
- if (yych <= '/') goto yy178;
- if (yych <= '9') goto yy189;
- goto yy178;
- } else {
- if (yych <= 'F') goto yy189;
- if (yych <= '`') goto yy178;
- if (yych <= 'f') goto yy189;
- goto yy178;
- }
- yy186:
- yych = *++YYCURSOR;
- if (yych <= '@') {
- if (yych <= '/') goto yy178;
- if (yych <= '9') goto yy190;
- goto yy178;
- } else {
- if (yych <= 'F') goto yy190;
- if (yych <= '`') goto yy178;
- if (yych <= 'f') goto yy190;
- goto yy178;
- }
- yy187:
- yych = *++YYCURSOR;
- if (yych <= '@') {
- if (yych <= '/') goto yy178;
- if (yych <= '9') goto yy192;
- goto yy178;
- } else {
- if (yych <= 'F') goto yy192;
- if (yych <= '`') goto yy178;
- if (yych <= 'f') goto yy192;
- goto yy178;
- }
- yy188:
- yych = *++YYCURSOR;
- if (yych <= '@') {
- if (yych <= '/') goto yy178;
- if (yych <= '9') goto yy194;
- goto yy178;
- } else {
- if (yych <= 'F') goto yy194;
- if (yych <= '`') goto yy178;
- if (yych <= 'f') goto yy194;
- goto yy178;
- }
- yy189:
- yych = *++YYCURSOR;
- if (yych <= '@') {
- if (yych <= '/') goto yy178;
- if (yych <= '9') goto yy196;
- goto yy178;
- } else {
- if (yych <= 'F') goto yy196;
- if (yych <= '`') goto yy178;
- if (yych <= 'f') goto yy196;
- goto yy178;
- }
- yy190:
- ++YYCURSOR;
- {
- int utf16 = php_json_ucs2_to_int(s, 2);
- PHP_JSON_SCANNER_COPY_UTF();
- *(s->pstr++) = (char) utf16;
- s->str_start = s->cursor;
- PHP_JSON_CONDITION_GOTO_STR_P2();
- }
- yy192:
- ++YYCURSOR;
- {
- int utf16 = php_json_ucs2_to_int(s, 3);
- PHP_JSON_SCANNER_COPY_UTF();
- *(s->pstr++) = (char) (0xc0 | (utf16 >> 6));
- *(s->pstr++) = (char) (0x80 | (utf16 & 0x3f));
- s->str_start = s->cursor;
- PHP_JSON_CONDITION_GOTO_STR_P2();
- }
- yy194:
- ++YYCURSOR;
- {
- int utf16 = php_json_ucs2_to_int(s, 4);
- PHP_JSON_SCANNER_COPY_UTF();
- *(s->pstr++) = (char) (0xe0 | (utf16 >> 12));
- *(s->pstr++) = (char) (0x80 | ((utf16 >> 6) & 0x3f));
- *(s->pstr++) = (char) (0x80 | (utf16 & 0x3f));
- s->str_start = s->cursor;
- PHP_JSON_CONDITION_GOTO_STR_P2();
- }
- yy196:
- yych = *++YYCURSOR;
- if (yych != '\\') goto yy178;
- yych = *++YYCURSOR;
- if (yych != 'u') goto yy178;
- yych = *++YYCURSOR;
- if (yych == 'D') goto yy199;
- if (yych != 'd') goto yy178;
- yy199:
- yych = *++YYCURSOR;
- if (yych <= 'B') goto yy178;
- if (yych <= 'F') goto yy200;
- if (yych <= 'b') goto yy178;
- if (yych >= 'g') goto yy178;
- yy200:
- yych = *++YYCURSOR;
- if (yych <= '@') {
- if (yych <= '/') goto yy178;
- if (yych >= ':') goto yy178;
- } else {
- if (yych <= 'F') goto yy201;
- if (yych <= '`') goto yy178;
- if (yych >= 'g') goto yy178;
- }
- yy201:
- yych = *++YYCURSOR;
- if (yych <= '@') {
- if (yych <= '/') goto yy178;
- if (yych >= ':') goto yy178;
- } else {
- if (yych <= 'F') goto yy202;
- if (yych <= '`') goto yy178;
- if (yych >= 'g') goto yy178;
- }
- yy202:
- ++YYCURSOR;
- {
- int utf32, utf16_hi, utf16_lo;
- utf16_hi = php_json_ucs2_to_int(s, 4);
- utf16_lo = php_json_ucs2_to_int_ex(s, 4, 7);
- utf32 = ((utf16_lo & 0x3FF) << 10) + (utf16_hi & 0x3FF) + 0x10000;
- PHP_JSON_SCANNER_COPY_UTF_SP();
- *(s->pstr++) = (char) (0xf0 | (utf32 >> 18));
- *(s->pstr++) = (char) (0x80 | ((utf32 >> 12) & 0x3f));
- *(s->pstr++) = (char) (0x80 | ((utf32 >> 6) & 0x3f));
- *(s->pstr++) = (char) (0x80 | (utf32 & 0x3f));
- s->str_start = s->cursor;
- PHP_JSON_CONDITION_GOTO_STR_P2();
- }
- }
- }
|