void jx_print_buffer( struct jx *j, buffer_t *b ) { if(!j) return; switch(j->type) { case JX_NULL: buffer_putstring(b,"null"); break; case JX_DOUBLE: buffer_printf(b,"%g",j->u.double_value); break; case JX_BOOLEAN: buffer_printf(b,"%s",j->u.boolean_value ? "true" : "false"); break; case JX_INTEGER: buffer_printf(b,"%lld",(long long)j->u.integer_value); break; case JX_SYMBOL: buffer_printf(b,"%s",j->u.symbol_name); break; case JX_STRING: jx_escape_string(j->u.string_value,b); break; case JX_ARRAY: buffer_putstring(b,"["); jx_item_print(j->u.items,b); buffer_putstring(b,"]"); break; case JX_OBJECT: buffer_putstring(b,"{"); jx_pair_print(j->u.pairs,b); buffer_putstring(b,"}"); break; case JX_OPERATOR: jx_print_subexpr(j->u.oper.left,j->u.oper.type,b); buffer_putstring(b,jx_operator_string(j->u.oper.type)); if (j->u.oper.type == JX_OP_CALL) { jx_item_print(j->u.oper.right->u.items, b); buffer_putstring(b, ")"); } else { jx_print_subexpr( j->u.oper.right, j->u.oper.type, b); } if(j->u.oper.type==JX_OP_LOOKUP) buffer_putstring(b,"]"); break; case JX_FUNCTION: buffer_putstring(b, j->u.func.name); break; case JX_ERROR: buffer_putstring(b, "error("); jx_print_buffer(j->u.err, b); buffer_putstring(b, ")"); break; } }
void jx_print_buffer( struct jx *j, buffer_t *b ) { if(!j) return; switch(j->type) { case JX_NULL: buffer_putstring(b,"null"); break; case JX_DOUBLE: buffer_printf(b,"%lg",j->double_value); break; case JX_BOOLEAN: buffer_printf(b,"%s",j->boolean_value ? "true" : "false"); break; case JX_INTEGER: buffer_printf(b,"%lld",(long long)j->integer_value); break; case JX_SYMBOL: buffer_printf(b,"%s",j->symbol_name); break; case JX_STRING: jx_escape_string(j->string_value,b); break; case JX_ARRAY: buffer_putstring(b,"["); jx_item_print(j->items,b); buffer_putstring(b,"]"); break; case JX_OBJECT: buffer_putstring(b,"{"); jx_pair_print(j->pairs,b); buffer_putstring(b,"}"); break; } }
static void jx_item_print( struct jx_item *item, buffer_t *b ) { if(!item) return; jx_print_buffer(item->value,b); if(item->next) { buffer_putstring(b,","); jx_item_print(item->next,b); } }
void jx_print_args( struct jx *j, buffer_t *b ) { if(!jx_istype(j, JX_ARRAY)) return; jx_item_print(j->u.items, b); }