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

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

@@ -1,7 +1,11 @@
"""符号表处理的数据结构:四阶段管线中传递的中间数据"""
from __future__ import annotations
from dataclasses import dataclass, field
from typing import Any, Dict, List, Optional, Tuple
from typing import Dict, List, Optional, Tuple, TYPE_CHECKING
import ast
if TYPE_CHECKING:
from lib.core.Handles.HandlesBase import CTypeInfo
@dataclass
@@ -10,7 +14,7 @@ class ClassSymbolData:
name: str
type_kind: str # 'struct', 'union', 'enum', 'exception'
lineno: int
members: Dict[str, Any]
members: Dict[str, CTypeInfo]
is_cpython_object: bool = False
is_packed: bool = False
enum_members: List[Tuple[str, int, int]] = field(default_factory=list) # (name, value, lineno)
@@ -22,14 +26,14 @@ class TypedefSymbolData:
name: str
lineno: int
# 原始注解数据(由 Extractor 设置Resolver 使用)
annotation: Any = None
value: Any = None
annotation: ast.expr | None = None
value: ast.expr | int | str | float | None = None
has_cdefine: bool = False
has_postdef: bool = False
has_ctypedef: bool = False
# 解析结果(由 Resolver 设置Inserter 使用)
original_type_kind: Optional[str] = None
original_class: Any = None
original_class: type | None = None
members: Optional[Dict] = None
@@ -39,13 +43,15 @@ class FuncSymbolData:
name: str
lineno: int
# 原始数据(由 Extractor 设置)
returns_node: Any = None
returns_node: ast.expr | None = None
params: List = field(default_factory=list) # [(name, annotation_node), ...]
is_variadic: bool = False
is_inline: bool = False
# 解析结果(由 Resolver 设置)
ret_type: Any = None
ret_type: str | None = None
param_types: List = field(default_factory=list) # [str, ...]
# 解析结果CTypeInfo保留符号性由 Resolver 设置)
ret_ctype: Optional[CTypeInfo] = None
@dataclass
@@ -54,9 +60,9 @@ class DefineSymbolData:
name: str
lineno: int
# 原始数据(由 Extractor 设置)
value_node: Any = None
value_node: ast.expr | None = None
# 解析结果(由 Resolver 设置)
value: Any = None
value: int | str | float | None = None
@dataclass
@@ -64,7 +70,7 @@ class AnonymousTypeData:
"""匿名类型数据"""
name: str
is_union: bool
members: Dict[str, Any]
members: Dict[str, CTypeInfo]
lineno: int