pike.git / src / modules / JSON / json_parser.c

version» Context lines:

pike.git/src/modules/JSON/json_parser.c:1:    + #line 1 "rl/json.rl" + //vim: syntax=ragel +  + #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; + }   Newline at end of file added.