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(); }
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()); }