Skip to content

Commit 879f190

Browse files
authored
Merge pull request #57 from levno-710/develop
2 parents d6796fd + bf1c1d7 commit 879f190

File tree

4 files changed

+109
-35
lines changed

4 files changed

+109
-35
lines changed

doc/SUMMARY.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
* [Vmify](steps/vmify.md)
1818
* [SplitStrings](steps/splitstrings.md)
1919
* [ProxifyLocals](steps/proxifylocals.md)
20-
* [LocalsToTable](steps/localstotable.md)
2120
* [EncryptStrings](steps/encryptstrings.md)
2221
* [ConstantArray](steps/constantarray.md)
2322

doc/steps/encryptstrings.md

Lines changed: 63 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,68 @@ print("Hello, World!")
1919
{% code title="out.lua" %}
2020
```lua
2121
-- Settings: None
22-
local x,F do local k=math.floor local I=math.random local Y=table.remove local i=string.char local K=0 local J=2 local Q={}local W={}local q=0 local R={}for F=1,256,1 do R[F]=F end repeat local F=I(1,#R)local x=Y(R,F)W[x]=i(x-1)until#R==0 local j={}local function B()if#j==0 then K=(K*173+8408159861491)%35184372088832 repeat J=(J*160)%257 until J~=1 local F=J%32 local x=(k(K/2^(13-(J-F)/32))%4294967296)/2^F local I=k((x%1)*4294967296)+k(x)local Y=I%65536 local i=(I-Y)/65536 local Q=Y%256 local W=(Y-Q)/256 local q=i%256 local R=(i-q)/256 j={Q,W;q,R}end return table.remove(j)end local d={}x=setmetatable({},{__index=d,__metatable=nil})function F(x,k)local I=d if I[k]then else j={}local F=W K=k%35184372088832 J=k%255+2 local Y=string.len(x)I[k]=""local i=198 for Y=1,Y,1 do i=((string.byte(x,Y)+B())+i)%256 I[k]=I[k]..F[i+1]end end return k end end print(x[F("\219\018Q%~Y\225\128u\128\208&\155",6909832146399)])
22+
local x, F
23+
do
24+
local k = math.floor
25+
local I = math.random
26+
local Y = table.remove
27+
local i = string.char
28+
local K = 0
29+
local J = 2
30+
local Q = {}
31+
local W = {}
32+
local q = 0
33+
local R = {}
34+
for F = 1, 256, 1 do
35+
R[F] = F
36+
end
37+
repeat
38+
local F = I(1, #R)
39+
local x = Y(R, F)
40+
W[x] = i(x - 1)
41+
until #R == 0
42+
local j = {}
43+
local function B()
44+
if #j == 0 then
45+
K = (K * 173 + 8408159861491) % 35184372088832
46+
repeat
47+
J = (J * 160) % 257
48+
until J ~= 1
49+
local F = J % 32
50+
local x = (k(K / 2 ^ (13 - (J - F) / 32)) % 4294967296) / 2 ^ F
51+
local I = k((x % 1) * 4294967296) + k(x)
52+
local Y = I % 65536
53+
local i = (I - Y) / 65536
54+
local Q = Y % 256
55+
local W = (Y - Q) / 256
56+
local q = i % 256
57+
local R = (i - q) / 256
58+
j = {Q, W, q, R}
59+
end
60+
return table.remove(j)
61+
end
62+
local d = {}
63+
x = setmetatable({}, {__index = d, __metatable = nil})
64+
function F(x, k)
65+
local I = d
66+
if I[k] then
67+
else
68+
j = {}
69+
local F = W
70+
K = k % 35184372088832
71+
J = k % 255 + 2
72+
local Y = string.len(x)
73+
I[k] = ""
74+
local i = 198
75+
for Y = 1, Y, 1 do
76+
i = ((string.byte(x, Y) + B()) + i) % 256
77+
I[k] = I[k] .. F[i + 1]
78+
end
79+
end
80+
return k
81+
end
82+
end
83+
print(x[F("\219\018Q%~Y\225\128u\128\208&\155", 6909832146399)])
84+
2385
```
2486
{% endcode %}

