run method

String run(
  1. String code
)

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 "";
}