コード例 #1
0
ファイル: kp_obj.c プロジェクト: WinLinKer/ktap
/*
 * 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;
}
コード例 #2
0
ファイル: object.c プロジェクト: gokulnatha/ktap
/*
 * 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;
}
コード例 #3
0
ファイル: object.c プロジェクト: philips/ktap
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);
	}
}
コード例 #4
0
ファイル: kp_obj.c プロジェクト: WinLinKer/ktap
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);
	}
}
コード例 #5
0
ファイル: kp_obj.c プロジェクト: WinLinKer/ktap
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;
	}
}
コード例 #6
0
ファイル: object.c プロジェクト: unixbhaskar/ktap
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;
	}
}