refactor: 删除保留性兼容兜底,仅保留新语法主路径

移除 len(list) 直读 __count__、list 方法裸模板回退、旧 C* 文本标记兼容、旧联合兼容;vast 扩展过期直接报错,已重建 _parser.pyd。
This commit is contained in:
TermiNexus committed 2026-10-18 19:22:32 +08:00
1 parent f8d84a1941
commit 109e71a477
13 files changed
+72 -232

No files matched your search

+8 -18
View File
@@ -10,7 +10,7 @@ import llvmlite.ir as ir
from lib.core import TypeSystem
from lib.core.TypeSystem import CTypeRegistry
from lib.core.SymbolUtils import (
IsListAnnotation, AnnotationContainsName, IsCPtrSubscriptNode,
IsListAnnotation, IsCPtrSubscriptNode,
IsRawPtrSubscriptNode, IsPtrSubscriptNode, ResolveGenericTypeArgStr,
EnumClassIntWidth, ClassHasFuncLevelCVTable)
@@ -97,9 +97,6 @@ class DeclarationGenerator:
Markers: tuple[str, ...] = tuple(getattr(node, 'Markers', None) or ()) + tuple(
getattr(node.annotation, 'Markers', None) or ())
is_typedef: bool = 'typedef' in Markers
if not is_typedef and AnnotationContainsName(node.annotation, 'CTypedef'):
# 兼容旧写法 `名字: CTypedef = 类型`(仅文本判据回落)。
is_typedef = True
if is_typedef and node.value:
self.typedef_map[var_name] = node.value
@@ -231,7 +228,7 @@ class DeclarationGenerator:
"""检查函数是否导出/外部可见(export / extern / state)。
新语法的 `export def` / `extern def` 由解析器写入 FunctionDef.Export /
Extern;旧语法的 `-> CExport | T` / `-> State | T` 仍走注解兼容判据。
Extern。
"""
if bool(getattr(node, 'Export', False)) or bool(getattr(node, 'Extern', False)):
return True
@@ -243,35 +240,28 @@ class DeclarationGenerator:
return self._check_annotation_for_export(node.returns)
def _check_annotation_for_export(self, annotation: ast.AST | None) -> bool:
"""检查类型注解是否带 export / extern / state 标记。
优先读 AST 的 Markers 字段;旧的 CExport/State 文本判断仅作兼容。
"""
"""检查类型注解是否带 export / extern / state 标记(只读 Markers)。"""
if annotation is None:
return False
Markers: tuple[str, ...] = getattr(annotation, 'Markers', None) or ()
if 'export' in Markers or 'extern' in Markers or 'state' in Markers:
return True
return (AnnotationContainsName(annotation, 'CExport')
or AnnotationContainsName(annotation, 'CExtern')
or AnnotationContainsName(annotation, 'State'))
return 'export' in Markers or 'extern' in Markers or 'state' in Markers
def _generate_global_decl(self, node: ast.AnnAssign) -> str | None:
"""生成全局变量声明"""
if not isinstance(node.target, ast.Name):
return None
var_name: str = node.target.id
# CDefine 是编译期常量,不是变量:stub 里**不得**生成 external global,
# define 是编译期常量,不是变量:stub 里**不得**生成 external global,
# 否则其他模块引用它时变成未定义符号(链接失败)。标记由 Markers 字段承载。
Markers: tuple[str, ...] = tuple(getattr(node, 'Markers', None) or ()) + tuple(
getattr(node.annotation, 'Markers', None) or ())
if 'define' in Markers or AnnotationContainsName(node.annotation, 'CDefine'):
if 'define' in Markers:
return None
if 'typedef' in Markers or AnnotationContainsName(node.annotation, 'CTypedef'):
if 'typedef' in Markers:
return None
if isinstance(node.annotation, ast.List):
for elt in node.annotation.elts:
if isinstance(elt, ast.Attribute) and hasattr(elt, 'attr') and elt.attr in ('CTypedef', 'Callable'):
if isinstance(elt, ast.Attribute) and hasattr(elt, 'attr') and elt.attr == 'Callable':
return None
if isinstance(elt, ast.Subscript) and isinstance(elt.value, ast.Name) and elt.value.id == 'Callable':
return None