unidecompiler-plugin-lua 0.1.4__tar.gz → 0.2.1__tar.gz

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.
Files changed (19) hide show
  1. {unidecompiler_plugin_lua-0.1.4 → unidecompiler_plugin_lua-0.2.1}/PKG-INFO +2 -2
  2. {unidecompiler_plugin_lua-0.1.4 → unidecompiler_plugin_lua-0.2.1}/pyproject.toml +2 -2
  3. {unidecompiler_plugin_lua-0.1.4 → unidecompiler_plugin_lua-0.2.1}/src/unidecompiler_plugin_lua/lifter.py +43 -3
  4. {unidecompiler_plugin_lua-0.1.4 → unidecompiler_plugin_lua-0.2.1}/src/unidecompiler_plugin_lua/plugin.py +6 -0
  5. {unidecompiler_plugin_lua-0.1.4 → unidecompiler_plugin_lua-0.2.1}/src/unidecompiler_plugin_lua.egg-info/PKG-INFO +2 -2
  6. unidecompiler_plugin_lua-0.2.1/src/unidecompiler_plugin_lua.egg-info/requires.txt +1 -0
  7. unidecompiler_plugin_lua-0.1.4/src/unidecompiler_plugin_lua.egg-info/requires.txt +0 -1
  8. {unidecompiler_plugin_lua-0.1.4 → unidecompiler_plugin_lua-0.2.1}/README.md +0 -0
  9. {unidecompiler_plugin_lua-0.1.4 → unidecompiler_plugin_lua-0.2.1}/setup.cfg +0 -0
  10. {unidecompiler_plugin_lua-0.1.4 → unidecompiler_plugin_lua-0.2.1}/src/unidecompiler_plugin_lua/__init__.py +0 -0
  11. {unidecompiler_plugin_lua-0.1.4 → unidecompiler_plugin_lua-0.2.1}/src/unidecompiler_plugin_lua/chunk54.py +0 -0
  12. {unidecompiler_plugin_lua-0.1.4 → unidecompiler_plugin_lua-0.2.1}/src/unidecompiler_plugin_lua/luac.py +0 -0
  13. {unidecompiler_plugin_lua-0.1.4 → unidecompiler_plugin_lua-0.2.1}/src/unidecompiler_plugin_lua/normalize.py +0 -0
  14. {unidecompiler_plugin_lua-0.1.4 → unidecompiler_plugin_lua-0.2.1}/src/unidecompiler_plugin_lua/simulation.py +0 -0
  15. {unidecompiler_plugin_lua-0.1.4 → unidecompiler_plugin_lua-0.2.1}/src/unidecompiler_plugin_lua/support.py +0 -0
  16. {unidecompiler_plugin_lua-0.1.4 → unidecompiler_plugin_lua-0.2.1}/src/unidecompiler_plugin_lua.egg-info/SOURCES.txt +0 -0
  17. {unidecompiler_plugin_lua-0.1.4 → unidecompiler_plugin_lua-0.2.1}/src/unidecompiler_plugin_lua.egg-info/dependency_links.txt +0 -0
  18. {unidecompiler_plugin_lua-0.1.4 → unidecompiler_plugin_lua-0.2.1}/src/unidecompiler_plugin_lua.egg-info/entry_points.txt +0 -0
  19. {unidecompiler_plugin_lua-0.1.4 → unidecompiler_plugin_lua-0.2.1}/src/unidecompiler_plugin_lua.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: unidecompiler-plugin-lua
3
- Version: 0.1.4
3
+ Version: 0.2.1
4
4
  Summary: Lua bytecode frontend plugin for unidecompiler
5
5
  Author-email: Wker <1670133844@qq.com>
6
6
  License-Expression: AGPL-3.0-or-later
@@ -9,7 +9,7 @@ Project-URL: Repository, https://github.com/Wker666/unidecompiler
9
9
  Project-URL: Issues, https://github.com/Wker666/unidecompiler/issues
10
10
  Requires-Python: >=3.11
11
11
  Description-Content-Type: text/markdown
12
- Requires-Dist: unidecompiler<0.2.0,>=0.1.10
12
+ Requires-Dist: unidecompiler<0.3.0,>=0.2.1
13
13
 
14
14
  # unidecompiler-plugin-lua
15
15
 
@@ -4,13 +4,13 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "unidecompiler-plugin-lua"
7
- version = "0.1.4"
7
+ version = "0.2.1"
8
8
  description = "Lua bytecode frontend plugin for unidecompiler"
9
9
  readme = "README.md"
10
10
  license = "AGPL-3.0-or-later"
11
11
  authors = [{ name = "Wker", email = "1670133844@qq.com" }]
12
12
  requires-python = ">=3.11"
13
- dependencies = ["unidecompiler>=0.1.10,<0.2.0"]
13
+ dependencies = ["unidecompiler>=0.2.1,<0.3.0"]
14
14
 
15
15
  [project.urls]
16
16
  Homepage = "https://github.com/Wker666/unidecompiler"
@@ -41,6 +41,7 @@ from unidecompiler.core.vm_region import (
41
41
  VMStatefulCallbacks,
42
42
  build_hint_region_profile,
43
43
  )
44
+ from unidecompiler.progress import ProgressReporter, report_progress
44
45
  from unidecompiler_plugin_lua.luac import LuaChunk, LuaFunctionListing
45
46
 
46
47
 
