From 705de51459125dc1aaa8767091ed4643e8575109 Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Sat, 10 Oct 2026 22:09:59 +0800 Subject: [PATCH] =?UTF-8?q?fix(includes):=20=E6=B6=88=E9=99=A4=E9=9A=90?= =?UTF-8?q?=E5=BC=8F=E7=AA=84=E5=8C=96=EF=BC=88string.strlen=20=E2=86=92?= =?UTF-8?q?=20int=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 规则收紧后,6 处 string.strlen()(sizet/64 位)隐式落进 int 会报隐式窄化:argparse.vp:204/332、ast/parser.vp:3202/3203/3255/3256 改为显式 int(...);另 gzip.vp:62 的 read_all 容量去掉多余 ULONG(...)(形参已是 sizet)。 --- argparse.vp | 4 ++-- ast/parser.vp | 8 ++++---- gzip.vp | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/argparse.vp b/argparse.vp index 6d5c6dd..51c2225 100644 --- a/argparse.vp +++ b/argparse.vp @@ -201,7 +201,7 @@ class ArgumentParser: """Match prefix for --name=value syntax""" for i in range(self._arg_count): arg: Argument* = self._get_arg(i) - name_len: int = string.strlen(arg.name) + name_len: int = int(string.strlen(arg.name)) # 显式 cast:避免 64→32 隐式窄化 if string.strncmp(token, arg.name, name_len) == 0: if token[name_len] == '=': return i @@ -329,7 +329,7 @@ class ArgumentParser: release(args) return None arg = self._get_arg(found) - arg_name_len: int = string.strlen(arg.name) + arg_name_len: int = int(string.strlen(arg.name)) # 显式 cast:避免 64→32 隐式窄化 value = token + arg_name_len + 1 self._store_value(args, arg, value) idx += 1 diff --git a/ast/parser.vp b/ast/parser.vp index 8b36a03..e5c8bba 100644 --- a/ast/parser.vp +++ b/ast/parser.vp @@ -3199,8 +3199,8 @@ def _parse_from_import(ps: Parser*) -> AST*: _advance(ps) if _cur_type(ps) == TokenType.Name and _cur_kw(ps) == Keyword.NotKeyword: next_name: str = _cur_str(ps) - mlen: int = string.strlen(module_name) - nlen: int = string.strlen(next_name) + mlen: int = int(string.strlen(module_name)) # 显式 cast:避免 64→32 隐式窄化 + nlen: int = int(string.strlen(next_name)) # 显式 cast:避免 64→32 隐式窄化 new_mod: str = ps.pool.alloc(mlen + 1 + nlen + 1) if new_mod is not None: string.strcpy(new_mod, module_name) @@ -3252,8 +3252,8 @@ def _parse_alias_list(ps: Parser*) -> list[AST*]*: _advance(ps) if _cur_type(ps) == TokenType.Name: next_n: str = _cur_str(ps) - nmlen: int = string.strlen(name_str) - nxtlen: int = string.strlen(next_n) + nmlen: int = int(string.strlen(name_str)) # 显式 cast:避免 64→32 隐式窄化 + nxtlen: int = int(string.strlen(next_n)) # 显式 cast:避免 64→32 隐式窄化 new_name: str = ps.pool.alloc(nmlen + 1 + nxtlen + 1) if new_name is not None: string.strcpy(new_name, name_str) diff --git a/gzip.vp b/gzip.vp index 2c81dd1..11867d1 100644 --- a/gzip.vp +++ b/gzip.vp @@ -59,7 +59,7 @@ class GzipFile: f.close() self.err = -4 return - got: LONG = f.read_all(buf, ULONG(self.src_len + 1)) + got: LONG = f.read_all(buf, self.src_len + 1) # 去掉 ULONG 显式窄化:read_all 的 buf_size 形参本就是 sizet,直接以 sizet 传更安全 f.close() if got <= 0 or sizet(got) != self.src_len: stdlib.free(buf)