shithub: mc

Download patch

ref: be7a20c98489d1c140cee53ef29e046025afa3ce
parent: 125d94765ebb698b565c859a7266a885adbbf7f7
author: Ori Bernstein <[email protected]>
date: Tue Aug 7 05:52:46 EDT 2012

Add varargs API

--- /dev/null
+++ b/varargs.myr
@@ -1,0 +1,35 @@
+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 sz
+	var p
+
+	if sizeof(@a) > 8
+		sz = 8
+	else
+		sz = sizeof(@a)
+	;;
+
+	p = ap castto(intptr)
+	p = (p + sz - 1) & ~(sz - 1)
+	ap = p castto(valist)
+
+	v = *(ap castto(@a*))
+
+	ap = ((p castto(intptr)) + sz) castto(valist)
+	-> (v, ap)
+}