1*a0d7406aSPedro Tammela%header %{ 2*a0d7406aSPedro Tammela 3*a0d7406aSPedro Tammelatemplate <typename T> 4*a0d7406aSPedro Tammelavoid 5*a0d7406aSPedro TammelaPushSBClass(lua_State* L, T* obj); 6*a0d7406aSPedro Tammela 7*a0d7406aSPedro Tammela%} 8*a0d7406aSPedro Tammela 9*a0d7406aSPedro Tammela%wrapper %{ 10*a0d7406aSPedro Tammela 11*a0d7406aSPedro Tammela// This function is called from Lua::CallBreakpointCallback 12*a0d7406aSPedro TammelaSWIGEXPORT llvm::Expected<bool> 13*a0d7406aSPedro TammelaLLDBSwigLuaBreakpointCallbackFunction 14*a0d7406aSPedro Tammela( 15*a0d7406aSPedro Tammela lua_State *L, 16*a0d7406aSPedro Tammela lldb::StackFrameSP stop_frame_sp, 17*a0d7406aSPedro Tammela lldb::BreakpointLocationSP bp_loc_sp 18*a0d7406aSPedro Tammela) 19*a0d7406aSPedro Tammela{ 20*a0d7406aSPedro Tammela lldb::SBFrame sb_frame(stop_frame_sp); 21*a0d7406aSPedro Tammela lldb::SBBreakpointLocation sb_bp_loc(bp_loc_sp); 22*a0d7406aSPedro Tammela 23*a0d7406aSPedro Tammela // Push the Lua wrappers 24*a0d7406aSPedro Tammela PushSBClass(L, &sb_frame); 25*a0d7406aSPedro Tammela PushSBClass(L, &sb_bp_loc); 26*a0d7406aSPedro Tammela 27*a0d7406aSPedro Tammela // Call into the Lua callback passing 'sb_frame' and 'sb_bp_loc'. 28*a0d7406aSPedro Tammela // Expects a boolean return. 29*a0d7406aSPedro Tammela if (lua_pcall(L, 2, 1, 0) != LUA_OK) { 30*a0d7406aSPedro Tammela llvm::Error E = llvm::make_error<llvm::StringError>( 31*a0d7406aSPedro Tammela llvm::formatv("{0}\n", lua_tostring(L, -1)), 32*a0d7406aSPedro Tammela llvm::inconvertibleErrorCode()); 33*a0d7406aSPedro Tammela // Pop error message from the stack. 34*a0d7406aSPedro Tammela lua_pop(L, 1); 35*a0d7406aSPedro Tammela return std::move(E); 36*a0d7406aSPedro Tammela } 37*a0d7406aSPedro Tammela 38*a0d7406aSPedro Tammela // Boolean return from the callback 39*a0d7406aSPedro Tammela bool stop = lua_toboolean(L, -1); 40*a0d7406aSPedro Tammela lua_pop(L, 1); 41*a0d7406aSPedro Tammela 42*a0d7406aSPedro Tammela return stop; 43*a0d7406aSPedro Tammela} 44*a0d7406aSPedro Tammela 45*a0d7406aSPedro Tammela 46*a0d7406aSPedro Tammela%} 47