feat(lifetime): stdlib.free 标注 @life(willFree(p)),声明实参在调用后失效

P2 标注驱动:编译器据此把调用点对应实参变量标为已失效,其后读/传/再 free 报 LifetimeError。
This commit is contained in:
TermiNexus committed 2026-10-08 21:28:55 +08:00
1 parent 770e389360
commit bfc773787d
1 file changed
+8 -8
+8 -8
View File
@@ -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)