Home modules.gotpike.org
Username: Password: [Create Account]
[Forgot Password?]

Modules

ADT
Database
GTK2
GUI
IP
PiJAX
Public
Sql
Stdio
Subversion
System
Tools
Xosd
lua
v4l2
wx

Recent Changes

Public.Parser.XML2 1.50
Public.ZeroMQ 1.1
Public.Template.Mustache 1.0
Public.Protocols.XMPP 1.4
Sql.Provider.jdbc 1.0

Popular Downloads

Public.Parser.JSON2 1.0
Public.Parser.JSON 0.2
GTK2 2.23
Public.Web.FCGI 1.8
Public.Parser.XML2 1.48


Module Information
Public.Parser.JSON2
Viewing contents of Public_Parser_JSON2-0.4/json_mapping.c

#line 1 "json_mapping.rl"
// vim:syntax=ragel



#line 7 "json.cmod/json_mapping.c"
static const int JSON_mapping_start = 1;

static const int JSON_mapping_first_final = 6;

static const int JSON_mapping_error = 0;

#line 57 "json_mapping.rl"


p_wchar2 *_parse_JSON_mapping(p_wchar2 *p, p_wchar2 *pe, struct parser_state *state) {
    p_wchar2 *i = p;
#ifndef MAPPING_USES_STACK
    struct mapping *m;
#endif
    int cs;
    int c = 0;

#ifndef MAPPING_USES_STACK
    if (!state->validate) {
	m = debug_allocate_mapping(5);
    }
#endif

    
#line 32 "json.cmod/json_mapping.c"
	{
	cs = JSON_mapping_start;
	}
#line 74 "json_mapping.rl"
    
#line 38 "json.cmod/json_mapping.c"
	{
	if ( p == pe )
		goto _out;
	switch ( cs )
	{
case 1:
	if ( (*p) == 123 )
		goto st2;
	goto st0;
st0:
	goto _out0;
st2:
	if ( ++p == pe )
		goto _out2;
case 2:
	switch( (*p) ) {
		case 13: goto st2;
		case 32: goto st2;
		case 34: goto tr2;
		case 125: goto st6;
	}
	if ( 9 <= (*p) && (*p) <= 10 )
		goto st2;
	goto st0;
tr2:
#line 28 "json_mapping.rl"
	{
	state->level++;
	i = _parse_JSON_string(p, pe, state);
	state->level--;

	if (i == NULL) {
	    goto failure;
	}

	c++;
	{p = (( i))-1;}
    }
	goto st3;
st3:
	if ( ++p == pe )
		goto _out3;
case 3:
#line 82 "json.cmod/json_mapping.c"
	switch( (*p) ) {
		case 13: goto st3;
		case 32: goto st3;
		case 58: goto st4;
	}
	if ( 9 <= (*p) && (*p) <= 10 )
		goto st3;
	goto st0;
st4:
	if ( ++p == pe )
		goto _out4;
case 4:
	switch( (*p) ) {
		case 13: goto st4;
		case 32: goto st4;
		case 34: goto tr6;
		case 43: goto tr6;
		case 91: goto tr6;
		case 102: goto tr6;
		case 116: goto tr6;
		case 123: goto tr6;
	}
	if ( (*p) < 45 ) {
		if ( 9 <= (*p) && (*p) <= 10 )
			goto st4;
	} else if ( (*p) > 46 ) {
		if ( 48 <= (*p) && (*p) <= 57 )
			goto tr6;
	} else
		goto tr6;
	goto st0;
tr6:
#line 9 "json_mapping.rl"
	{
	state->level++;
	i = _parse_JSON(p, pe, state);
	state->level--;

	if (i == NULL) {
	    goto failure;
	}
#ifndef MAPPING_USES_STACK
	else {
	    mapping_insert(m, &(Pike_sp[-2]), &(Pike_sp[-1]));
	    pop_2_elems();
	}
#endif

	c++;
	{p = (( i))-1;}
    }
	goto st5;
st5:
	if ( ++p == pe )
		goto _out5;
case 5:
#line 139 "json.cmod/json_mapping.c"
	switch( (*p) ) {
		case 13: goto st5;
		case 32: goto st5;
		case 44: goto st2;
		case 125: goto st6;
	}
	if ( 9 <= (*p) && (*p) <= 10 )
		goto st5;
	goto st0;
st6:
	if ( ++p == pe )
		goto _out6;
case 6:
#line 56 "json_mapping.rl"
	{ goto _out6; }
#line 155 "json.cmod/json_mapping.c"
	goto st0;
	}
	_out0: cs = 0; goto _out; 
	_out2: cs = 2; goto _out; 
	_out3: cs = 3; goto _out; 
	_out4: cs = 4; goto _out; 
	_out5: cs = 5; goto _out; 
	_out6: cs = 6; goto _out; 

	_out: {}
	}
#line 75 "json_mapping.rl"

    if (cs >= JSON_mapping_first_final) {
	if (!state->validate) {
#ifdef MAPPING_USES_STACK
	    f_aggregate_mapping(c);
#else
	    push_mapping(m);
#endif
	}
	return p;
    }

    push_int((int)p);

failure:
    if (!state->validate) {
#ifdef MAPPING_USES_STACK
	if (c > 0) stack_pop_n_elems_keep_top(c);
#else
	if (c & 1) stack_pop_keep_top(); // remove key
	free_mapping(m);
#endif
#ifdef JUMP
	Pike_error("Error parsing mapping at '%c'.\n", (char)*p);
#endif
    }

    return NULL;
}



gotpike.org | Copyright © 2004 - 2019 | Pike is a trademark of Department of Computer and Information Science, Linköping University