@@ -919,10 +920,17 @@ LUA_EFFECT_TABLE = VMEffectTable(
919
920
  )
920
921
 
921
922
 
922
- def lift_lua_chunk(chunk: LuaChunk, metadata: dict) -> ModuleIR:
923
+ def lift_lua_chunk(
924
+ chunk: LuaChunk,
925
+ metadata: dict,
926
+ *,
927
+ reporter: ProgressReporter | None = None,
928
+ ) -> ModuleIR:
923
929
  functions: tuple[FunctionIR, ...]
924
930
  if chunk.functions:
925
- root, next_index = _lift_lua_function_tree(chunk.functions, 0)
931
+ total = len(chunk.functions)
932
+ report_progress(reporter, phase="lift", status="started", completed=0, total=total, unit="function", message="lifting Lua functions")
933
+ root, next_index = _lift_lua_function_tree(chunk.functions, 0, reporter=reporter, total=total, progress=[0])
926
934
  if next_index != len(chunk.functions):
927
935
  raise ValueError("incomplete Lua function tree reconstruction")
928
936
  functions = (root,)
@@ -950,8 +958,23 @@ def lift_lua_chunk(chunk: LuaChunk, metadata: dict) -> ModuleIR:
950
958
  def _lift_lua_function_tree(
951
959
  listings: tuple[LuaFunctionListing, ...],
952
960
  index: int,
961
+ *,
962
+ reporter: ProgressReporter | None = None,
963
+ total: int | None = None,
964
+ progress: list[int] | None = None,
953
965
  ) -> tuple[FunctionIR, int]:
954
966
  listing = listings[index]
967
+ item_label = listing.inferred_name or listing.source or f"function {index + 1}"
968
+ if reporter is not None and total is not None and progress is not None:
969
+ report_progress(
970
+ reporter,
971
+ phase="lift",
972
+ completed=progress[0],
973
+ total=total,
974
+ unit="function",
975
+ item_label=item_label,
976
+ message=f"lifting {item_label}",
977
+ )
955
978
  function_ir = recover_vm_function(
956
979
  _lua_function_spec(listing),
957
980
  lambda: lift_lua_function(listing),
@@ -960,10 +983,27 @@ def _lift_lua_function_tree(
960
983
  for instruction in listing.instructions
961
984
  ),
962
985
  )
986
+ if reporter is not None and total is not None and progress is not None:
987
+ progress[0] += 1
988
+ report_progress(
989
+ reporter,
990
+ phase="lift",
991
+ completed=progress[0],
992
+ total=total,
993
+ unit="function",
994
+ item_label=item_label,
995
+ message=f"lifted {item_label}",
996
+ )
963
997
  next_index = index + 1
964
998
  nested_functions: list[FunctionIR] = []
965
999
  for _ in range(listing.child_function_count):
966
- nested_function, next_index = _lift_lua_function_tree(listings, next_index)
1000
+ nested_function, next_index = _lift_lua_function_tree(
1001
+ listings,
1002
+ next_index,
1003
+ reporter=reporter,
1004
+ total=total,
1005
+ progress=progress,
1006
+ )
967
1007
  nested_functions.append(nested_function)
968
1008
  return replace(function_ir, nested_functions=tuple(nested_functions)), next_index
969
1009
 
@@ -2,6 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  from unidecompiler.core.ir import ModuleIR
4
4
  from unidecompiler.plugins import FrontendModule
5
+ from unidecompiler.progress import ProgressReporter
5
6
  from unidecompiler_plugin_lua.lifter import lift_lua_chunk
6
7
  from unidecompiler_plugin_lua.chunk54 import decode_lua54_chunk, Lua54ChunkError
7
8
  from unidecompiler_plugin_lua.luac import (
@@ -69,6 +70,11 @@ class LuaFrontendPlugin:
69
70
 
70
71
  return lift_lua_chunk(module.payload, module.metadata)
71
72
 
73
+ def lift_with_progress(self, module: FrontendModule, reporter: ProgressReporter) -> ModuleIR:
74
+ if module.frontend_id != self.id:
75
+ raise TypeError(f"Lua frontend cannot lift module from {module.frontend_id!r}")
76
+ return lift_lua_chunk(module.payload, module.metadata, reporter=reporter)
77
+
72
78
 
73
79
  class Lua54BinaryChunkDecoder:
74
80
  id = "lua54-binary"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: unidecompiler-plugin-lua
3
- Version: 0.1.4
3
+ Version: 0.2.1
4
4
  Summary: Lua bytecode frontend plugin for unidecompiler
5
5
  Author-email: Wker <1670133844@qq.com>
6
6
  License-Expression: AGPL-3.0-or-later
@@ -9,7 +9,7 @@ Project-URL: Repository, https://github.com/Wker666/unidecompiler
9
9
  Project-URL: Issues, https://github.com/Wker666/unidecompiler/issues
10
10
  Requires-Python: >=3.11
11
11
  Description-Content-Type: text/markdown
12
- Requires-Dist: unidecompiler<0.2.0,>=0.1.10
12
+ Requires-Dist: unidecompiler<0.3.0,>=0.2.1
13
13
 
14
14
  # unidecompiler-plugin-lua
15
15
 
@@ -0,0 +1 @@
1
+ unidecompiler<0.3.0,>=0.2.1
@@ -1 +0,0 @@
1
- unidecompiler<0.2.0,>=0.1.10