snapshot before regression test

This commit is contained in:
t
2026-07-18 19:25:40 +08:00
commit 796222a300
2295 changed files with 206453 additions and 0 deletions

161
lib/core/Exportable.py Normal file
View File

@@ -0,0 +1,161 @@
#!/usr/bin/env python3
"""
导出表模块 - 用于收集和存储文件的公开符号信息
"""
from __future__ import annotations
from dataclasses import dataclass, field
from typing import Dict, List, Optional, Any
@dataclass
class EnumMember:
"""枚举成员信息"""
name: str
value: int
lineno: int
@dataclass
class EnumInfo:
"""枚举类型信息"""
name: str
members: List[EnumMember] = field(default_factory=list)
lineno: int = 0
is_public: bool = True
@dataclass
class FunctionParam:
"""函数参数信息"""
name: str
type_name: str
is_pointer: bool = False
@dataclass
class FunctionInfo:
"""函数信息"""
name: str
return_type: str
params: List[FunctionParam] = field(default_factory=list)
lineno: int = 0
is_public: bool = True
@dataclass
class StructMember:
"""结构体成员信息"""
name: str
type_name: str
is_pointer: bool = False
array_size: Optional[int] = None
@dataclass
class StructInfo:
"""结构体类型信息"""
name: str
members: List[StructMember] = field(default_factory=list)
lineno: int = 0
is_public: bool = True
@dataclass
class TypedefInfo:
"""类型别名信息"""
name: str
original_type: str
lineno: int = 0
is_public: bool = True
@dataclass
class Exportable:
"""导出表 - 存储文件的所有公开符号"""
filename: str
enums: List[EnumInfo] = field(default_factory=list)
functions: List[FunctionInfo] = field(default_factory=list)
structs: List[StructInfo] = field(default_factory=list)
typedefs: List[TypedefInfo] = field(default_factory=list)
def add_enum(self, name: str, lineno: int, is_public: bool = True) -> EnumInfo:
"""添加枚举类型"""
enum_info: EnumInfo = EnumInfo(name=name, lineno=lineno, is_public=is_public)
self.enums.append(enum_info)
return enum_info
def add_function(self, name: str, return_type: str, lineno: int, is_public: bool = True) -> FunctionInfo:
"""添加函数"""
func_info: FunctionInfo = FunctionInfo(name=name, return_type=return_type, lineno=lineno, is_public=is_public)
self.functions.append(func_info)
return func_info
def add_struct(self, name: str, lineno: int, is_public: bool = True) -> StructInfo:
"""添加结构体"""
struct_info: StructInfo = StructInfo(name=name, lineno=lineno, is_public=is_public)
self.structs.append(struct_info)
return struct_info
def add_typedef(self, name: str, original_type: str, lineno: int, is_public: bool = True) -> TypedefInfo:
"""添加类型别名"""
typedef_info: TypedefInfo = TypedefInfo(name=name, original_type=original_type, lineno=lineno, is_public=is_public)
self.typedefs.append(typedef_info)
return typedef_info
def to_dict(self) -> Dict[str, Any]:
"""转换为字典格式"""
return {
'filename': self.filename,
'enums': [
{
'name': enum.name,
'lineno': enum.lineno,
'is_public': enum.is_public,
'members': [
{'name': m.name, 'value': m.value, 'lineno': m.lineno}
for m in enum.members
]
}
for enum in self.enums
],
'functions': [
{
'name': func.name,
'return_type': func.return_type,
'lineno': func.lineno,
'is_public': func.is_public,
'params': [
{'name': p.name, 'type_name': p.type_name, 'is_pointer': p.is_pointer}
for p in func.params
]
}
for func in self.functions
],
'structs': [
{
'name': struct.name,
'lineno': struct.lineno,
'is_public': struct.is_public,
'members': [
{
'name': m.name,
'type_name': m.type_name,
'is_pointer': m.is_pointer,
'array_size': m.array_size
}
for m in struct.members
]
}
for struct in self.structs
],
'typedefs': [
{
'name': typedef.name,
'original_type': typedef.original_type,
'lineno': typedef.lineno,
'is_public': typedef.is_public
}
for typedef in self.typedefs
]
}