StringPtr Values::to_s(){
	MemoryStreamPtr ms = xnew<MemoryStream>();
	ms->put_s(XTAL_STRING("("));

	const ValuesPtr* cur = &to_smartptr(this);
	for(int_t n=0; ; ++n){
		if(n!=0){
			ms->put_s(XTAL_STRING(", "));
		}

		ms->put_s((*cur)->head_);

		if(XTAL_detail_is_undefined((*cur)->tail_)){
			break;
		}
		cur = &(*cur)->tail_;
	}

	ms->put_s(XTAL_STRING(")"));
	return ms->to_s();

}
Esempio n. 2
0
StringPtr inspect_range(const CodePtr& code, const inst_t* start, const inst_t* end){

	int sz = 0;
	const inst_t* pc = start;
	StringPtr temp;
	MemoryStreamPtr ms = xnew<MemoryStream>();

	for(; pc < end;){switch(XTAL_opc(pc)){
		XTAL_NODEFAULT;

#define XTAL_INST_CASE(x) XTAL_CASE(x::NUMBER){ temp = x::inspect(pc, code); sz = x::ISIZE; }

//{INST_INSPECT{{
		XTAL_INST_CASE(InstLine);
		XTAL_INST_CASE(InstLoadValue);
		XTAL_INST_CASE(InstLoadConstant);
		XTAL_INST_CASE(InstLoadInt1Byte);
		XTAL_INST_CASE(InstLoadFloat1Byte);
		XTAL_INST_CASE(InstLoadCallee);
		XTAL_INST_CASE(InstLoadThis);
		XTAL_INST_CASE(InstCopy);
		XTAL_INST_CASE(InstInc);
		XTAL_INST_CASE(InstDec);
		XTAL_INST_CASE(InstPos);
		XTAL_INST_CASE(InstNeg);
		XTAL_INST_CASE(InstCom);
		XTAL_INST_CASE(InstAdd);
		XTAL_INST_CASE(InstSub);
		XTAL_INST_CASE(InstCat);
		XTAL_INST_CASE(InstMul);
		XTAL_INST_CASE(InstDiv);
		XTAL_INST_CASE(InstMod);
		XTAL_INST_CASE(InstAnd);
		XTAL_INST_CASE(InstOr);
		XTAL_INST_CASE(InstXor);
		XTAL_INST_CASE(InstShl);
		XTAL_INST_CASE(InstShr);
		XTAL_INST_CASE(InstUshr);
		XTAL_INST_CASE(InstAt);
		XTAL_INST_CASE(InstSetAt);
		XTAL_INST_CASE(InstGoto);
		XTAL_INST_CASE(InstNot);
		XTAL_INST_CASE(InstIf);
		XTAL_INST_CASE(InstIfEq);
		XTAL_INST_CASE(InstIfLt);
		XTAL_INST_CASE(InstIfRawEq);
		XTAL_INST_CASE(InstIfIs);
		XTAL_INST_CASE(InstIfIn);
		XTAL_INST_CASE(InstIfUndefined);
		XTAL_INST_CASE(InstIfDebug);
		XTAL_INST_CASE(InstPush);
		XTAL_INST_CASE(InstPop);
		XTAL_INST_CASE(InstAdjustValues);
		XTAL_INST_CASE(InstLocalVariable);
		XTAL_INST_CASE(InstSetLocalVariable);
		XTAL_INST_CASE(InstInstanceVariable);
		XTAL_INST_CASE(InstSetInstanceVariable);
		XTAL_INST_CASE(InstInstanceVariableByName);
		XTAL_INST_CASE(InstSetInstanceVariableByName);
		XTAL_INST_CASE(InstFilelocalVariable);
		XTAL_INST_CASE(InstSetFilelocalVariable);
		XTAL_INST_CASE(InstFilelocalVariableByName);
		XTAL_INST_CASE(InstSetFilelocalVariableByName);
		XTAL_INST_CASE(InstMember);
		XTAL_INST_CASE(InstMemberEx);
		XTAL_INST_CASE(InstCall);
		XTAL_INST_CASE(InstCallEx);
		XTAL_INST_CASE(InstSend);
		XTAL_INST_CASE(InstSendEx);
		XTAL_INST_CASE(InstProperty);
		XTAL_INST_CASE(InstSetProperty);
		XTAL_INST_CASE(InstScopeBegin);
		XTAL_INST_CASE(InstScopeEnd);
		XTAL_INST_CASE(InstReturn);
		XTAL_INST_CASE(InstYield);
		XTAL_INST_CASE(InstExit);
		XTAL_INST_CASE(InstRange);
		XTAL_INST_CASE(InstOnce);
		XTAL_INST_CASE(InstSetOnce);
		XTAL_INST_CASE(InstMakeArray);
		XTAL_INST_CASE(InstArrayAppend);
		XTAL_INST_CASE(InstMakeMap);
		XTAL_INST_CASE(InstMapInsert);
		XTAL_INST_CASE(InstMapSetDefault);
		XTAL_INST_CASE(InstClassBegin);
		XTAL_INST_CASE(InstClassEnd);
		XTAL_INST_CASE(InstDefineClassMember);
		XTAL_INST_CASE(InstDefineMember);
		XTAL_INST_CASE(InstMakeFun);
		XTAL_INST_CASE(InstMakeInstanceVariableAccessor);
		XTAL_INST_CASE(InstTryBegin);
		XTAL_INST_CASE(InstTryEnd);
		XTAL_INST_CASE(InstPushGoto);
		XTAL_INST_CASE(InstPopGoto);
		XTAL_INST_CASE(InstThrow);
		XTAL_INST_CASE(InstAssert);
		XTAL_INST_CASE(InstBreakPoint);
		XTAL_INST_CASE(InstMAX);
//}}INST_INSPECT}
	} ms->put_s(Xf("%04d(%04d):%s\n")->call((int_t)(pc-start), code->compliant_lineno(pc), temp)->to_s()); pc += sz; }

	ms->seek(0);
	return ms->get_s(ms->size());
}