修复了大量存在的问题,增加了假鸭子类型等等机制

This commit is contained in:
2026-06-25 14:49:46 +08:00
parent 19f2787db0
commit d88d11b646
827 changed files with 32617 additions and 18316 deletions

View File

@@ -2,6 +2,7 @@
"""
导出表模块 - 用于收集和存储文件的公开符号信息
"""
from __future__ import annotations
from dataclasses import dataclass, field
from typing import Dict, List, Optional, Any
@@ -79,25 +80,25 @@ class Exportable:
def add_enum(self, name: str, lineno: int, is_public: bool = True) -> EnumInfo:
"""添加枚举类型"""
enum_info = EnumInfo(name=name, lineno=lineno, is_public=is_public)
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(name=name, return_type=return_type, lineno=lineno, is_public=is_public)
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(name=name, lineno=lineno, is_public=is_public)
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(name=name, original_type=original_type, lineno=lineno, is_public=is_public)
typedef_info: TypedefInfo = TypedefInfo(name=name, original_type=original_type, lineno=lineno, is_public=is_public)
self.typedefs.append(typedef_info)
return typedef_info
@@ -167,7 +168,7 @@ class Exportable:
def get_public_symbols(self) -> 'Exportable':
"""获取仅包含公开符号的导出表"""
result = Exportable(filename=self.filename)
result: Exportable = Exportable(filename=self.filename)
result.enums = [e for e in self.enums if e.is_public]
result.functions = [f for f in self.functions if f.is_public]