ferib / LuaToolkit

Lua Encode/Decoder/Disassembler/Decompiler in C#
https://ferib.dev/blog.php?l=post/Lua_Devirtualization_Part_2_Decompiling_Lua
MIT License
86 stars 35 forks source link

incorrect IF block merge #5

Open ferib opened 3 years ago

ferib commented 3 years ago

IF merge failed here

  local function unknown1(var0, var1, var2)
  local var3 = var1["x"]
  local var4 = var1["y"]
  local var5 = var1["z"]
  local var6 = var2["x"]
  var6 = var6 - var3
  local var7 = var2["y"]
  var7 = var7 - var4
  local var8 = var2["z"]
  var8 = var8 - var5
  local var29 = var1["x"]
  if var6 ~= 0 or var7 ~= 0 and  var23 == var29 and  var8 ~= 0 then var9 = var0["x"]

var23 == var29 should not change var3 to var23 because it was not used in its code block.

ferib commented 3 years ago

Same result for TEST and TESTSET

var113 = var11 ^ 2
if var1 == nil or not var113 then var3 = 1
end
local sqTolerance = tolerance ~= nil and tolerance^2 or 1
ferib commented 3 years ago

Should be fixed in #13, Still needs testing. PR will remain until testers have confirmed.

ferib commented 3 years ago
local function unknown1(var0, var1, var2)
    local var3 = var1["x"]
    local var4 = var1["y"]
    local var5 = var1["z"]
    local var6 = var2["x"]
    var6 = var6 - var3
    local var7 = var2["y"]
    var7 = var7 - var4
    local var8 = var2["z"]
    var8 = var8 - var5
    local var9 = var1["x"]
    if var6 ~= 0 or var7 ~= 0 and  var3 == var29 and  var8 ~= 0 then

Looks like local var9 = var1["x"] is no longer modified to local var29 nor is it copied to var29 = var9.