ref: 87acad0c11beb15c6d32deeef2fb75585c71d5c2
dir: /varargs.myr/
use "types.use"
pkg std =
type valist
const vastart : (args : ...* -> valist)
generic vanext : (ap : valist -> [@a, valist])
;;
type valist = byte*
const vastart = {args
-> args castto(valist)
}
generic vanext = {ap -> [@a, valist]
var v : @a
var align
var p
if sizeof(@a) > 8
align = 8
else
align = sizeof(@a)
;;
p = ap castto(intptr)
p = (p + align - 1) & ~(align - 1)
ap = p castto(valist)
v = *(ap castto(@a*))
ap = ((p castto(intptr)) + sizeof(@a)) castto(valist)
-> (v, ap)
}