void CrtTestCase::Strpbrk() { const wxString s(", "); CPPUNIT_ASSERT_EQUAL( ',', *wxStrpbrk(strMB, ", ") ); CPPUNIT_ASSERT_EQUAL( L',', *wxStrpbrk(strWC, L", ") ); CPPUNIT_ASSERT_EQUAL( ',', *wxStrpbrk(strWX, ", ") ); CPPUNIT_ASSERT_EQUAL( L',', *wxStrpbrk(strWX, L", ") ); CPPUNIT_ASSERT_EQUAL( ',', *wxStrpbrk(strMB, s) ); CPPUNIT_ASSERT_EQUAL( L',', *wxStrpbrk(strWC, s) ); CPPUNIT_ASSERT_EQUAL( ',', *wxStrpbrk(strWX, s) ); CPPUNIT_ASSERT_EQUAL( ',', *wxStrpbrk(strWX.c_str(), s) ); CPPUNIT_ASSERT_EQUAL( ',', *wxStrpbrk(strMB, s.c_str()) ); CPPUNIT_ASSERT_EQUAL( L',', *wxStrpbrk(strWC, s.c_str()) ); CPPUNIT_ASSERT_EQUAL( ',', *wxStrpbrk(strWX, s.c_str()) ); CPPUNIT_ASSERT_EQUAL( ',', *wxStrpbrk(strWX.c_str(), s.c_str()) ); CPPUNIT_ASSERT_EQUAL( ',', *wxStrpbrk(strMB, s.mb_str()) ); CPPUNIT_ASSERT_EQUAL( L',', *wxStrpbrk(strWC, s.wc_str()) ); CPPUNIT_ASSERT_EQUAL( ',', *wxStrpbrk(strWX, s.mb_str()) ); CPPUNIT_ASSERT_EQUAL( L',', *wxStrpbrk(strWX, s.wc_str()) ); CPPUNIT_ASSERT_EQUAL( ',', *wxStrpbrk(strWX.c_str(), s.mb_str()) ); CPPUNIT_ASSERT_EQUAL( L',', *wxStrpbrk(strWX.c_str(), s.wc_str()) ); CPPUNIT_ASSERT( !wxStrpbrk(strWX, "xyz") ); CPPUNIT_ASSERT( !wxStrpbrk(strWX.c_str(), L"xyz") ); }
bool wxLuaDebugTarget::EvaluateExpr(int exprRef, const wxString &strExpr) // FIXME - check this code { wxString strResult(wxT("Error")); int nReference = LUA_NOREF; EnterLuaCriticalSection(); { lua_State* L = m_wxlState.GetLuaState(); if (wxStrpbrk(strExpr.c_str(), wxT(" ~=<>+-*/%(){}[]:;,.\"'")) != NULL) { // an expression int nOldTop = lua_gettop(L); wxLuaCharBuffer charbuf(strExpr); int nResult = luaL_loadbuffer(L, charbuf.GetData(), charbuf.Length(), "debug"); if (nResult == 0) nResult = lua_pcall(L, 0, LUA_MULTRET, 0); // call main if (nResult != 0) wxlua_pushwxString(L, wxlua_LUA_ERR_msg(nResult)); else if (lua_gettop(L) == nOldTop) lua_pushliteral(L, "OK"); nReference = m_wxlState.wxluaR_Ref(-1, &wxlua_lreg_refs_key); lua_settop(L, nOldTop); // throw out all return values } else { lua_Debug ar = INIT_LUA_DEBUG; int iLevel = 0; bool fFound = false; while (lua_getstack(L, iLevel++, &ar) != 0) { int iIndex = 0; wxString name = lua2wx(lua_getlocal(L, &ar, ++iIndex)); if (!name.IsEmpty()) { if (strExpr == name) { nReference = m_wxlState.wxluaR_Ref(-1, &wxlua_lreg_refs_key); fFound = true; break; } lua_pop(L, 1); } if (fFound) break; name = lua2wx(lua_getlocal(L, &ar, ++iIndex)); } if (!fFound) { int nOldTop = lua_gettop(L); lua_pushvalue(L, LUA_GLOBALSINDEX); lua_pushnil(L); while (lua_next(L, -2) != 0) { if (lua_type(L, -2) == LUA_TSTRING) { wxString name = lua2wx(lua_tostring(L, -2)); if (strExpr == name) { nReference = m_wxlState.wxluaR_Ref(-1, &wxlua_lreg_refs_key); // reference value lua_pop(L, 2); // pop key and value fFound = true; break; } } lua_pop(L, 1); // removes 'value'; } lua_settop(L, nOldTop); // the table of globals. } } if (m_wxlState.wxluaR_GetRef(nReference, &wxlua_lreg_refs_key)) { m_wxlState.wxluaR_Unref(nReference, &wxlua_lreg_refs_key); int wxl_type = 0; wxString value; wxLuaDebugData::GetTypeValue(L, -1, &wxl_type, value); strResult.Printf(wxT("%s : %s"), wxluaT_typename(L, wxl_type).c_str(), value.c_str()); lua_pop(L, 1); } } LeaveLuaCriticalSection(); return NotifyEvaluateExpr(exprRef, strResult); }