refactor(includes): R12 下标 while 循环改 for range,R13 c.Set 迁移为赋值

R12(wiki/新规范 L27-39):把「i: int = 0 与 while i < N: … i += 1」形式的下标循环改写为「for i in range(N):」。保守判定:仅当条件为裸 NAME < EXPR、循环体无 continue、NAME 在体内无其它赋值、无嵌套重绑定、循环后同层不再引用 NAME 时才改写。共 269 处 / 48 文件。

R13:c.Set 是正在退化的路径——c.Set(*p, v) 期望写作 *p = v,c.Set(a, b) 等于 a = b。本次把 includes 内 45 处 c.Set 全部迁移为赋值,includes 已无 c.Set 调用。

验证:bootstrap 三重重编 SUCCESS(无 vast_c 解析回退);全量 77/77 顺序回归通过;ZlibTest 内部断言 79 passed / 0 failed。
This commit is contained in:
TermiNexus committed 2026-10-05 15:33:52 +08:00
1 parent 3e1ed0992b
commit 27121f56a7
27 files changed
+208 -534

No files matched your search

+1 -3
View File
@@ -1004,12 +1004,10 @@ def _read_operator(lx: rawptr[Lexer]):
if cur.length <= int(remaining):
# Compare cur.name with src[pos:pos+cur.length]
Matched: int = 1
i: sizet = 0
while i < sizet(cur.length):
for i in range(sizet(cur.length)):
if lx.src[lx.pos + i] != cur.name[i]:
Matched = 0
break
i += 1
if Matched != 0:
if cur.length > best_len:
best_len = cur.length
+11 -33
View File
@@ -635,10 +635,8 @@ def _ParseVirtualModified(ps: rawptr[Parser], parent: rawptr[AST]):
return
if ps.pending_decorators is not None:
dn: sizet = len(ps.pending_decorators)
di: sizet = 0
while di < dn:
for di in range(dn):
merged.append(ps.pending_decorators.get(di))
di += 1
merged.append(marker)
ps.pending_decorators = merged
stmt: rawptr[AST] = None
@@ -719,10 +717,8 @@ def _ParseInlineModified(ps: rawptr[Parser], parent: rawptr[AST]):
return
if ps.pending_decorators is not None:
dn: sizet = len(ps.pending_decorators)
di: sizet = 0
while di < dn:
for di in range(dn):
merged.append(ps.pending_decorators.get(di))
di += 1
merged.append(marker)
ps.pending_decorators = merged
stmt: rawptr[AST] = _parse_funcdef(ps, 0)
@@ -840,10 +836,8 @@ def _ParseStaticModified(ps: rawptr[Parser], parent: rawptr[AST]) -> int:
return 1
if ps.pending_decorators is not None:
dn: sizet = len(ps.pending_decorators)
di: sizet = 0
while di < dn:
for di in range(dn):
merged.append(ps.pending_decorators.get(di))
di += 1
merged.append(marker)
ps.pending_decorators = merged
stmt: rawptr[AST] = _parse_funcdef(ps, 0)
@@ -1012,12 +1006,10 @@ def _dbg_lookup_lit_val(ptr: uint64) -> double:
_g_dbg_lit_found = 0
if _g_dbg_pts is None or _g_dbg_vals is None:
return 0.0
i: sizet = 0
while i < _g_dbg_cnt:
for i in range(_g_dbg_cnt):
if _g_dbg_pts[i] == ptr:
_g_dbg_lit_found = 1
return _g_dbg_vals[i]
i += 1
return 0.0
@@ -1107,11 +1099,9 @@ def _fix_store_ctx(node: rawptr[AST]):
tp_elts = ls.elts
if tp_elts is not None:
n: sizet = tp_elts.__len__()
i: sizet = 0
while i < n:
for i in range(n):
cur: rawptr[AST] = tp_elts.get(i)
_fix_store_ctx(cur)
i += 1
elif k == ASTKind.Starred:
st2: rawptr[Starred] = (rawptr[Starred])(node)
_fix_store_ctx(st2.value)
@@ -2642,13 +2632,11 @@ def _parse_type_ann(ps: rawptr[Parser]) -> rawptr[AST]:
ac: Call* = Call*(ac_node)
if ac.args is not None:
acn: sizet = len(ac.args)
aci: sizet = 0
while aci < acn:
for aci in range(acn):
mk: rawptr[AST] = _MakeTAttrMarker(ps, ac.args.get(aci))
if mk is not None:
mods.append(mk)
mod_count += 1
aci += 1
continue
mods.append(_MakeDescriptorMarker(ps))
mod_count += 1
@@ -2710,13 +2698,11 @@ def _parse_type_ann(ps: rawptr[Parser]) -> rawptr[AST]:
_advance(ps)
ptr_level += 1
# 嵌套构造 rawptr[base](n 层)
li_an: int = 0
while li_an < ptr_level:
for li_an in range(ptr_level):
cptr_an: rawptr[AST] = Attribute(ps.pool,
Name(ps.pool, "t", ASTCtx.Load),
"CPtr", ASTCtx.Load)
base = BinOp(ps.pool, base, OpKind.BitOr, cptr_an)
li_an += 1
# 描述符最后粘贴:与 TPC 文本展开同形(见 _PrependDescriptorMarkers)
if mod_count > 0:
base = _PrependDescriptorMarkers(ps, base, mods, mod_count)
@@ -3750,8 +3736,7 @@ def _convert_enum_bare_members(ps: rawptr[Parser], node: rawptr[ClassDef]):
# 与 AST.append(base.vp:358 `self.children = list[rawptr[AST]](...)`)逐字同形。
node.children = list[rawptr[AST]](ps.pool, 8)
out: rawptr[list[rawptr[AST]]] = node.children
i: sizet = 0
while i < cn:
for i in range(cn):
stmt: rawptr[AST] = children.get(i)
handled: int = 0
if stmt is not None and stmt.kind() == ASTKind.Expr:
@@ -3783,7 +3768,6 @@ def _convert_enum_bare_members(ps: rawptr[Parser], node: rawptr[ClassDef]):
handled = 1
if handled == 0 and stmt is not None:
out.append(stmt)
i += 1
def _parse_define_const(ps: rawptr[Parser]) -> rawptr[AST]:
@@ -4170,10 +4154,8 @@ def _parse_structdef(ps: rawptr[Parser]) -> rawptr[AST]:
if merged is not None:
if dec_list is not None:
dn_s: sizet = len(dec_list)
di_s: sizet = 0
while di_s < dn_s:
for di_s in range(dn_s):
merged.append(dec_list.get(di_s))
di_s += 1
merged.append(marker)
node: rawptr[ClassDef] = ClassDef(ps.pool, name, bases, keywords, merged, type_params)
# owner_is_class=1:与 class 同口径(类体期间 ps.in_class_body=1)
@@ -4182,8 +4164,7 @@ def _parse_structdef(ps: rawptr[Parser]) -> rawptr[AST]:
chk: rawptr[list[rawptr[AST]]] = node.children
if chk is not None:
cn_s: sizet = len(chk)
ci_s: sizet = 0
while ci_s < cn_s:
for ci_s in range(cn_s):
it_s: rawptr[AST] = chk.get(ci_s)
if it_s is not None and it_s.kind() == ASTKind.FunctionDef:
fd_s: rawptr[FunctionDef] = (rawptr[FunctionDef])(it_s)
@@ -4196,7 +4177,6 @@ def _parse_structdef(ps: rawptr[Parser]) -> rawptr[AST]:
"若确实需要方法与虚表,请把该类型写成 class。")
ps.error_count += 1
break
ci_s += 1
_set_pos(node, lineno, col, 0, 0)
return node
@@ -4802,12 +4782,10 @@ def _DesugarMagicAttribute(ps: rawptr[Parser], expr: AST*) -> AST*:
return expr
if cl.args is not None:
an: sizet = len(cl.args)
ai: sizet = 0
while ai < an:
for ai in range(an):
mk: AST* = _MakeTAttrMarker(ps, cl.args.get(ai))
if mk is not None:
new_args.append(mk)
ai += 1
new_call: AST* = Call(ps.pool, c_func, new_args, None)
_set_pos(new_call, cl.lineno, cl.col_offset, 0, 0)
return new_call
+3 -9
View File
@@ -291,8 +291,7 @@ def _kw_index_put(entry: rawptr[KwEntry]):
h: uint64 = _kw_hash_str(entry.name)
mask: sizet = sizet(_KW_IDX_CAP - 1)
idx: sizet = sizet(h) & mask
i: int = 0
while i < _KW_IDX_CAP:
for i in range(_KW_IDX_CAP):
slot: sizet* = (sizet*)(t.CPtr(uint64(_kw_index) + uint64(idx * 8)))
cur_s: sizet = slot[0]
if cur_s == 0:
@@ -302,7 +301,6 @@ def _kw_index_put(entry: rawptr[KwEntry]):
if string.strcmp(cur.name, entry.name) == 0:
return
idx = (idx + 1) & mask
i += 1
def _kw_intern(pool: rawptr[memhub.MemManager], name: str, kw_id: int):
@@ -337,8 +335,7 @@ def _kw_lookup(name: str) -> int:
h: uint64 = _kw_hash_str(name)
mask: sizet = sizet(_KW_IDX_CAP - 1)
idx: sizet = sizet(h) & mask
i: int = 0
while i < _KW_IDX_CAP:
for i in range(_KW_IDX_CAP):
slot: sizet* = (sizet*)(t.CPtr(uint64(_kw_index) + uint64(idx * 8)))
cur_s: sizet = slot[0]
if cur_s == 0:
@@ -347,7 +344,6 @@ def _kw_lookup(name: str) -> int:
if string.strcmp(cur.name, name) == 0:
return cur.kw_id
idx = (idx + 1) & mask
i += 1
return 0
cur2: rawptr[KwEntry] = _kw_head
while cur2 != None:
@@ -557,10 +553,8 @@ def token_set_str(pool: rawptr[memhub.MemManager], tok: rawptr[Token],
buf: str = pool.alloc(length + 1)
if buf == None:
_ast_pool_fatal("token.str_val", length + 1)
i: sizet = 0
while i < length:
for i in range(length):
buf[i] = src[start + i]
i += 1
buf[length] = '\0'
tok.str_val = buf