bool V8PerContextDebugData::setContextDebugData(v8::Handle<v8::Context> context, const char* worldName, int debugId) { if (!debugData(context)->IsUndefined()) return false; v8::HandleScope scope(context->GetIsolate()); v8::Handle<v8::Value> debugData = createDebugData(worldName, debugId, context->GetIsolate()); setDebugData(context, debugData); return true; }
bool wxLuaSocketBase::ReadDebugData(wxLuaDebugData& value) { wxLuaDebugData debugData(true); wxInt32 idx, idxMax = 0; bool ok = ReadInt32(idxMax); wxLuaSocketDebugMsg(m_name + wxT(" wxLuaSocketBase::ReadDebugData"), wxString::Format(wxT("items %d"), idxMax)); for (idx = 0; ok && (idx < idxMax); ++idx) { wxInt32 bufferLength = 0; ok = Read((char*)&bufferLength, sizeof(wxInt32)) == sizeof(wxInt32); if (ok && (bufferLength > 0)) { char *pBuffer = new char[bufferLength]; char *pMemory = pBuffer; ok = Read(pMemory, bufferLength) == bufferLength; if (!ok) break; wxInt32 nReference = *(wxInt32 *) pMemory; pMemory += sizeof(wxInt32); wxInt32 nIndex = *(wxInt32 *) pMemory; pMemory += sizeof(wxInt32); wxInt32 flag = *(wxInt32 *) pMemory; pMemory += sizeof(wxInt32); wxInt32 keyType = *(wxInt32 *) pMemory; pMemory += sizeof(wxInt32); wxInt32 valueType = *(wxInt32 *) pMemory; pMemory += sizeof(wxInt32); const char *pKeyPtr = pMemory; pMemory += strlen(pKeyPtr) + 1; const char *pValuePtr = pMemory; pMemory += strlen(pValuePtr) + 1; const char *pSourcePtr = pMemory; wxLuaDebugItem *pItem = new wxLuaDebugItem(lua2wx(pKeyPtr), keyType, lua2wx(pValuePtr), valueType, lua2wx(pSourcePtr), nReference, nIndex, flag); debugData.Add(pItem); delete[] pBuffer; } } if (ok) value = debugData; return ok; }
bool wxLuaDebugTarget::EnumerateTable(int tableRef, int nIndex, long nItemNode) { wxLuaDebugData debugData(true); EnterLuaCriticalSection(); debugData.EnumerateTable(m_wxlState.GetLuaState(), tableRef, nIndex, m_references); LeaveLuaCriticalSection(); return NotifyTableEnumeration(nItemNode, debugData); }
bool wxLuaDebugTarget::EnumerateStackEntry(int stackRef) { wxLuaDebugData debugData(true); EnterLuaCriticalSection(); debugData.EnumerateStackEntry(m_wxlState.GetLuaState(), stackRef, m_references); LeaveLuaCriticalSection(); return NotifyStackEntryEnumeration(stackRef, debugData); }
bool wxLuaDebugTarget::EnumerateStack() { wxLuaDebugData debugData(true); EnterLuaCriticalSection(); debugData.EnumerateStack(m_wxlState.GetLuaState()); LeaveLuaCriticalSection(); return NotifyStackEnumeration(debugData); }
int V8PerContextDebugData::contextDebugId(v8::Handle<v8::Context> context) { v8::HandleScope scope(context->GetIsolate()); v8::Handle<v8::Value> data = debugData(context); if (!data->IsString()) return -1; v8::String::Utf8Value utf8(data); char* comma = strnstr(*utf8, ",", utf8.length()); if (!comma) return -1; return atoi(comma + 1); }
void shHero::useBOFHPower () { shMenu *menu = I->newMenu ("[~]# _", 0); int choice; menu->addIntItem ('b', "buff up", 8); menu->addIntItem ('d', "diagnostics", 12); menu->addIntItem ('i', "identify items", 1); menu->addIntItem ('l', "gain level", 2); menu->addIntItem ('h', "fully heal, restore psi", 18); menu->addIntItem ('f', "create feature", 10); menu->addIntItem ('m', "create monster", 3); menu->addIntItem ('o', "create object", 4); menu->addIntItem ('r', "reveal map", 5); menu->addIntItem ('G', "debug file", 17); menu->addIntItem ('s', "monster spoilers", 6); menu->addIntItem ('t', "transport", 7); menu->addIntItem ('T', "level transport", 9); menu->addIntItem ('e', "excavate", 19); //menu->addIntItem ('R', "show RoomIDs", 11); menu->addIntItem ('D', "switch room darkness", 16); menu->addIntItem ('M', "choose mutations", 15); menu->addIntItem ('F', "alter story flag", 13); menu->addIntItem ('v', "toggle invisibility", 14); menu->addIntItem ('B', "switch body", 20); menu->getIntResult (&choice); delete menu; shCreature *h = mCreature; switch (choice) { case 1: identifyObjects (-1, 0); break; case 2: h->mXP += 1000; h->levelUp (); break; case 3: wish_up_monster (); break; case 4: { char *desc = GetBuf (); I->getStr (desc, 80, "Create what object?"); if (!strlen (desc)) return; shObject *obj = createObject (desc); if (obj) { if (!h->intr (kBlind)) { obj->set (obj::known_appearance); } if (!h->addObjectToInventory (obj)) { I->p ("The object slips from your hands!"); Level->putObject (obj, h->mX, h->mY); } } else { I->p ("%s not found in object list.", desc); } break; } case 5: Level->reveal (0); for (int x = 0; x < MAPMAXCOLUMNS; ++x) { for (int y = 0; y < MAPMAXROWS; ++y) { Level->mVisibility[x][y] = 1; Level->setLit (x, y); } } I->drawScreen (); I->p ("Map revealed."); break; case 6: monsterSpoilers (); break; case 7: { int x = -1, y = -1; bool success; if (I->getSquare ("Transport to what location?", &x, &y, -1)) success = trn::BOFH (h, x, y); else break; if (!success) I->p ("Transport failed - site too densely occupied."); break; } case 8: { const char *zappo = "optimized (20 charges) disintegration ray gun"; h->mMaxHP += 100; h->mHP = h->mMaxHP; h->addObjectToInventory (createObject (zappo)); break; } case 9: { shMenu *lmenu = I->newMenu ("Warp to what level?", 0); shMapLevel *L; for (int i = 1; i < Maze.count (); i++) { L = Maze.get (i); char let = i <= 26 ? i + 'a' - 1 : i + 'A' - 27; lmenu->addPtrItem (let, L->mName, L, 1); } lmenu->getPtrResult ((const void **) &L); delete lmenu; if (L) Level->warpCreature (h, L); break; } case 10: { shFeature::Type t; int x = h->mX, y = h->mY; shMenu *fmenu = I->newMenu ("Create what kind of feature?", 0); fmenu->addIntItem ('a', "acid pit trap", shFeature::kAcidPit, 1); fmenu->addIntItem ('p', "pit trap", shFeature::kPit, 1); fmenu->addIntItem ('s', "sewage pit trap", shFeature::kSewagePit, 1); fmenu->addIntItem ('r', "radiation trap", shFeature::kRadTrap, 1); fmenu->addIntItem ('A', "ACME sign", shFeature::kACMESign, 1); fmenu->addIntItem ('g', "floor grating", shFeature::kFloorGrating, 1); fmenu->addIntItem ('h', "hole", shFeature::kHole, 1); fmenu->addIntItem ('t', "trap door", shFeature::kTrapDoor, 1); fmenu->addIntItem ('v', "vat of sludge", shFeature::kVat, 1); fmenu->addIntItem ('d', "door", shFeature::kDoorOpen, 1); fmenu->getIntResult ((int *) &t); delete fmenu; if (!t) { return; } if (0 == I->getSquare ("Put it where? (select a location)", &x, &y, -1)) { return; } switch (t) { case shFeature::kVat: Level->addVat (x, y); break; case shFeature::kDoorOpen: Level->addFeature (buildDoor (x, y)); break; default: Level->addTrap (x, y, t); break; } break; } case 11: showRooms (); return; case 12: { shCreature *c; int x = h->mX, y = h->mY; if (I->getSquare ("Diagnose whom?", &x, &y, -1)) { if ((c = Level->getCreature (x, y))) { c->doDiagnostics (0); } else { I->p ("There is no one here."); } } return; } case 13: { char name[50]; int val; I->getStr (name, 30, "Check what story flag?"); if (strlen (name) == 0) { I->p ("Cancelled."); return; } val = getStoryFlag(name); if (!val) I->p ("Such story flag has not been set."); else I->p ("Flag has value %d.", val); if (I->yn ("Alter it?")) { char number[15]; I->getStr (number, 10, "To what value?"); int read = sscanf(number, "%d", &val); if (strlen (number) == 0 or !read) { I->p ("Cancelled."); return; } setStoryFlag(name, val); I->p ("Flag set."); } break; } case 14: h->mInnateIntrinsics.toggle (kInvisible); h->computeIntrinsics (); break; case 15: { shMenu *fmenu = I->newMenu ("Toggle mutations:", shMenu::kMultiPick); char letter = 'a'; for (int power = kNoMutantPower; power < kMaxHeroPower; ++power) /* List implemented but not activated persistent powers. */ if (MutantPowers[power].mFunc and h->mMutantPowers[power] != MUT_POWER_ON) { fmenu->addIntItem (letter++, MutantPowers[power].mName, power, 1, h->mMutantPowers[power] > 0); if (letter == 'z' + 1) letter = 'A'; /* Remove powers. Selected entries will be added back. */ h->mMutantPowers[power] = 0; } int input; do { int index; input = fmenu->getIntResult (&index); if (index) h->mMutantPowers[index] = 1; } while (input); delete fmenu; break; } case 16: switchDarkness (); break; case 17: debugData (); break; case 18: { /* Unblind, restore health and psi drain. */ int lost; if ((lost = h->mAbil.temp (abil::Psi)) < 0) h->mAbil.temp_mod (abil::Psi, -lost); h->fullHealing (100, 0); shCreature::TimeOut *t = h->getTimeOut (BLINDED); if (t) { t->mWhen = 0; h->checkTimeOuts (); } break; } case 19: { int x = h->mX, y = h->mY; if (!I->getSquare ("Where? (select a location)", &x, &y, -1)) return; Level->dig (x, y); break; } case 20: { int x = h->mX, y = h->mY; if (!I->getSquare ("With whom? (select a creature)", &x, &y, -1)) { I->nevermind (); return; } shCreature *c = Level->getCreature (x, y); if (!c or c->isHero ()) { I->nevermind (); return; } Hero.mCreature = c; break; } } I->drawScreen (); }
// This function shouldn't modify any internal variables without using a // critical section since the wxLuaDebuggerCServer calls it from the thread. int wxLuaDebuggerBase::HandleDebuggeeEvent(int event_type) { wxCHECK_MSG(GetSocketBase(), event_type, wxT("Invalid socket")); //wxLuaDebuggerEvent d(wxEVT_WXLUA_DEBUGGER_PRINT, this); //d.SetMessage(wxT("wxLuaDebugger : ") + wxLuaSocketCmdEventMsg(event_type)); //SendEvent(d); switch (event_type) { case wxLUA_DEBUGGEE_EVENT_BREAK: { wxString fileName; wxInt32 lineNumber = 0; if (CheckSocketRead( GetSocketBase()->ReadString(fileName) && GetSocketBase()->ReadInt32(lineNumber), wxT("Debugger wxLUA_DEBUGGEE_EVENT_BREAK"))) { wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_BREAK, this, lineNumber, fileName); SendEvent(debugEvent); } else return -1; break; } case wxLUA_DEBUGGEE_EVENT_PRINT: { wxString strMessage; if (CheckSocketRead( GetSocketBase()->ReadString(strMessage), wxT("Debugger wxLUA_DEBUGGEE_EVENT_PRINT"))) { wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_PRINT, this); debugEvent.SetMessage(strMessage); SendEvent(debugEvent); } else return -1; break; } case wxLUA_DEBUGGEE_EVENT_ERROR: { wxString strMessage; if (CheckSocketRead( GetSocketBase()->ReadString(strMessage), wxT("Debugger wxLUA_DEBUGGEE_EVENT_ERROR"))) { wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_ERROR, this); debugEvent.SetMessage(strMessage); SendEvent(debugEvent); } else return -1; break; } case wxLUA_DEBUGGEE_EVENT_EXIT: { wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_EXIT, this); wxPostEvent(this, debugEvent); break; } case wxLUA_DEBUGGEE_EVENT_STACK_ENUM: { wxLuaDebugData debugData(true); if (CheckSocketRead( GetSocketBase()->ReadDebugData(debugData), wxT("Debugger wxLUA_DEBUGGEE_EVENT_STACK_ENUM"))) { wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_STACK_ENUM, this); debugEvent.SetDebugData(-1, debugData); SendEvent(debugEvent); } else return -1; break; } case wxLUA_DEBUGGEE_EVENT_STACK_ENTRY_ENUM: { wxInt32 stackRef = 0; wxLuaDebugData debugData(true); if (CheckSocketRead( GetSocketBase()->ReadInt32(stackRef) && GetSocketBase()->ReadDebugData(debugData), wxT("Debugger wxLUA_DEBUGGEE_EVENT_STACK_ENTRY_ENUM"))) { wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_STACK_ENTRY_ENUM, this); debugEvent.SetDebugData(stackRef, debugData); SendEvent(debugEvent); } else return -1; break; } case wxLUA_DEBUGGEE_EVENT_TABLE_ENUM: { long itemNode = 0; wxLuaDebugData debugData(true); if (CheckSocketRead( GetSocketBase()->ReadLong(itemNode) && GetSocketBase()->ReadDebugData(debugData), wxT("Debugger wxLUA_DEBUGGEE_EVENT_TABLE_ENUM"))) { wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_TABLE_ENUM, this); debugEvent.SetDebugData(itemNode, debugData); SendEvent(debugEvent); } else return -1; break; } case wxLUA_DEBUGGEE_EVENT_EVALUATE_EXPR: { wxInt32 exprRef = 0; wxString strResult; if (CheckSocketRead( GetSocketBase()->ReadInt32(exprRef) && GetSocketBase()->ReadString(strResult), wxT("Debugger wxLUA_DEBUGGEE_EVENT_EVALUATE_EXPR"))) { wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_EVALUATE_EXPR, this); debugEvent.SetMessage(strResult); debugEvent.SetDebugData(exprRef); SendEvent(debugEvent); } else return -1; break; } default : return -1; // don't know this event? } return event_type; }