luau-obfuscator 1.0.6 → 1.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +55 -0
- package/dist/index.js +55 -0
- package/generated/grammers.luau +2790 -2927
- package/generated/tests.luau +1957 -1813
- package/package.json +1 -1
- package/src/passes/vmify/compiler.ts +6 -0
- package/src/passes/vmify/names.ts +4 -0
- package/src/passes/vmify/opcodes.ts +4 -0
- package/src/passes/vmify/runtime.ts +52 -0
package/dist/index.cjs
CHANGED
|
@@ -1494,6 +1494,7 @@ var Opcode = /* @__PURE__ */ ((Opcode2) => {
|
|
|
1494
1494
|
Opcode2[Opcode2["VARARG"] = 32] = "VARARG";
|
|
1495
1495
|
Opcode2[Opcode2["SETLIST"] = 33] = "SETLIST";
|
|
1496
1496
|
Opcode2[Opcode2["IDIV"] = 34] = "IDIV";
|
|
1497
|
+
Opcode2[Opcode2["NORMITER"] = 35] = "NORMITER";
|
|
1497
1498
|
return Opcode2;
|
|
1498
1499
|
})(Opcode || {});
|
|
1499
1500
|
function RK(regOrConstIdx, isConst) {
|
|
@@ -2309,6 +2310,7 @@ var VmCompiler = class {
|
|
|
2309
2310
|
}
|
|
2310
2311
|
}
|
|
2311
2312
|
}
|
|
2313
|
+
this.emit(state, 35 /* NORMITER */, base, 0, 0, "normalize-generic-iter");
|
|
2312
2314
|
const loopStart = state.proto.code.length;
|
|
2313
2315
|
const nVars = stmt.variables.length;
|
|
2314
2316
|
const callBase = state.regs.top();
|
|
@@ -2841,6 +2843,34 @@ local function ${N.rk}(${N.frame}, x)
|
|
|
2841
2843
|
end
|
|
2842
2844
|
end
|
|
2843
2845
|
|
|
2846
|
+
-- \uD50C\uB808\uC778 \uD14C\uC774\uBE14\uC5D0 \uB300\uD55C Luau \uC81C\uB124\uB9AD \uBC18\uBCF5(for k, v in t) \uC774\uD130\uB808\uC774\uD130.
|
|
2847
|
+
-- \uBC30\uC5F4\uBD80(1..\uACBD\uACC4)\uB97C \uC21C\uC11C\uB300\uB85C \uBA3C\uC800, \uADF8\uB2E4\uC74C \uD574\uC2DC\uBD80(\uC774\uBBF8 \uB0B8 \uC815\uC218 \uD0A4\uB294 \uAC74\uB108\uB700)\uB97C \uB0B8\uB2E4.
|
|
2848
|
+
-- \uC0C1\uD0DC\uB97C \uD074\uB85C\uC800\uC5D0 \uB2F4\uC73C\uBBC0\uB85C (fn, state, ctrl) \uC911 state/ctrl\uC740 \uC548 \uC4F4\uB2E4.
|
|
2849
|
+
local function ${N.tableIter}(t)
|
|
2850
|
+
local i = 0
|
|
2851
|
+
local arrayDone = false
|
|
2852
|
+
local hk = nil
|
|
2853
|
+
return function()
|
|
2854
|
+
if not arrayDone then
|
|
2855
|
+
i = i + 1
|
|
2856
|
+
local v = t[i]
|
|
2857
|
+
if v ~= nil then
|
|
2858
|
+
return i, v
|
|
2859
|
+
end
|
|
2860
|
+
arrayDone = true
|
|
2861
|
+
end
|
|
2862
|
+
local k, v = next(t, hk)
|
|
2863
|
+
while k ~= nil do
|
|
2864
|
+
if type(k) ~= "number" or k ~= math.floor(k) or k < 1 or k >= i then
|
|
2865
|
+
hk = k
|
|
2866
|
+
return k, v
|
|
2867
|
+
end
|
|
2868
|
+
k, v = next(t, k)
|
|
2869
|
+
end
|
|
2870
|
+
return nil
|
|
2871
|
+
end
|
|
2872
|
+
end
|
|
2873
|
+
|
|
2844
2874
|
-- MOVE
|
|
2845
2875
|
${N.handlers}[${op(0 /* MOVE */)}] = function(${N.frame}, pc, instr)
|
|
2846
2876
|
${N.frame}.${N.R}[instr[2]] = ${N.frame}.${N.R}[instr[3]]
|
|
@@ -3042,6 +3072,30 @@ ${N.handlers}[${op(28 /* RETURN */)}] = function(${N.frame}, pc, instr)
|
|
|
3042
3072
|
return table.pack(table.unpack(${N.frame}.${N.R}, a, a + b - 2))
|
|
3043
3073
|
end
|
|
3044
3074
|
|
|
3075
|
+
-- NORMITER: \uC81C\uB124\uB9AD for \uC9C4\uC785 \uC2DC \uC774\uD130\uB808\uC774\uD130 3-\uD29C\uD50C(R[A..A+2])\uC744 \uC815\uADDC\uD654.
|
|
3076
|
+
-- R[A]\uAC00 \uD568\uC218\uBA74 \uADF8\uB300\uB85C \uB450\uACE0(pairs/ipairs/\uCEE4\uC2A4\uD140 \uC774\uD130\uB808\uC774\uD130), \uD14C\uC774\uBE14\uC774\uBA74 __iter
|
|
3077
|
+
-- \uBA54\uD0C0\uBA54\uC11C\uB4DC\uAC00 \uC788\uC73C\uBA74 \uADF8\uAC78 \uD638\uCD9C\uD574 (fn,state,ctrl)\uB85C, \uC5C6\uC73C\uBA74 array-then-hash
|
|
3078
|
+
-- \uD074\uB85C\uC800 \uC774\uD130\uB808\uC774\uD130\uB85C \uBC14\uAFBC\uB2E4. \uC774\uD6C4 CALL \uD578\uB4E4\uB7EC\uAC00 \uD568\uC218\uB97C \uC815\uC0C1 \uD638\uCD9C\uD558\uAC8C \uB41C\uB2E4.
|
|
3079
|
+
${N.handlers}[${op(35 /* NORMITER */)}] = function(${N.frame}, pc, instr)
|
|
3080
|
+
local a = instr[2]
|
|
3081
|
+
local it = ${N.frame}.${N.R}[a]
|
|
3082
|
+
if type(it) ~= "function" then
|
|
3083
|
+
local mt = getmetatable(it)
|
|
3084
|
+
local customIter = mt and rawget(mt, "__iter")
|
|
3085
|
+
if customIter ~= nil then
|
|
3086
|
+
local f, s, c = customIter(it)
|
|
3087
|
+
${N.frame}.${N.R}[a] = f
|
|
3088
|
+
${N.frame}.${N.R}[a + 1] = s
|
|
3089
|
+
${N.frame}.${N.R}[a + 2] = c
|
|
3090
|
+
elseif type(it) == "table" then
|
|
3091
|
+
${N.frame}.${N.R}[a] = ${N.tableIter}(it)
|
|
3092
|
+
${N.frame}.${N.R}[a + 1] = nil
|
|
3093
|
+
${N.frame}.${N.R}[a + 2] = nil
|
|
3094
|
+
end
|
|
3095
|
+
end
|
|
3096
|
+
return pc + 1
|
|
3097
|
+
end
|
|
3098
|
+
|
|
3045
3099
|
-- FORPREP
|
|
3046
3100
|
${N.handlers}[${op(29 /* FORPREP */)}] = function(${N.frame}, pc, instr)
|
|
3047
3101
|
local a = instr[2]
|
|
@@ -3169,6 +3223,7 @@ function generateVmNames(random = Math.random) {
|
|
|
3169
3223
|
handlers: id(),
|
|
3170
3224
|
dispatch: id(),
|
|
3171
3225
|
rk: id(),
|
|
3226
|
+
tableIter: id(),
|
|
3172
3227
|
frame: id(),
|
|
3173
3228
|
R: id(),
|
|
3174
3229
|
K: id(),
|
package/dist/index.js
CHANGED
|
@@ -1466,6 +1466,7 @@ var Opcode = /* @__PURE__ */ ((Opcode2) => {
|
|
|
1466
1466
|
Opcode2[Opcode2["VARARG"] = 32] = "VARARG";
|
|
1467
1467
|
Opcode2[Opcode2["SETLIST"] = 33] = "SETLIST";
|
|
1468
1468
|
Opcode2[Opcode2["IDIV"] = 34] = "IDIV";
|
|
1469
|
+
Opcode2[Opcode2["NORMITER"] = 35] = "NORMITER";
|
|
1469
1470
|
return Opcode2;
|
|
1470
1471
|
})(Opcode || {});
|
|
1471
1472
|
function RK(regOrConstIdx, isConst) {
|
|
@@ -2281,6 +2282,7 @@ var VmCompiler = class {
|
|
|
2281
2282
|
}
|
|
2282
2283
|
}
|
|
2283
2284
|
}
|
|
2285
|
+
this.emit(state, 35 /* NORMITER */, base, 0, 0, "normalize-generic-iter");
|
|
2284
2286
|
const loopStart = state.proto.code.length;
|
|
2285
2287
|
const nVars = stmt.variables.length;
|
|
2286
2288
|
const callBase = state.regs.top();
|
|
@@ -2813,6 +2815,34 @@ local function ${N.rk}(${N.frame}, x)
|
|
|
2813
2815
|
end
|
|
2814
2816
|
end
|
|
2815
2817
|
|
|
2818
|
+
-- \uD50C\uB808\uC778 \uD14C\uC774\uBE14\uC5D0 \uB300\uD55C Luau \uC81C\uB124\uB9AD \uBC18\uBCF5(for k, v in t) \uC774\uD130\uB808\uC774\uD130.
|
|
2819
|
+
-- \uBC30\uC5F4\uBD80(1..\uACBD\uACC4)\uB97C \uC21C\uC11C\uB300\uB85C \uBA3C\uC800, \uADF8\uB2E4\uC74C \uD574\uC2DC\uBD80(\uC774\uBBF8 \uB0B8 \uC815\uC218 \uD0A4\uB294 \uAC74\uB108\uB700)\uB97C \uB0B8\uB2E4.
|
|
2820
|
+
-- \uC0C1\uD0DC\uB97C \uD074\uB85C\uC800\uC5D0 \uB2F4\uC73C\uBBC0\uB85C (fn, state, ctrl) \uC911 state/ctrl\uC740 \uC548 \uC4F4\uB2E4.
|
|
2821
|
+
local function ${N.tableIter}(t)
|
|
2822
|
+
local i = 0
|
|
2823
|
+
local arrayDone = false
|
|
2824
|
+
local hk = nil
|
|
2825
|
+
return function()
|
|
2826
|
+
if not arrayDone then
|
|
2827
|
+
i = i + 1
|
|
2828
|
+
local v = t[i]
|
|
2829
|
+
if v ~= nil then
|
|
2830
|
+
return i, v
|
|
2831
|
+
end
|
|
2832
|
+
arrayDone = true
|
|
2833
|
+
end
|
|
2834
|
+
local k, v = next(t, hk)
|
|
2835
|
+
while k ~= nil do
|
|
2836
|
+
if type(k) ~= "number" or k ~= math.floor(k) or k < 1 or k >= i then
|
|
2837
|
+
hk = k
|
|
2838
|
+
return k, v
|
|
2839
|
+
end
|
|
2840
|
+
k, v = next(t, k)
|
|
2841
|
+
end
|
|
2842
|
+
return nil
|
|
2843
|
+
end
|
|
2844
|
+
end
|
|
2845
|
+
|
|
2816
2846
|
-- MOVE
|
|
2817
2847
|
${N.handlers}[${op(0 /* MOVE */)}] = function(${N.frame}, pc, instr)
|
|
2818
2848
|
${N.frame}.${N.R}[instr[2]] = ${N.frame}.${N.R}[instr[3]]
|
|
@@ -3014,6 +3044,30 @@ ${N.handlers}[${op(28 /* RETURN */)}] = function(${N.frame}, pc, instr)
|
|
|
3014
3044
|
return table.pack(table.unpack(${N.frame}.${N.R}, a, a + b - 2))
|
|
3015
3045
|
end
|
|
3016
3046
|
|
|
3047
|
+
-- NORMITER: \uC81C\uB124\uB9AD for \uC9C4\uC785 \uC2DC \uC774\uD130\uB808\uC774\uD130 3-\uD29C\uD50C(R[A..A+2])\uC744 \uC815\uADDC\uD654.
|
|
3048
|
+
-- R[A]\uAC00 \uD568\uC218\uBA74 \uADF8\uB300\uB85C \uB450\uACE0(pairs/ipairs/\uCEE4\uC2A4\uD140 \uC774\uD130\uB808\uC774\uD130), \uD14C\uC774\uBE14\uC774\uBA74 __iter
|
|
3049
|
+
-- \uBA54\uD0C0\uBA54\uC11C\uB4DC\uAC00 \uC788\uC73C\uBA74 \uADF8\uAC78 \uD638\uCD9C\uD574 (fn,state,ctrl)\uB85C, \uC5C6\uC73C\uBA74 array-then-hash
|
|
3050
|
+
-- \uD074\uB85C\uC800 \uC774\uD130\uB808\uC774\uD130\uB85C \uBC14\uAFBC\uB2E4. \uC774\uD6C4 CALL \uD578\uB4E4\uB7EC\uAC00 \uD568\uC218\uB97C \uC815\uC0C1 \uD638\uCD9C\uD558\uAC8C \uB41C\uB2E4.
|
|
3051
|
+
${N.handlers}[${op(35 /* NORMITER */)}] = function(${N.frame}, pc, instr)
|
|
3052
|
+
local a = instr[2]
|
|
3053
|
+
local it = ${N.frame}.${N.R}[a]
|
|
3054
|
+
if type(it) ~= "function" then
|
|
3055
|
+
local mt = getmetatable(it)
|
|
3056
|
+
local customIter = mt and rawget(mt, "__iter")
|
|
3057
|
+
if customIter ~= nil then
|
|
3058
|
+
local f, s, c = customIter(it)
|
|
3059
|
+
${N.frame}.${N.R}[a] = f
|
|
3060
|
+
${N.frame}.${N.R}[a + 1] = s
|
|
3061
|
+
${N.frame}.${N.R}[a + 2] = c
|
|
3062
|
+
elseif type(it) == "table" then
|
|
3063
|
+
${N.frame}.${N.R}[a] = ${N.tableIter}(it)
|
|
3064
|
+
${N.frame}.${N.R}[a + 1] = nil
|
|
3065
|
+
${N.frame}.${N.R}[a + 2] = nil
|
|
3066
|
+
end
|
|
3067
|
+
end
|
|
3068
|
+
return pc + 1
|
|
3069
|
+
end
|
|
3070
|
+
|
|
3017
3071
|
-- FORPREP
|
|
3018
3072
|
${N.handlers}[${op(29 /* FORPREP */)}] = function(${N.frame}, pc, instr)
|
|
3019
3073
|
local a = instr[2]
|
|
@@ -3141,6 +3195,7 @@ function generateVmNames(random = Math.random) {
|
|
|
3141
3195
|
handlers: id(),
|
|
3142
3196
|
dispatch: id(),
|
|
3143
3197
|
rk: id(),
|
|
3198
|
+
tableIter: id(),
|
|
3144
3199
|
frame: id(),
|
|
3145
3200
|
R: id(),
|
|
3146
3201
|
K: id(),
|