将 EnumName/value/IsSigned 加入 FIELD_ROUTES,消除所有冗余 hasattr/getattr
This commit is contained in:
79
lib/core/SymbolData.py
Normal file
79
lib/core/SymbolData.py
Normal file
@@ -0,0 +1,79 @@
|
||||
"""符号表处理的数据结构:四阶段管线中传递的中间数据"""
|
||||
from __future__ import annotations
|
||||
from dataclasses import dataclass, field
|
||||
from typing import Any, Dict, List, Optional, Tuple
|
||||
|
||||
|
||||
@dataclass
|
||||
class ClassSymbolData:
|
||||
"""从 AST 提取的类符号数据"""
|
||||
name: str
|
||||
type_kind: str # 'struct', 'union', 'enum', 'exception'
|
||||
lineno: int
|
||||
members: Dict[str, Any]
|
||||
is_cpython_object: bool = False
|
||||
is_packed: bool = False
|
||||
enum_members: List[Tuple[str, int, int]] = field(default_factory=list) # (name, value, lineno)
|
||||
|
||||
|
||||
@dataclass
|
||||
class TypedefSymbolData:
|
||||
"""Typedef 符号数据(含原始注解和解析结果)"""
|
||||
name: str
|
||||
lineno: int
|
||||
# 原始注解数据(由 Extractor 设置,Resolver 使用)
|
||||
annotation: Any = None
|
||||
value: Any = 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
|
||||
members: Optional[Dict] = None
|
||||
|
||||
|
||||
@dataclass
|
||||
class FuncSymbolData:
|
||||
"""函数符号数据(含原始注解和解析结果)"""
|
||||
name: str
|
||||
lineno: int
|
||||
# 原始数据(由 Extractor 设置)
|
||||
returns_node: Any = None
|
||||
params: List = field(default_factory=list) # [(name, annotation_node), ...]
|
||||
is_variadic: bool = False
|
||||
is_inline: bool = False
|
||||
# 解析结果(由 Resolver 设置)
|
||||
ret_type: Any = None
|
||||
param_types: List = field(default_factory=list) # [str, ...]
|
||||
|
||||
|
||||
@dataclass
|
||||
class DefineSymbolData:
|
||||
"""Define 符号数据(含原始值和解析结果)"""
|
||||
name: str
|
||||
lineno: int
|
||||
# 原始数据(由 Extractor 设置)
|
||||
value_node: Any = None
|
||||
# 解析结果(由 Resolver 设置)
|
||||
value: Any = None
|
||||
|
||||
|
||||
@dataclass
|
||||
class AnonymousTypeData:
|
||||
"""匿名类型数据"""
|
||||
name: str
|
||||
is_union: bool
|
||||
members: Dict[str, Any]
|
||||
lineno: int
|
||||
|
||||
|
||||
@dataclass
|
||||
class ModuleSymbols:
|
||||
"""从模块提取的完整符号数据,在四阶段管线中传递"""
|
||||
file_path: str
|
||||
classes: List[ClassSymbolData] = field(default_factory=list)
|
||||
typedefs: List[TypedefSymbolData] = field(default_factory=list)
|
||||
functions: List[FuncSymbolData] = field(default_factory=list)
|
||||
defines: List[DefineSymbolData] = field(default_factory=list)
|
||||
anonymous_types: Dict[str, AnonymousTypeData] = field(default_factory=dict)
|
||||
Reference in New Issue
Block a user