Beispiel #1
0
luna::Function * RandomFunction()
{
    auto f = g_gc.NewFunction();

    auto s = RandomString();
    f->SetModuleName(s);
    f->SetLine(RandomNum(1000));

    int instruction_count = RandomRange(10, 1000);
    for (int i = 0; i < instruction_count; ++i)
    {
        unsigned int op_min = luna::OpType_LoadNil;
        unsigned int op_max = luna::OpType_GetGlobal;
        luna::OpType op = static_cast<luna::OpType>(RandomRange(op_min, op_max));
        luna::Instruction instruction(op, RandomNum(128), RandomNum(128), RandomNum(128));
        f->AddInstruction(instruction, i);
    }

    int const_num = RandomNum(5);
    for (int i = 0; i < const_num; ++i)
        f->AddConstNumber(RandomNum(100000));

    int const_str = RandomNum(5);
    for (int i = 0; i < const_str; ++i)
        f->AddConstString(RandomString());

    CHECK_BARRIER(g_gc, f);

    return f;
}
Beispiel #2
0
int main(int argc, char *argv[])
{
	InitializeTraceMon(0);
	
	AddInstruction(0, 1, 1, 1, 0xD18C0009, 0x000E0001, 10);
	//AddInstruction(0, 2, 2, 200);
	AddInstruction(0, 1, 3, 0, 0x118C0009, 0x300E0001, 20);
	
	//PrintAndDeleteAll(0, 2);
	
	//AddInstruction(0, 1, 4, 400);
	PrintAndDelete(0, 1, 3);
	PrintAndDelete(0, 1, 1);
	//AddInstruction(0, 1, 5, 500);
	//PrintAndDelete(0, 1, 4);
	//PrintAndDeleteAll(0, 1);
	
	return 0;
}
Beispiel #3
0
void SQFuncState::AddLineInfos(SQInteger line,bool lineop,bool force)
{
	if(_lastline!=line || force){
		SQLineInfo li;
		li._line=line;li._op=(GetCurrentPos()+1);
		if(lineop)AddInstruction(_OP_LINE,0,line);
		_lineinfos.push_back(li);
		_lastline=line;
	}
}
Beispiel #4
0
	CodeGen::GenState* CodeGen::GenerateDefaultState()
	{
		auto state = GenState::CreateNewState();
		auto _print_fun_ = Context::GetGC()->New<Function>(Context::_print_);
		auto _fun_id = state->AddConstant(_print_fun_->toValue());

		auto var_id = state->AddVariable(u"print");
		state->AddInstruction(VM_CODE::LOAD_C, _fun_id);
		state->AddInstruction(VM_CODE::STORE_V, var_id);
		return state;
	}