Files
Viper_VRTE/stdarg.vp
T
TermiNexus 05b2b7162d feat(stdarg): arg 声明补返回类型;viperlib 改用 arg(T) 读转发 va_list
stdarg.vp 的 arg 原本缺返回类型(与 va_arg 不对称,存根拿不到可用返回类型),补 -> t.CPtr 并注明它是编译器拦截的糖;viperlib 的 vsnprintf 第 4 个形参 ap 改名 args(vprintf 式转发的 va_list 是「按名 args 解析」的约定),内部 24 处 va_arg(ap, ...) / va_arg(ap) 全部改为 arg(...) / arg(),import 收敛为 from stdarg import arg。
2026-10-07 20:15:25 +08:00

14 lines
590 B
Plaintext

import t
extern def va_start(args: t.CPtr, last_arg: t.CPtr)
extern def va_arg(args: t.CPtr, type: t.CPtr) -> t.CPtr
extern def va_end(args: t.CPtr)
va_list: t.CTypedef = uchar*
# `arg` is a compiler-intercepted sugar (never a real symbol): `arg(T)` reads the next variadic
# argument from the *enclosing* variadic function's implicit va_list, and `arg()` infers the
# width from the assignment context. The declaration mirrors va_arg so the generated stub carries
# a usable return type; the `type` argument is a type literal, not an ABI operand.
extern def arg(type: t.CPtr) -> t.CPtr