diff options
Diffstat (limited to 'Build/source/libs/luajit/TLPATCHES/patch-05-LuaJITTeX')
-rw-r--r-- | Build/source/libs/luajit/TLPATCHES/patch-05-LuaJITTeX | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/Build/source/libs/luajit/TLPATCHES/patch-05-LuaJITTeX b/Build/source/libs/luajit/TLPATCHES/patch-05-LuaJITTeX new file mode 100644 index 00000000000..884d3392bf7 --- /dev/null +++ b/Build/source/libs/luajit/TLPATCHES/patch-05-LuaJITTeX @@ -0,0 +1,86 @@ +diff -bur LuaJIT-src-orig/src/lj_def.h LuaJIT-src/src/lj_def.h +--- LuaJIT-src-orig/src/lj_def.h 2016-03-07 09:43:42.728069718 +0100 ++++ LuaJIT-src/src/lj_def.h 2016-03-07 12:23:43.327910115 +0100 +@@ -66,7 +66,7 @@ + #define LJ_MAX_BCINS (1<<26) /* Max. # of bytecode instructions. */ + #define LJ_MAX_SLOTS 250 /* Max. # of slots in a Lua func. */ + #define LJ_MAX_LOCVAR 200 /* Max. # of local variables. */ +-#define LJ_MAX_UPVAL 60 /* Max. # of upvalues. */ ++#define LJ_MAX_UPVAL 249 /* Max. # of upvalues. */ + + #define LJ_MAX_IDXCHAIN 100 /* __index/__newindex chain limit. */ + #define LJ_STACK_EXTRA (5+2*LJ_FR2) /* Extra stack space (metamethods). */ + +diff -bur LuaJIT-src-orig/src/lj_str.c LuaJIT-src/src/lj_str.c +--- LuaJIT-src-orig/src/lj_str.c 2016-03-07 09:43:42.696069718 +0100 ++++ LuaJIT-src/src/lj_str.c 2016-03-07 12:25:22.031908474 +0100 +@@ -118,6 +118,16 @@ + g->strhash = newhash; + } + ++/* ++** Lua will use at most ~(2^LUAI_HASHLIMIT) bytes from a string to ++** compute its hash ++*/ ++#if !defined(LUAI_HASHLIMIT) ++#define LUAI_HASHLIMIT 5 ++#endif ++ ++#define cast(t, exp) ((t)(exp)) ++int luajittex_choose_hash_function = 0 ; + /* Intern a string and return string object. */ + GCstr *lj_str_new(lua_State *L, const char *str, size_t lenx) + { +@@ -126,9 +136,22 @@ + GCobj *o; + MSize len = (MSize)lenx; + MSize a, b, h = len; ++ size_t step ; ++ size_t l1 ; + if (lenx >= LJ_MAX_STR) + lj_err_msg(L, LJ_ERR_STROV); + g = G(L); ++ ++ if (len==0) ++ return &g->strempty; ++ if (luajittex_choose_hash_function==0) { ++ /* Lua 5.1.5 hash function */ ++ /* for 5.2 max methods we also need to patch the vm eq */ ++ step = (len>>LUAI_HASHLIMIT)+1; /* if string is too long, don't hash all its chars */ ++ for (l1=len; l1>=step; l1-=step) /* compute hash */ ++ h = h ^ ((h<<5)+(h>>2)+cast(unsigned char, str[l1-1])); ++ } else { ++ /* LuaJIT 2.0.2 hash function */ + /* Compute string hash. Constants taken from lookup3 hash by Bob Jenkins. */ + if (len >= 4) { /* Caveat: unaligned access! */ + a = lj_getu32(str); +@@ -142,11 +165,15 @@ + b = *(const uint8_t *)(str+(len>>1)); + h ^= b; h -= lj_rol(b, 14); + } else { ++ /* Already done, kept for reference */ + return &g->strempty; + } + a ^= h; a -= lj_rol(h, 11); + b ^= a; b -= lj_rol(a, 25); + h ^= b; h -= lj_rol(b, 16); ++ } ++ ++ + /* Check if the string has already been interned. */ + o = gcref(g->strhash[h & g->strmask]); + if (LJ_LIKELY((((uintptr_t)str+len-1) & (LJ_PAGESIZE-1)) <= LJ_PAGESIZE-4)) { + +diff -bur LuaJIT-src-orig/src/lj_err.c LuaJIT-src/src/lj_err.c +--- LuaJIT-src-orig/src/lj_err.c 2016-03-15 12:06:56.844436191 +0100 ++++ LuaJIT-src/src/lj_err.c 2016-03-15 11:58:30.000000000 +0100 +@@ -310,7 +310,6 @@ + #define _US_FORCE_UNWIND 8 + + typedef struct _Unwind_Control_Block _Unwind_Control_Block; +-typedef struct _Unwind_Context _Unwind_Context; + + struct _Unwind_Control_Block { + uint64_t exclass; + + |