Class LoadState

java.lang.Object
com.prineside.luaj.LoadState

public class LoadState extends Object
Class to undump compiled lua bytecode into a Prototype instances.

The LoadState class provides the default Globals.Undumper which is used to undump a string of bytes that represent a lua binary file using either the C-based lua compiler, or luaj's

The canonical method to load and execute code is done indirectly using the Globals:

 
 Globals globals = JsePlatform.standardGlobals();
 LuaValue chunk = globasl.load("print('hello, world')", "main.lua");
 chunk.call();
  
This should work regardless of which Globals.Compiler or Globals.Undumper have been installed.

to construct globals, the LoadState default undumper is installed as the default Globals.Undumper.

 
 Globals globals = JsePlatform.standardGlobals();
 Prototype p = globals.compilePrototype(new StringReader("print('hello, world')"), "main.lua");
 ByteArrayOutputStream o = new ByteArrayOutputStream();
 org.luaj.vm2.compiler.DumpState.dump(p, o, false);
 byte[] lua_binary_file_bytes = o.toByteArray();
  
The LoadState's default undumper instance may be used directly to undump these bytes:
 
 Prototypep = LoadState.instance.undump(new ByteArrayInputStream(lua_binary_file_bytes), "main.lua");
 LuaClosure c = new LuaClosure(p, globals);
 c.call();
  
More commonly, the Globals.Undumper may be used to undump them:
 
 Prototype p = globals.loadPrototype(new ByteArrayInputStream(lua_binary_file_bytes), "main.lua", "b");
 LuaClosure c = new LuaClosure(p, globals);
 c.call();
  
See Also:
  • Field Details

    • instance

      public static final Globals.Undumper instance
      Shared instance of Globals.Undumper to use loading prototypes from binary lua files
    • NUMBER_FORMAT_FLOATS_OR_DOUBLES

      public static final int NUMBER_FORMAT_FLOATS_OR_DOUBLES
      format corresponding to non-number-patched lua, all numbers are floats or doubles
      See Also:
    • NUMBER_FORMAT_INTS_ONLY

      public static final int NUMBER_FORMAT_INTS_ONLY
      format corresponding to non-number-patched lua, all numbers are ints
      See Also:
    • NUMBER_FORMAT_NUM_PATCH_INT32

      public static final int NUMBER_FORMAT_NUM_PATCH_INT32
      format corresponding to number-patched lua, all numbers are 32-bit (4 byte) ints
      See Also:
    • LUA_TINT

      public static final int LUA_TINT
      See Also:
    • LUA_TNONE

      public static final int LUA_TNONE
      See Also:
    • LUA_TNIL

      public static final int LUA_TNIL
      See Also:
    • LUA_TBOOLEAN

      public static final int LUA_TBOOLEAN
      See Also:
    • LUA_TLIGHTUSERDATA

      public static final int LUA_TLIGHTUSERDATA
      See Also:
    • LUA_TNUMBER

      public static final int LUA_TNUMBER
      See Also:
    • LUA_TSTRING

      public static final int LUA_TSTRING
      See Also:
    • LUA_TTABLE

      public static final int LUA_TTABLE
      See Also:
    • LUA_TFUNCTION

      public static final int LUA_TFUNCTION
      See Also:
    • LUA_TUSERDATA

      public static final int LUA_TUSERDATA
      See Also:
    • LUA_TTHREAD

      public static final int LUA_TTHREAD
      See Also:
    • LUA_TVALUE

      public static final int LUA_TVALUE
      See Also:
    • encoding

      public static String encoding
      The character encoding to use for file encoding. Null means the default encoding
    • LUA_SIGNATURE

      public static final byte[] LUA_SIGNATURE
      Signature byte indicating the file is a compiled binary chunk
    • LUAC_TAIL

      public static final byte[] LUAC_TAIL
      Data to catch conversion errors
    • SOURCE_BINARY_STRING

      public static final String SOURCE_BINARY_STRING
      Name for compiled chunks
      See Also:
    • LUAC_VERSION

      public static final int LUAC_VERSION
      for header of binary files -- this is Lua 5.2
      See Also:
    • LUAC_FORMAT

      public static final int LUAC_FORMAT
      for header of binary files -- this is the official format
      See Also:
    • LUAC_HEADERSIZE

      public static final int LUAC_HEADERSIZE
      size of header of binary files
      See Also:
    • is

      public final DataInputStream is
      input stream from which we are loading
  • Method Details

    • install

      public static void install(Globals globals)
      Install this class as the standard Globals.Undumper for the supplied Globals
    • longBitsToLuaNumber

      public static LuaValue longBitsToLuaNumber(long bits)
      Convert bits in a long value to a LuaValue.
      Parameters:
      bits - long value containing the bits
      Returns:
      LuaInteger or LuaDouble whose value corresponds to the bits provided.
    • loadFunction

      public Prototype loadFunction(LuaString p) throws IOException
      Load a function prototype from the input stream
      Parameters:
      p - name of the source
      Returns:
      Prototype instance that was loaded
      Throws:
      IOException
    • loadHeader

      public void loadHeader() throws IOException
      Load the lua chunk header values.
      Throws:
      IOException - if an i/o exception occurs.
    • undump

      public static Prototype undump(InputStream stream, String chunkname) throws IOException
      Load input stream as a lua binary chunk if the first 4 bytes are the lua binary signature.
      Parameters:
      stream - InputStream to read, after having read the first byte already
      chunkname - Name to apply to the loaded chunk
      Returns:
      Prototype that was loaded, or null if the first 4 bytes were not the lua signature.
      Throws:
      IOException - if an IOException occurs
    • getSourceName

      public static String getSourceName(String name)
      Construct a source name from a supplied chunk name
      Parameters:
      name - String name that appears in the chunk
      Returns:
      source file name