/* * equality of ktap values. ks == NULL means raw equality */ int kp_obj_equal(ktap_state *ks, const ktap_value *t1, const ktap_value *t2) { switch (ttype(t1)) { case KTAP_TYPE_NIL: return 1; case KTAP_TYPE_NUMBER: return nvalue(t1) == nvalue(t2); case KTAP_TYPE_BOOLEAN: return bvalue(t1) == bvalue(t2); /* true must be 1 !! */ case KTAP_TYPE_LIGHTUSERDATA: return pvalue(t1) == pvalue(t2); case KTAP_TYPE_CFUNCTION: return fvalue(t1) == fvalue(t2); case KTAP_TYPE_SHRSTR: return eqshrstr(rawtsvalue(t1), rawtsvalue(t2)); case KTAP_TYPE_LNGSTR: return kp_str_eqlng(rawtsvalue(t1), rawtsvalue(t2)); case KTAP_TYPE_TABLE: if (hvalue(t1) == hvalue(t2)) return 1; else if (ks == NULL) return 0; case KTAP_TYPE_BTRACE: return btrace_equal(btvalue(t1), btvalue(t2)); default: return gcvalue(t1) == gcvalue(t2); } return 0; }
/* * equality of ktap values. ks == NULL means raw equality */ int kp_equalobjv(ktap_state *ks, const ktap_value *t1, const ktap_value *t2) { switch (ttype(t1)) { case KTAP_TNIL: return 1; case KTAP_TNUMBER: return nvalue(t1) == nvalue(t2); case KTAP_TBOOLEAN: return bvalue(t1) == bvalue(t2); /* true must be 1 !! */ case KTAP_TLIGHTUSERDATA: return pvalue(t1) == pvalue(t2); case KTAP_TLCF: return fvalue(t1) == fvalue(t2); case KTAP_TSHRSTR: return eqshrstr(rawtsvalue(t1), rawtsvalue(t2)); case KTAP_TLNGSTR: return kp_tstring_eqlngstr(rawtsvalue(t1), rawtsvalue(t2)); case KTAP_TTABLE: if (hvalue(t1) == hvalue(t2)) return 1; else if (ks == NULL) return 0; #ifdef __KERNEL__ case KTAP_TBTRACE: return kp_btrace_equal(btvalue(t1), btvalue(t2)); #endif default: return gcvalue(t1) == gcvalue(t2); } return 0; }
void kp_objclone(ktap_state *ks, const ktap_value *o, ktap_value *newo) { if (ttisbtrace(o)) { ktap_btrace *bt; bt = kp_newbacktrace(ks); bt->nr_entries = btvalue(o)->nr_entries; memcpy(&bt->entries[0], &btvalue(o)->entries[0], sizeof(bt->entries)); setbtvalue(newo, bt); } else { kp_error(ks, "cannot clone ktap value type %d\n", ttype(o)); setnilvalue(newo); } }
void kp_obj_clone(ktap_state *ks, const ktap_value *o, ktap_value *newo, ktap_gcobject **list) { if (is_btrace(o)) { int nr_entries = btvalue(o)->nr_entries; ktap_btrace *bt; bt = kp_obj_newbacktrace(ks, nr_entries, list); memcpy((unsigned long *)(bt + 1), btvalue(o) + 1, nr_entries * sizeof(unsigned long)); set_btrace(newo, bt); } else { kp_error(ks, "cannot clone ktap value type %d\n", ttype(o)); set_nil(newo); } }
void kp_obj_show(ktap_state *ks, const ktap_value *v) { switch (ttype(v)) { case KTAP_TYPE_NIL: kp_puts(ks, "nil"); break; case KTAP_TYPE_NUMBER: kp_printf(ks, "%ld", nvalue(v)); break; case KTAP_TYPE_BOOLEAN: kp_puts(ks, (bvalue(v) == 1) ? "true" : "false"); break; case KTAP_TYPE_LIGHTUSERDATA: kp_printf(ks, "0x%lx", (unsigned long)pvalue(v)); break; case KTAP_TYPE_CFUNCTION: kp_printf(ks, "0x%lx", (unsigned long)fvalue(v)); break; case KTAP_TYPE_SHRSTR: case KTAP_TYPE_LNGSTR: kp_puts(ks, svalue(v)); break; case KTAP_TYPE_TABLE: kp_tab_dump(ks, hvalue(v)); break; #ifdef CONFIG_KTAP_FFI case KTAP_TYPE_CDATA: kp_cdata_dump(ks, cdvalue(v)); break; #endif case KTAP_TYPE_EVENT: kp_transport_event_write(ks, evalue(v)); break; case KTAP_TYPE_BTRACE: btrace_dump(ks, btvalue(v)); break; case KTAP_TYPE_PTABLE: kp_ptab_dump(ks, phvalue(v)); break; case KTAP_TYPE_STATDATA: kp_statdata_dump(ks, sdvalue(v)); break; default: kp_error(ks, "print unknown value type: %d\n", ttype(v)); break; } }
void kp_showobj(ktap_state *ks, const ktap_value *v) { switch (ttype(v)) { case KTAP_TNIL: kp_puts(ks, "nil"); break; case KTAP_TNUMBER: kp_printf(ks, "%ld", nvalue(v)); break; case KTAP_TBOOLEAN: kp_puts(ks, (bvalue(v) == 1) ? "true" : "false"); break; case KTAP_TLIGHTUSERDATA: kp_printf(ks, "0x%lx", (unsigned long)pvalue(v)); break; case KTAP_TLCF: kp_printf(ks, "0x%lx", (unsigned long)fvalue(v)); break; case KTAP_TSHRSTR: case KTAP_TLNGSTR: kp_puts(ks, svalue(v)); break; case KTAP_TUSERDATA: kp_printf(ks, "0x%lx", (unsigned long)uvalue(v)); break; case KTAP_TTABLE: kp_table_dump(ks, hvalue(v)); break; #ifdef __KERNEL__ case KTAP_TEVENT: kp_transport_event_write(ks, evalue(v)); break; case KTAP_TBTRACE: kp_btrace_dump(ks, btvalue(v)); break; case KTAP_TAGGRTABLE: kp_aggrtable_dump(ks, ahvalue(v)); break; case KTAP_TAGGRACCVAL: kp_aggraccval_dump(ks, aggraccvalue(v)); break; #endif default: kp_error(ks, "print unknown value type: %d\n", ttype(v)); break; } }