doc/steps/localstotable.md

Lines changed: 0 additions & 33 deletions
This file was deleted.

src/prometheus/compiler/compiler.lua

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1308,6 +1308,52 @@ function Compiler:compileStatement(statement, funcDepth)
13081308
-- Function Declaration
13091309
if(statement.kind == AstKind.FunctionDeclaration) then
13101310
local retReg = self:compileFunction(statement, funcDepth);
1311+
if(#statement.indices > 0) then
1312+
local tblReg;
1313+
if statement.scope.isGlobal then
1314+
tblReg = self:allocRegister(false);
1315+
self:addStatement(self:setRegister(scope, tblReg, Ast.StringExpression(statement.scope:getVariableName(statement.id))), {tblReg}, {}, false);
1316+
self:addStatement(self:setRegister(scope, tblReg, Ast.IndexExpression(self:env(scope), self:register(scope, tblReg))), {tblReg}, {tblReg}, true);
1317+
else
1318+
if self.scopeFunctionDepths[statement.scope] == funcDepth then
1319+
if self:isUpvalue(statement.scope, statement.id) then
1320+
tblReg = self:allocRegister(false);
1321+
local reg = self:getVarRegister(statement.scope, statement.id, funcDepth);
1322+
self:addStatement(self:setRegister(scope, tblReg, self:getUpvalueMember(scope, self:register(scope, reg))), {tblReg}, {reg}, true);
1323+
else
1324+
tblReg = self:getVarRegister(statement.scope, statement.id, funcDepth, retReg);
1325+
end
1326+
else
1327+
tblReg = self:allocRegister(false);
1328+
local upvalId = self:getUpvalueId(statement.scope, statement.id);
1329+
scope:addReferenceToHigherScope(self.containerFuncScope, self.currentUpvaluesVar);
1330+
self:addStatement(self:setRegister(scope, tblReg, self:getUpvalueMember(scope, Ast.IndexExpression(Ast.VariableExpression(self.containerFuncScope, self.currentUpvaluesVar), Ast.NumberExpression(upvalId)))), {tblReg}, {}, true);
1331+
end
1332+
end
1333+
1334+
for i = 1, #statement.indices - 1 do
1335+
local index = statement.indices[i];
1336+
local indexReg = self:compileExpression(Ast.StringExpression(index), funcDepth, 1)[1];
1337+
local tblRegOld = tblReg;
1338+
tblReg = self:allocRegister(false);
1339+
self:addStatement(self:setRegister(scope, tblReg, Ast.IndexExpression(self:register(scope, tblRegOld), self:register(scope, indexReg))), {tblReg}, {tblReg, indexReg}, false);
1340+
self:freeRegister(tblRegOld, false);
1341+
self:freeRegister(indexReg, false);
1342+
end
1343+
1344+
local index = statement.indices[#statement.indices];
1345+
local indexReg = self:compileExpression(Ast.StringExpression(index), funcDepth, 1)[1];
1346+
self:addStatement(Ast.AssignmentStatement({
1347+
Ast.AssignmentIndexing(self:register(scope, tblReg), self:register(scope, indexReg)),
1348+
}, {
1349+
self:register(scope, retReg),
1350+
}), {}, {tblReg, indexReg, retReg}, true);
1351+
self:freeRegister(indexReg, false);
1352+
self:freeRegister(tblReg, false);
1353+
self:freeRegister(retReg, false);
1354+
1355+
return;
1356+
end
13111357
if statement.scope.isGlobal then
13121358
local tmpReg = self:allocRegister(false);
13131359
self:addStatement(self:setRegister(scope, tmpReg, Ast.StringExpression(statement.scope:getVariableName(statement.id))), {tmpReg}, {}, false);

0 commit comments

Comments
 (0)