]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/script/common/c_packer.h
Support packing arbitrary graphs (#12289)
[dragonfireclient.git] / src / script / common / c_packer.h
index 8bccca98dae487ba301a6f54ef89013728c37b8b..ee732be860f9458811741212f687c9fdf27a75e4 100644 (file)
@@ -36,6 +36,7 @@ extern "C" {
 
 #define INSTR_SETTABLE (-10)
 #define INSTR_POP      (-11)
+#define INSTR_PUSHREF  (-12)
 
 /**
  * Represents a single instruction that pushes a new value or works with existing ones.
@@ -44,6 +45,7 @@ struct PackedInstr
 {
        s16 type; // LUA_T* or INSTR_*
        u16 set_into; // set into table on stack
+       bool keep_ref; // is referenced later by INSTR_PUSHREF?
        bool pop; // remove from stack?
        union {
                bool bdata; // boolean: value
@@ -60,6 +62,7 @@ struct PackedInstr
                        s32 sidata1, sidata2;
                };
                void *ptrdata; // userdata: implementation defined
+               s32 ref; // PUSHREF: index of referenced instr
        };
        /*
                - string: value
@@ -69,7 +72,7 @@ struct PackedInstr
        */
        std::string sdata;
 
-       PackedInstr() : type(0), set_into(0), pop(false) {}
+       PackedInstr() : type(0), set_into(0), keep_ref(false), pop(false) {}
 };
 
 /**