run method
Implementation
String run(String code) {
lastPrintOutput = "";
final codePtr = code.toNativeUtf8();
// luaL_loadstring compiles the Lua code
final loadStatus = lua.luaL_loadstring(L, codePtr.cast());
malloc.free(codePtr);
if (loadStatus != 0) {
final err = lua.lua_tolstring(L, -1, nullptr).cast<Utf8>().toDartString();
lua.lua_settop(L, -2); // lua_pop(L,1)
return "Error: $err";
}
// Execute
final callStatus = lua.lua_pcallk(L, 0, LUA_MULTRET, 0, 0, nullptr);
if (callStatus != 0) {
final err = lua.lua_tolstring(L, -1, nullptr).cast<Utf8>().toDartString();
lua.lua_settop(L, -2); // pop
return "Error: $err";
}
if (lastPrintOutput.isNotEmpty) {
return lastPrintOutput; // captured print()
}
// Get top of stack
if (lua.lua_gettop(L) > 0) {
final resPtr = lua.lua_tolstring(L, -1, nullptr);
if (resPtr.address != 0) {
final result = resPtr.cast<Utf8>().toDartString();
lua.lua_settop(L, -2); // pop
return result;
}
}
return "";
}