summaryrefslogtreecommitdiffstats
path: root/lib.c
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2015-12-16 04:21:55 -0800
committerKaz Kylheku <kaz@kylheku.com>2015-12-16 04:21:55 -0800
commitb860fe2ea8450109c4bcc0de755bccac40f377ef (patch)
tree38bcf0e084502ff2a676a3441d57d753f360f425 /lib.c
parent9bd8fabc9f45dbdb7c66c44f255904ab62df4ee3 (diff)
downloadtxr-b860fe2ea8450109c4bcc0de755bccac40f377ef.tar.gz
txr-b860fe2ea8450109c4bcc0de755bccac40f377ef.tar.bz2
txr-b860fe2ea8450109c4bcc0de755bccac40f377ef.zip
Support eight-argument intrinsic functions.
* lib.h (enum functype): New member, N8. (struct func): New members n8 and n8v in embedded f struct. (func_n8, func_n8v, func_n70, func_n8o): Declared. * lib.c (equal): Handle N8 in switch. (func_n8, func_n8v, func_n70, func_n8o): New functions. (generic_funcall): Handle N8 in two switches.
Diffstat (limited to 'lib.c')
-rw-r--r--lib.c46
1 files changed, 46 insertions, 0 deletions
diff --git a/lib.c b/lib.c
index 6041a11e..c87c2360 100644
--- a/lib.c
+++ b/lib.c
@@ -2139,6 +2139,7 @@ val equal(val left, val right)
case N5: return (left->f.f.n5 == right->f.f.n5) ? t : nil;
case N6: return (left->f.f.n6 == right->f.f.n6) ? t : nil;
case N7: return (left->f.f.n7 == right->f.f.n7) ? t : nil;
+ case N8: return (left->f.f.n8 == right->f.f.n8) ? t : nil;
}
return nil;
}
@@ -4526,6 +4527,20 @@ val func_n7(val (*fun)(val, val, val, val, val, val, val))
return obj;
}
+val func_n8(val (*fun)(val, val, val, val, val, val, val, val))
+{
+ val obj = make_obj();
+ obj->f.type = FUN;
+ obj->f.functype = N8;
+ obj->f.env = nil;
+ obj->f.f.n8 = fun;
+ obj->f.variadic = 0;
+ obj->f.fixparam = 8;
+ obj->f.optargs = 0;
+ return obj;
+}
+
+
val func_f0v(val env, val (*fun)(val, varg))
{
val obj = make_obj();
@@ -4695,6 +4710,19 @@ val func_n7v(val (*fun)(val, val, val, val, val, val, val, varg))
return obj;
}
+val func_n8v(val (*fun)(val, val, val, val, val, val, val, val, varg))
+{
+ val obj = make_obj();
+ obj->f.type = FUN;
+ obj->f.functype = N8;
+ obj->f.env = nil;
+ obj->f.f.n8v = fun;
+ obj->f.variadic = 1;
+ obj->f.fixparam = 8;
+ obj->f.optargs = 0;
+ return obj;
+}
+
val func_n1o(val (*fun)(val), int reqargs)
{
val obj = func_n1(fun);
@@ -4737,6 +4765,20 @@ val func_n6o(val (*fun)(val, val, val, val, val, val), int reqargs)
return obj;
}
+val func_n7o(val (*fun)(val, val, val, val, val, val, val), int reqargs)
+{
+ val obj = func_n7(fun);
+ obj->f.optargs = 7 - reqargs;
+ return obj;
+}
+
+val func_n8o(val (*fun)(val, val, val, val, val, val, val, val), int reqargs)
+{
+ val obj = func_n8(fun);
+ obj->f.optargs = 8 - reqargs;
+ return obj;
+}
+
val func_n1ov(val (*fun)(val, varg), int reqargs)
{
val obj = func_n1v(fun);
@@ -4936,6 +4978,8 @@ val generic_funcall(val fun, struct args *args_in)
return fun->f.f.n6(z(arg[0]), z(arg[1]), z(arg[2]), z(arg[3]), z(arg[4]), z(arg[5]));
case N7:
return fun->f.f.n7(z(arg[0]), z(arg[1]), z(arg[2]), z(arg[3]), z(arg[4]), z(arg[5]), z(arg[6]));
+ case N8:
+ return fun->f.f.n8(z(arg[0]), z(arg[1]), z(arg[2]), z(arg[3]), z(arg[4]), z(arg[5]), z(arg[6]), z(arg[7]));
case FINTERP:
internal_error("unsupported function type");
}
@@ -4986,6 +5030,8 @@ val generic_funcall(val fun, struct args *args_in)
return fun->f.f.n6v(z(arg[0]), z(arg[1]), z(arg[2]), z(arg[3]), z(arg[4]), z(arg[5]), args);
case N7:
return fun->f.f.n7v(z(arg[0]), z(arg[1]), z(arg[2]), z(arg[3]), z(arg[4]), z(arg[5]), z(arg[6]), args);
+ case N8:
+ return fun->f.f.n8v(z(arg[0]), z(arg[1]), z(arg[2]), z(arg[3]), z(arg[4]), z(arg[5]), z(arg[6]), z(arg[7]), args);
}
}