Esempio n. 1
0
void kp_table_dump(ktap_State *ks, Table *t)
{
	int i, count = 0;

	kp_printf(ks, "{");
	for (i = 0; i < t->sizearray; i++) {
		Tvalue *v = &t->array[i];

		if (isnil(v))
			continue;

		if (count)
			kp_printf(ks, ", ");

		kp_printf(ks, "(%d: ", i + 1);
		kp_showobj(ks, v);
		kp_printf(ks, ")");
		count++;
	}

	for (i = 0; i < sizenode(t); i++) {
		Node *n = &t->node[i];

		if (isnil(gkey(n)))
			continue;

		if (count)
			kp_printf(ks, ", ");

		kp_printf(ks, "(");
		kp_showobj(ks, gkey(n));
		kp_printf(ks, ": ");
		kp_showobj(ks, gval(n));
		kp_printf(ks, ")");
		count++;
	}
	kp_printf(ks, "}");
}
Esempio n. 2
0
File: baselib.c Progetto: WeiY/ktap
static int ktap_lib_print(ktap_State *ks)
{
	int i;
	int n = GetArgN(ks);

	for (i = 1; i <= n; i++) {
		Tvalue *arg = GetArg(ks, i);
		if (i > 1)
			kp_printf(ks, "\t");
		kp_showobj(ks, arg);
	}

	kp_printf(ks, "\n");

	return 0;
}
Esempio n. 3
0
static int ktap_lib_print(ktap_state *ks)
{
	int i;
	int n = kp_arg_nr(ks);

	for (i = 1; i <= n; i++) {
		ktap_value *arg = kp_arg(ks, i);
		if (i > 1)
			kp_puts(ks, "\t");
		kp_showobj(ks, arg);
	}

	kp_puts(ks, "\n");

	return 0;
}
Esempio n. 4
0
File: main.c Progetto: cfregly/ktap
/* this is a debug function used for check bytecode chunk file */
static void dump_function(int level, ktap_proto *f)
{
	int i;

	printf("\n----------------------------------------------------\n");
	printf("function %d [level %d]:\n", function_nr++, level);
	printf("linedefined: %d\n", f->linedefined);
	printf("lastlinedefined: %d\n", f->lastlinedefined);
	printf("numparams: %d\n", f->numparams);
	printf("is_vararg: %d\n", f->is_vararg);
	printf("maxstacksize: %d\n", f->maxstacksize);
	printf("source: %s\n", getstr(f->source));
	printf("sizelineinfo: %d \t", f->sizelineinfo);
	for (i = 0; i < f->sizelineinfo; i++)
		printf("%d ", f->lineinfo[i]);
	printf("\n");

	printf("sizek: %d\n", f->sizek);
	for (i = 0; i < f->sizek; i++) {
		switch(f->k[i].type) {
		case KTAP_TNIL:
			printf("\tNIL\n");
			break;
		case KTAP_TBOOLEAN:
			printf("\tBOOLEAN: ");
			printf("%d\n", f->k[i].val.b);
			break;
		case KTAP_TNUMBER:
			printf("\tTNUMBER: ");
			printf("%ld\n", f->k[i].val.n);
			break;
		case KTAP_TSHRSTR:
		case KTAP_TLNGSTR:
			printf("\tTSTRING: ");
			printf("%s\n", svalue(&(f->k[i])));
			break;
		default:
			printf("\tUnknow constant type %d: ", f->k[i].type);
			kp_showobj(NULL, &(f->k[i]));
			printf("\n");
		}
	}

	printf("sizelocvars: %d\n", f->sizelocvars);
	for (i = 0; i < f->sizelocvars; i++) {
		printf("\tlocvars: %s startpc: %d endpc: %d\n",
			getstr(f->locvars[i].varname), f->locvars[i].startpc,
			f->locvars[i].endpc);
	}

	printf("sizeupvalues: %d\n", f->sizeupvalues);
	for (i = 0; i < f->sizeupvalues; i++) {
		printf("\tname: %s instack: %d idx: %d\n",
			getstr(f->upvalues[i].name), f->upvalues[i].instack,
			f->upvalues[i].idx);
	}

	printf("\n");
	printf("sizecode: %d\n", f->sizecode);
	for (i = 0; i < f->sizecode; i++)
		decode_instruction(f, f->code[i]);

	printf("sizep: %d\n", f->sizep);
	for (i = 0; i < f->sizep; i++)
		dump_function(level + 1, f->p[i]);

}
Esempio n. 5
0
File: main.c Progetto: cfregly/ktap
static void decode_instruction(ktap_proto *f, int instr)
{
	int opcode = GET_OPCODE(instr);
	ktap_value *k;

	k = f->k;

	printf("%.8x\t", instr);
	printf("%s\t", ktap_opnames[opcode]);

	switch (opcode) {
	case OP_MOVE:
		printf("\t");
		print_base(GETARG_A(instr));
		printf(" <- ");
		print_base(GETARG_B(instr));
		break;
	case OP_GETTABUP:
		print_base(GETARG_A(instr));
		printf(" <- ");
		print_upvalue(GETARG_B(instr));
		printf("{"); print_RKC(instr); printf("}");

		break;
	case OP_GETTABLE:
		print_base(GETARG_A(instr));
		printf(" <- ");

		print_base(GETARG_B(instr));

		printf("{");
		print_RKC(instr);
		printf("}");
		break;
	case OP_SETTABLE:
		print_base(GETARG_A(instr));
		printf("{");
		print_RKB(instr);
		printf("}");
		printf(" <- ");
		print_RKC(instr);
		break;
	case OP_LOADK:
		printf("\t");
		print_base(GETARG_A(instr));
		printf(" <- ");

		kp_showobj(NULL, k + GETARG_Bx(instr));
		break;
	case OP_CALL:
		printf("\t");
		print_base(GETARG_A(instr));
		break;
	case OP_JMP:
		printf("\t%d", GETARG_sBx(instr));
		break;
	case OP_CLOSURE:
		printf("\t");
		print_base(GETARG_A(instr));
		printf(" <- closure(func starts from line %d)",
			f->p[GETARG_Bx(instr)]->lineinfo[0]);
		break;
	case OP_SETTABUP:
		print_upvalue(GETARG_A(instr));
		printf("{");
		print_RKB(instr);
		printf("} <- ");

		print_RKC(instr);
		break;
	case OP_GETUPVAL:
		print_base(GETARG_A(instr));
		printf(" <- ");

		print_upvalue(GETARG_B(instr));
		break;
	case OP_NEWTABLE:
		print_base(GETARG_A(instr));
		printf(" <- {}");
	default:
		break;
	}

	printf("\n");
}