|
#line 1 "rl/json.rl" |
|
|
#include "mapping.h" |
#include "operators.h" |
#include "object.h" |
#include "array.h" |
#include "builtin_functions.h" |
#include "gc.h" |
|
#include "json.h" |
|
#include "json_utf8.c" |
|
static p_wchar2 *_parse_JSON(p_wchar2 *p, p_wchar2 *pe, struct parser_state *state); |
|
#include "json_string.c" |
#include "json_number.c" |
#include "json_array.c" |
#include "json_mapping.c" |
|
|
#line 43 "rl/json.rl" |
|
|
static p_wchar2 *_parse_JSON(p_wchar2 *p, p_wchar2 *pe, struct parser_state *state) { |
p_wchar2 *i = p; |
int cs; |
int c = 0; |
|
#line 33 "json_parser.c" |
static const int JSON_start = 1; |
static const int JSON_first_final = 12; |
static const int JSON_error = 0; |
|
static const int JSON_en_main = 1; |
|
|
#line 50 "rl/json.rl" |
|
|
#line 44 "json_parser.c" |
{ |
cs = JSON_start; |
} |
|
#line 52 "rl/json.rl" |
|
#line 51 "json_parser.c" |
{ |
if ( p == pe ) |
goto _test_eof; |
switch ( cs ) |
{ |
st1: |
if ( ++p == pe ) |
goto _test_eof1; |
case 1: |
switch( (*p) ) { |
case 13: goto st1; |
case 32: goto st1; |
case 34: goto tr2; |
case 43: goto tr3; |
case 91: goto tr4; |
case 102: goto st2; |
case 110: goto st6; |
case 116: goto st9; |
case 123: goto tr8; |
} |
if ( (*p) < 45 ) { |
if ( 9 <= (*p) && (*p) <= 10 ) |
goto st1; |
} else if ( (*p) > 46 ) { |
if ( 48 <= (*p) && (*p) <= 57 ) |
goto tr3; |
} else |
goto tr3; |
goto st0; |
st0: |
cs = 0; |
goto _out; |
tr2: |
#line 26 "rl/json.rl" |
{ PARSE(string, p); {p = (( i))-1;} } |
goto st12; |
tr3: |
#line 27 "rl/json.rl" |
{ PARSE(number, p); {p = (( i))-1;} } |
goto st12; |
tr4: |
#line 29 "rl/json.rl" |
{ PARSE(array, p); {p = (( i))-1;} } |
goto st12; |
tr8: |
#line 28 "rl/json.rl" |
{ PARSE(mapping, p); {p = (( i))-1;} } |
goto st12; |
tr12: |
#line 32 "rl/json.rl" |
{ PUSH_SPECIAL("false"); } |
goto st12; |
tr15: |
#line 33 "rl/json.rl" |
{ PUSH_SPECIAL("null"); } |
goto st12; |
tr18: |
#line 31 "rl/json.rl" |
{ PUSH_SPECIAL("true"); } |
goto st12; |
st12: |
if ( ++p == pe ) |
goto _test_eof12; |
case 12: |
#line 116 "json_parser.c" |
switch( (*p) ) { |
case 13: goto st12; |
case 32: goto st12; |
} |
if ( 9 <= (*p) && (*p) <= 10 ) |
goto st12; |
goto st0; |
st2: |
if ( ++p == pe ) |
goto _test_eof2; |
case 2: |
if ( (*p) == 97 ) |
goto st3; |
goto st0; |
st3: |
if ( ++p == pe ) |
goto _test_eof3; |
case 3: |
if ( (*p) == 108 ) |
goto st4; |
goto st0; |
st4: |
if ( ++p == pe ) |
goto _test_eof4; |
case 4: |
if ( (*p) == 115 ) |
goto st5; |
goto st0; |
st5: |
if ( ++p == pe ) |
goto _test_eof5; |
case 5: |
if ( (*p) == 101 ) |
goto tr12; |
goto st0; |
st6: |
if ( ++p == pe ) |
goto _test_eof6; |
case 6: |
if ( (*p) == 117 ) |
goto st7; |
goto st0; |
st7: |
if ( ++p == pe ) |
goto _test_eof7; |
case 7: |
if ( (*p) == 108 ) |
goto st8; |
goto st0; |
st8: |
if ( ++p == pe ) |
goto _test_eof8; |
case 8: |
if ( (*p) == 108 ) |
goto tr15; |
goto st0; |
st9: |
if ( ++p == pe ) |
goto _test_eof9; |
case 9: |
if ( (*p) == 114 ) |
goto st10; |
goto st0; |
st10: |
if ( ++p == pe ) |
goto _test_eof10; |
case 10: |
if ( (*p) == 117 ) |
goto st11; |
goto st0; |
st11: |
if ( ++p == pe ) |
goto _test_eof11; |
case 11: |
if ( (*p) == 101 ) |
goto tr18; |
goto st0; |
} |
_test_eof1: cs = 1; goto _test_eof; |
_test_eof12: cs = 12; goto _test_eof; |
_test_eof2: cs = 2; goto _test_eof; |
_test_eof3: cs = 3; goto _test_eof; |
_test_eof4: cs = 4; goto _test_eof; |
_test_eof5: cs = 5; goto _test_eof; |
_test_eof6: cs = 6; goto _test_eof; |
_test_eof7: cs = 7; goto _test_eof; |
_test_eof8: cs = 8; goto _test_eof; |
_test_eof9: cs = 9; goto _test_eof; |
_test_eof10: cs = 10; goto _test_eof; |
_test_eof11: cs = 11; goto _test_eof; |
|
_test_eof: {} |
_out: {} |
} |
|
#line 53 "rl/json.rl" |
|
if (cs >= JSON_first_final) { |
return p; |
} |
|
if (!state->validate && c > 0) pop_n_elems(c); |
|
push_int((INT_TYPE)p); |
return NULL; |
} |
|
|