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.10/json_number_utf8.c

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

#include 
#include "config.h"
#include "machine.h"
#include "global.h"

#line 23 "src/json_number_utf8.rl"


static char *_parse_JSON_number_utf8(char *p, char *pe, struct parser_state *state) {
    char *i = p;
    int cs;
    INT_TYPE d = 0;
    FLOAT_TYPE f;

    
#line 20 "work/json_number_utf8.c"
static const int JSON_number_start = 1;
static const int JSON_number_first_final = 6;
static const int JSON_number_error = 0;

static const int JSON_number_en_main = 1;

#line 32 "src/json_number_utf8.rl"

    
#line 30 "work/json_number_utf8.c"
	{
	cs = JSON_number_start;
	}
#line 34 "src/json_number_utf8.rl"
    
#line 36 "work/json_number_utf8.c"
	{
	if ( p == pe )
		goto _out;
	switch ( cs )
	{
case 1:
	switch( (*p) ) {
		case 45: goto st2;
		case 46: goto tr2;
		case 48: goto st6;
	}
	if ( 49 <= (*p) && (*p) <= 57 )
		goto st10;
	goto st0;
st0:
	goto _out0;
st2:
	if ( ++p == pe )
		goto _out2;
case 2:
	if ( (*p) == 48 )
		goto st6;
	if ( 49 <= (*p) && (*p) <= 57 )
		goto st10;
	goto st0;
st6:
	if ( ++p == pe )
		goto _out6;
case 6:
	switch( (*p) ) {
		case 13: goto tr8;
		case 32: goto tr8;
		case 44: goto tr8;
		case 46: goto tr2;
		case 58: goto tr8;
		case 69: goto tr9;
		case 93: goto tr8;
		case 101: goto tr9;
		case 125: goto tr8;
	}
	if ( 9 <= (*p) && (*p) <= 10 )
		goto tr8;
	goto st0;
tr8:
#line 14 "src/json_number_utf8.rl"
	{
	goto _out7;
    }
	goto st7;
st7:
	if ( ++p == pe )
		goto _out7;
case 7:
#line 90 "work/json_number_utf8.c"
	goto st0;
tr2:
#line 21 "src/json_number_utf8.rl"
	{d = 1;}
	goto st3;
st3:
	if ( ++p == pe )
		goto _out3;
case 3:
#line 100 "work/json_number_utf8.c"
	if ( 48 <= (*p) && (*p) <= 57 )
		goto st8;
	goto st0;
st8:
	if ( ++p == pe )
		goto _out8;
case 8:
	switch( (*p) ) {
		case 13: goto tr8;
		case 32: goto tr8;
		case 44: goto tr8;
		case 58: goto tr8;
		case 69: goto tr9;
		case 93: goto tr8;
		case 101: goto tr9;
		case 125: goto tr8;
	}
	if ( (*p) > 10 ) {
		if ( 48 <= (*p) && (*p) <= 57 )
			goto st8;
	} else if ( (*p) >= 9 )
		goto tr8;
	goto st0;
tr9:
#line 20 "src/json_number_utf8.rl"
	{d = 1;}
	goto st4;
st4:
	if ( ++p == pe )
		goto _out4;
case 4:
#line 132 "work/json_number_utf8.c"
	switch( (*p) ) {
		case 43: goto st5;
		case 45: goto st5;
	}
	if ( 48 <= (*p) && (*p) <= 57 )
		goto st9;
	goto st0;
st5:
	if ( ++p == pe )
		goto _out5;
case 5:
	if ( 48 <= (*p) && (*p) <= 57 )
		goto st9;
	goto st0;
st9:
	if ( ++p == pe )
		goto _out9;
case 9:
	switch( (*p) ) {
		case 13: goto tr8;
		case 32: goto tr8;
		case 44: goto tr8;
		case 58: goto tr8;
		case 93: goto tr8;
		case 125: goto tr8;
	}
	if ( (*p) > 10 ) {
		if ( 48 <= (*p) && (*p) <= 57 )
			goto st9;
	} else if ( (*p) >= 9 )
		goto tr8;
	goto st0;
st10:
	if ( ++p == pe )
		goto _out10;
case 10:
	switch( (*p) ) {
		case 13: goto tr8;
		case 32: goto tr8;
		case 44: goto tr8;
		case 46: goto tr2;
		case 58: goto tr8;
		case 69: goto tr9;
		case 93: goto tr8;
		case 101: goto tr9;
		case 125: goto tr8;
	}
	if ( (*p) > 10 ) {
		if ( 48 <= (*p) && (*p) <= 57 )
			goto st10;
	} else if ( (*p) >= 9 )
		goto tr8;
	goto st0;
	}
	_out0: cs = 0; goto _out; 
	_out2: cs = 2; goto _out; 
	_out6: cs = 6; goto _out; 
	_out7: cs = 7; goto _out; 
	_out3: cs = 3; goto _out; 
	_out8: cs = 8; goto _out; 
	_out4: cs = 4; goto _out; 
	_out5: cs = 5; goto _out; 
	_out9: cs = 9; goto _out; 
	_out10: cs = 10; goto _out; 

	_out: {}
	}
#line 35 "src/json_number_utf8.rl"

    if (cs >= JSON_number_first_final) {
	
		if (!state->validate) {
			char temp = *p;
			*p = 0;

			if (d) {
				if (1 != sscanf(i, "%"PRINTPIKEFLOAT"f", &f)) {
					*p = temp;

					push_int((INT_TYPE)i);
					return NULL;
				}
				push_float(f);
			} else {
				if (1 != sscanf(i, "%"PRINTPIKEINT"d", &d)) {
					*p = temp;

					push_int((INT_TYPE)i);
					return NULL;
				}
				push_int(d);
			}

			*p = temp;
		}

		return p;
    }

    push_int((INT_TYPE)p);
    return NULL;
}



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