68 lines
2.4 KiB
Python
68 lines
2.4 KiB
Python
import ast
|
|
import sys
|
|
sys.path.insert(0, 'd:\\Users\\TermiNexus\\Desktop\\TransPyC')
|
|
|
|
from lib.Projectrans.DeclarationGenerator import DeclarationGenerator
|
|
from lib.includes import t
|
|
|
|
# 读取 memhub.pyi
|
|
with open('d:\\Users\\TermiNexus\\Desktop\\TransPyC\\.transpyc_cache\\f3560b99de458aec.pyi', 'r', encoding='utf-8') as f:
|
|
pyi_content = f.read()
|
|
|
|
tree = ast.parse(pyi_content)
|
|
|
|
# 查找 MemBuddy 类
|
|
mem_buddy_node = None
|
|
mem_manager_node = None
|
|
for node in ast.iter_child_nodes(tree):
|
|
if isinstance(node, ast.ClassDef):
|
|
if node.name == 'MemBuddy':
|
|
mem_buddy_node = node
|
|
elif node.name == 'MemManager':
|
|
mem_manager_node = node
|
|
|
|
print(f"Found MemBuddy: {mem_buddy_node is not None}")
|
|
print(f"Found MemManager: {mem_manager_node is not None}")
|
|
|
|
if mem_buddy_node:
|
|
print(f"\nMemBuddy bases: {[ast.dump(b) for b in mem_buddy_node.bases]}")
|
|
print(f"MemBuddy methods: {[item.name for item in mem_buddy_node.body if isinstance(item, ast.FunctionDef)]}")
|
|
|
|
if mem_manager_node:
|
|
print(f"\nMemManager methods: {[item.name for item in mem_manager_node.body if isinstance(item, ast.FunctionDef)]}")
|
|
|
|
# 创建 DeclarationGenerator 实例
|
|
decl_gen = DeclarationGenerator(
|
|
struct_names={'MemManager', 'MemBuddy', 'MemPool', 'MemSlab'},
|
|
enum_names=set(),
|
|
module_sha1='f3560b99de458aec',
|
|
struct_sha1_map={'MemManager': 'f3560b99de458aec', 'MemBuddy': 'f3560b99de458aec'},
|
|
class_def_map={'MemManager': mem_manager_node, 'MemBuddy': mem_buddy_node}
|
|
)
|
|
|
|
# 设置 _pyi_tree
|
|
decl_gen._pyi_tree = tree
|
|
|
|
# 构建 _t_alias_map
|
|
decl_gen._t_alias_map = {}
|
|
for node in ast.iter_child_nodes(tree):
|
|
if isinstance(node, ast.ImportFrom):
|
|
if node.module in ('t', 'c'):
|
|
for alias in node.names:
|
|
name = alias.name
|
|
asname = alias.asname or name
|
|
t_cls = getattr(t, name, None)
|
|
if isinstance(t_cls, type):
|
|
decl_gen._t_alias_map[asname] = t_cls
|
|
|
|
# 测试 _is_marker_base
|
|
print(f"\n_is_marker_base('MemManager'): {decl_gen._is_marker_base('MemManager')}")
|
|
|
|
# 测试 _generate_inherited_method_decls
|
|
if mem_buddy_node:
|
|
struct_type_name = '%"f3560b99de458aec.MemBuddy"'
|
|
decls = decl_gen._generate_inherited_method_decls(mem_buddy_node, 'MemBuddy', struct_type_name)
|
|
print(f"\nInherited method decls ({len(decls)}):")
|
|
for d in decls:
|
|
print(f" {d}")
|