luaPrint function

int luaPrint(
  1. Pointer<lua_State> L
)

Implementation

int luaPrint(Pointer<lua_State> L) {
  final bindings = LuaRuntime.lua; // static reference
  final buffer = StringBuffer();

  final n = bindings.lua_gettop(L);

  final namePtr = "tostring".toNativeUtf8().cast<Char>();
  for (var i = 1; i <= n; i++) {
    bindings.lua_getglobal(L, namePtr);
    bindings.lua_pushvalue(L, i);
    bindings.lua_pcallk(L, 1, 1, 0, 0, nullptr);

    final s = bindings.lua_tolstring(L, -1, nullptr);
    if (s.address != 0) {
      buffer.write(s.cast<Utf8>().toDartString());
    } else {
      buffer.write("[nil]");
    }
    bindings.lua_settop(L, -2);

    if (i < n) buffer.write("\t");
  }
  malloc.free(namePtr); // free after use

  LuaRuntime.lastPrintOutput = buffer.toString();
  return 0;
}