예제 #1
0
static struct jx_item * jx_parse_item_list( struct jx_parser *s )
{
	jx_token_t t = jx_scan(s);
	if(t==JX_TOKEN_RBRACKET) {
		// empty list
		return 0;
	}

	jx_unscan(s,t);

	struct jx_item *i = jx_item(0,0);

	i->value = jx_parse(s);
	if(!i->value) {
		// error set by deeper layer
		jx_item_delete(i);
		return 0;
	}

	t = jx_scan(s);
	if(t==JX_TOKEN_COMMA) {
		i->next = jx_parse_item_list(s);
	} else if(t==JX_TOKEN_RBRACKET) {
		i->next = 0;
	} else {
		jx_parse_error(s,"array items missing a comma or closing brace");
		jx_item_delete(i);
		return 0;
	}

	return i;
}
예제 #2
0
파일: jx.c 프로젝트: Baguage/cctools
void jx_delete( struct jx *j )
{
	if(!j) return;

	switch(j->type) {
		case JX_DOUBLE:
		case JX_BOOLEAN:
		case JX_INTEGER:
		case JX_NULL:
			break;
		case JX_SYMBOL:
			free(j->u.symbol_name);
			break;
		case JX_STRING:
			free(j->u.string_value);
			break;
		case JX_ARRAY:
			jx_item_delete(j->u.items);
			break;
		case JX_OBJECT:
			jx_pair_delete(j->u.pairs);
			break;
		case JX_OPERATOR:
			jx_delete(j->u.oper.left);
			jx_delete(j->u.oper.right);
			break;
		case JX_FUNCTION:
			jx_delete(j->u.func.arguments);
			break;
		case JX_ERROR:
			jx_delete(j->u.err);
			break;
	}
	free(j);
}
예제 #3
0
파일: jx.c 프로젝트: Baguage/cctools
void jx_item_delete( struct jx_item *item )
{
	if(!item) return;
	jx_delete(item->value);
	jx_item_delete(item->next);
	free(item);
}