13 #include "llvm/Support/Error.h"
14 #include "llvm/Support/FormatVariadic.h"
20 int n = lua_gettop(L);
21 lua_getglobal(L,
"io");
22 lua_getfield(L, -1,
"stdout");
23 lua_getfield(L, -1,
"write");
24 for (
int i = 1; i <= n; i++) {
27 luaL_tolstring(L, i,
nullptr);
28 lua_pushstring(L, i != n ?
"\t" :
"\n");
49 luaL_loadbuffer(
m_lua_state, buffer.data(), buffer.size(),
"buffer") ||
52 return llvm::Error::success();
54 llvm::Error e = llvm::make_error<llvm::StringError>(
55 llvm::formatv(
"{0}\n", lua_tostring(
m_lua_state, -1)),
56 llvm::inconvertibleErrorCode());
64 const char *fmt_str =
"return function(frame, bp_loc, ...) {0} end";
65 std::string func_str = llvm::formatv(fmt_str, body).str();
66 if (luaL_dostring(
m_lua_state, func_str.c_str()) != LUA_OK) {
67 llvm::Error e = llvm::make_error<llvm::StringError>(
68 llvm::formatv(
"{0}", lua_tostring(
m_lua_state, -1)),
69 llvm::inconvertibleErrorCode());
75 return llvm::Error::success();
80 lldb::BreakpointLocationSP bp_loc_sp,
87 bp_loc_sp, extra_args_impl);
92 const char *fmt_str =
"return function(frame, wp, ...) {0} end";
93 std::string func_str = llvm::formatv(fmt_str, body).str();
94 if (luaL_dostring(
m_lua_state, func_str.c_str()) != LUA_OK) {
95 llvm::Error e = llvm::make_error<llvm::StringError>(
96 llvm::formatv(
"{0}", lua_tostring(
m_lua_state, -1)),
97 llvm::inconvertibleErrorCode());
103 return llvm::Error::success();
108 lldb::WatchpointSP wp_sp) {
118 luaL_loadbuffer(
m_lua_state, buffer.data(), buffer.size(),
"buffer");
119 if (
error == LUA_OK) {
122 return llvm::Error::success();
125 llvm::Error e = llvm::make_error<llvm::StringError>(
126 llvm::formatv(
"{0}\n", lua_tostring(
m_lua_state, -1)),
127 llvm::inconvertibleErrorCode());
136 return llvm::make_error<llvm::StringError>(
"invalid path",
137 llvm::inconvertibleErrorCode());
141 if (module_extension !=
".lua") {
142 return llvm::make_error<llvm::StringError>(
"invalid extension",
143 llvm::inconvertibleErrorCode());
148 if (
error != LUA_OK) {
149 llvm::Error e = llvm::make_error<llvm::StringError>(
150 llvm::formatv(
"{0}\n", lua_tostring(
m_lua_state, -1)),
151 llvm::inconvertibleErrorCode());
159 return llvm::Error::success();
163 assert(out !=
nullptr);
164 assert(err !=
nullptr);
169 if (luaL_Stream *s =
static_cast<luaL_Stream *
>(
170 luaL_testudata(
m_lua_state, -1, LUA_FILEHANDLE))) {
175 return llvm::make_error<llvm::StringError>(
"could not get stdout",
176 llvm::inconvertibleErrorCode());
180 if (luaL_Stream *s =
static_cast<luaL_Stream *
>(
181 luaL_testudata(
m_lua_state, -1, LUA_FILEHANDLE))) {
186 return llvm::make_error<llvm::StringError>(
"could not get stderr",
187 llvm::inconvertibleErrorCode());
191 return llvm::Error::success();