static void lua_syck_mark_emitter(SyckEmitter *e, int idx) { struct emitter_xtra *bonus = (struct emitter_xtra *)e->bonus; int type = lua_type(bonus->L, idx); switch (type) { case LUA_TTABLE: lua_pushnil(bonus->L); /* first key */ while (lua_next(bonus->L, -2) != 0) { /* `key' is at index -2 and `value' at index -1 */ //syck_emitter_mark_node(e, bonus->id++); syck_emitter_mark_node(e, (st_data_t)((long)bonus->id++)); lua_syck_mark_emitter(e, -1); lua_pop(bonus->L, 1); } break; default: syck_emitter_mark_node(e, (st_data_t)((long)bonus->id++)); break; } }
int main(int argc, char *argv[]) { SyckEmitter *e; int k; e = syck_new_emitter(); syck_emitter_handler(e, emitter_handler); syck_output_handler(e, output_handler); for (k = 1; k < LENGTH; k++) { syck_emitter_mark_node(e, k); } syck_emit(e, 1); syck_emitter_flush(e, 0); syck_free_emitter(e); }