Otclient  14/8/2020
luaexception.cpp
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2010-2020 OTClient <https://github.com/edubart/otclient>
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a copy
5  * of this software and associated documentation files (the "Software"), to deal
6  * in the Software without restriction, including without limitation the rights
7  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8  * copies of the Software, and to permit persons to whom the Software is
9  * furnished to do so, subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice shall be included in
12  * all copies or substantial portions of the Software.
13  *
14  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20  * THE SOFTWARE.
21  */
22 
23 #include "luaexception.h"
24 #include "luainterface.h"
25 
26 LuaException::LuaException(const std::string& error, int traceLevel)
27 {
28  g_lua.clearStack(); // on every exception, clear lua stack
29  generateLuaErrorMessage(error, traceLevel);
30 }
31 
32 void LuaException::generateLuaErrorMessage(const std::string& error, int traceLevel)
33 {
34  // append trace level to error message
35  if(traceLevel >= 0)
36  m_what = stdext::format("LUA ERROR: %s", g_lua.traceback(error, traceLevel));
37  else
38  m_what = stdext::format("LUA ERROR:\n%s", error);
39 }
40 
42 {
43  std::string error = "attempt to call a function with wrong number of arguments";
44  if(expected >= 0 && got >= 0)
45  error = stdext::format("%s (expected %d, but got %d)", error, expected, got);
46  generateLuaErrorMessage(error, 1);
47 }
48 
49 LuaBadValueCastException::LuaBadValueCastException(const std::string& luaTypeName, const std::string& cppTypeName)
50 {
51  std::string error = stdext::format("attempt to cast a '%s' lua value to '%s'", luaTypeName, cppTypeName);
52  generateLuaErrorMessage(error, 0);
53 }
LuaException::generateLuaErrorMessage
void generateLuaErrorMessage(const std::string &error, int traceLevel)
Definition: luaexception.cpp:32
luaexception.h
luainterface.h
stdext::format
std::string format()
Definition: format.h:82
LuaInterface::traceback
std::string traceback(const std::string &errorMessage="", int level=0)
Definition: luainterface.cpp:380
LuaBadValueCastException::LuaBadValueCastException
LuaBadValueCastException(const std::string &luaTypeName, const std::string &cppTypeName)
Definition: luaexception.cpp:49
g_lua
LuaInterface g_lua
Definition: luainterface.cpp:31
LuaInterface::clearStack
void clearStack()
Definition: luainterface.h:322
LuaException::m_what
std::string m_what
Definition: luaexception.h:41
LuaBadNumberOfArgumentsException::LuaBadNumberOfArgumentsException
LuaBadNumberOfArgumentsException(int expected=-1, int got=-1)
Definition: luaexception.cpp:41
LuaException::LuaException
LuaException()
Definition: luaexception.h:39