Esempio n. 1
0
static struct jx_pair * jx_eval_pair( struct jx_pair *pair, struct jx *context )
{
	if(!pair) return 0;

	return jx_pair(
		jx_eval(pair->key,context),
		jx_eval(pair->value,context),
		jx_eval_pair(pair->next,context)
	);
}
Esempio n. 2
0
static struct jx_pair * jx_parse_pair_list( struct jx_parser *s )
{
	jx_token_t t = jx_scan(s);
	if(t==JX_TOKEN_RBRACE) {
		// empty list
		return 0;
	}

	jx_unscan(s,t);

	struct jx_pair *p = jx_pair(0,0,0);

	p->key = jx_parse(s);
	if(!p->key) {
		// error set by deeper layer
		jx_pair_delete(p);
		return 0;
	}

	if(s->strict_mode) {
		if(p->key->type!=JX_STRING) {
			jx_parse_error(s,"key-value pair must have a string as the key");
			jx_pair_delete(p);
			return 0;
		}
	}

	t = jx_scan(s);
	if(t!=JX_TOKEN_COLON) {
		jx_parse_error(s,"key-value pair must be separated by a colon");
		jx_pair_delete(p);
		return 0;
	}

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

	t = jx_scan(s);
	if(t==JX_TOKEN_COMMA) {
		p->next = jx_parse_pair_list(s);
	} else if(t==JX_TOKEN_RBRACE) {
		p->next = 0;
	} else {
		jx_parse_error(s,"key-value pairs missing a comma or closing brace");
		jx_pair_delete(p);
		return 0;
	}

	return p;
}
Esempio n. 3
0
File: jx.c Progetto: Baguage/cctools
int jx_insert( struct jx *j, struct jx *key, struct jx *value )
{
	if(!j || j->type!=JX_OBJECT) return 0;
	j->u.pairs = jx_pair(key,value,j->u.pairs);
	return 1;
}