docs(types): 同步 list 相关注释,list[T, N] 不是定长数组
- TypeGenResolve._is_count_arg_container:说明把 list 纳入判据只是为了历史写法 list[E, N] 的第 2 实参不被误当类名归一;list 本体是 _list.vp 的堆上 STL 容器 - AssignGenMixin:注释示例由 list[type] / list[type, N] 改为 CArray 形态
This commit is contained in:
1 parent
8d01c01afd
commit
0b7f7a50c7
2 files changed
+7
-4
No files matched your search
@@ -1698,7 +1698,7 @@ novirtual class AssignGenMixin:
|
||||
# 单参形式(t.CArray[elem_ty])与 count=None 形式(t.CArray[elem_ty, None])
|
||||
# 都解析为 Ptr(elem_ty)。当 RHS 是列表字面量时,按 TPC 语义应推断为
|
||||
# 静态数组 [len x elem_ty](对齐 TPC ParseListAnnotation 的 is_pointer 分支:
|
||||
# "单参数 list[type] → 指针,但如果有列表字面量初始化值则按数组 list[type, N] 处理")。
|
||||
# "单参数 CArray[type] → 指针,但如果有列表字面量初始化值则按数组 CArray[type, N] 处理")。
|
||||
# ============================================================
|
||||
def _is_single_param_carray_annot(self, annot: ast.AST*) -> int:
|
||||
"""检查注解是否为单参/None 长度 t.CArray[...],返回 1=是 0=否
|
||||
|
||||
@@ -366,7 +366,9 @@ novirtual class TypeGenResolve(TypeGenBase.TypeGenBase):
|
||||
|
||||
依据是容器本身的定义(不是我猜的):TPC 侧 t.CArray 明写"第一个参数为元素类型,
|
||||
第二个参数为数组大小(整数或常量名)"(lib/includes/t.py CArray);`list[T, N]`
|
||||
是同义的定长数组写法(TPC _HandleListLlvm 的 'list[T, N]' 分支)。
|
||||
与 includes/_list.vp 的堆上 STL 容器 `list` 无关(`list[T, N]` 不是定长数组);
|
||||
这里把 list 一并纳入,只是因为历史写法 `list[E, N]` 的第 2 实参是常量,
|
||||
须避免它被误当类名归一。
|
||||
故这两个容器的第 2 实参是常量表达式 —— 对它做"裸类名 → {定义模块SHA1}.类"归一
|
||||
既无意义,又会落进 `_norm_type_arg_name` 规则 5.5 的"保留裸名"取证 ⇒ 误报为
|
||||
"类名归属缺失"。
|
||||
@@ -374,8 +376,9 @@ novirtual class TypeGenResolve(TypeGenBase.TypeGenBase):
|
||||
`FrameAddr: t.CArray[uint64, TRACEBACK_FRAME_BUF]` 的第 2 实参
|
||||
'TRACEBACK_FRAME_BUF' 是 traceback.vp:482 的 `TRACEBACK_FRAME_BUF: t.CDefine = 128`。
|
||||
|
||||
判据只认**容器短名**(剥模块限定前缀,兼容 `tt.CArray` 这类别名):CArray / list。
|
||||
泛型类(list 之外的 GSList[T]、Box[T]…)的实参全是类型名,不受此判据影响。
|
||||
判据只认**容器短名**(剥模块限定前缀,兼容 `tt.CArray` 这类别名):CArray;
|
||||
另兼容历史写法 `list[E, N]`(`list` 本体是 _list.vp 的泛型容器,第 2 实参不是类型名)。
|
||||
其余泛型类(GSList[T]、Box[T]…)的实参全是类型名,不受此判据影响。
|
||||
"""
|
||||
if container is None or container[0] == '\0':
|
||||
return 0
|
||||
|
||||
Reference in new issue
Block a user