From bfc773787dbe8d0987ad9ed6cf60000c4ada9b1d Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Thu, 8 Oct 2026 21:28:55 +0800 Subject: [PATCH] =?UTF-8?q?feat(lifetime):=20stdlib.free=20=E6=A0=87?= =?UTF-8?q?=E6=B3=A8=20@life(willFree(p))=EF=BC=8C=E5=A3=B0=E6=98=8E?= =?UTF-8?q?=E5=AE=9E=E5=8F=82=E5=9C=A8=E8=B0=83=E7=94=A8=E5=90=8E=E5=A4=B1?= =?UTF-8?q?=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit P2 标注驱动:编译器据此把调用点对应实参变量标为已失效,其后读/传/再 free 报 LifetimeError。 --- stdlib.vp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/stdlib.vp b/stdlib.vp index 2a90d73..88ebf5b 100644 --- a/stdlib.vp +++ b/stdlib.vp @@ -1,10 +1,10 @@ -from stdint import * -import t - - -extern def malloc(size: sizet) -> t.CPtr -extern def calloc(nmemb: sizet, size: sizet) -> t.CPtr -extern def realloc(p: t.CPtr, size: sizet) -> t.CPtr -extern def free(p: t.CPtr) +extern def malloc(size: sizet) -> rawptr +extern def calloc(nmemb: sizet, size: sizet) -> rawptr +extern def realloc(p: rawptr, size: sizet) -> rawptr +# P2 生命期标注:被标注的形参所指对象在**本调用返回后失效**(由被调用者释放/接管)。 +# 调用点据此把对应实参变量槽标为"已失效",其后读/取址/再传 → LifetimeError(fail-fast)。 +# 写法二选一:形参名 willFree(p) 或形参位置序号 willFree(0)(0 起,self/cls 计入)。 +@life(willFree(p)) +extern def free(p: rawptr) extern def system(cmd: const str) -> int extern def exit(status: int)