summaryrefslogtreecommitdiff
path: root/functions.c
diff options
context:
space:
mode:
authorPeter Mikkelsen <petermikkelsen10@gmail.com>2022-01-21 16:05:41 +0000
committerPeter Mikkelsen <petermikkelsen10@gmail.com>2022-01-21 16:05:41 +0000
commit80ebae7887e21f58ef09a18515e5521c5162053c (patch)
tree6b62ff6497d44fc9fe5c05b9a92a65cf2efee386 /functions.c
parente12450d52dce2d6271d12720bf18175d082a0003 (diff)
Get ready for hybrids
Diffstat (limited to 'functions.c')
-rw-r--r--functions.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/functions.c b/functions.c
index 3e5c902..3d62828 100644
--- a/functions.c
+++ b/functions.c
@@ -158,6 +158,13 @@ runfunc(Function f, Array *left, Array *right)
}
return m(right);
}
+ }else if(f.type == FunctypeOp && f.operator.type == OperatortypeHybrid){
+ opmonad m = hybridoperatordefs[f.operator.code];
+ if(m == nil){
+ Rune *err = runesmprint("monadic %C", primhybridnames[f.operator.code]);
+ throwerror(err, ENotImplemented);
+ }
+ return m(f.operator.left, left, right);
}else if(f.type == FunctypeOp){
/* TODO assumes prim op, not dop */
if(f.operator.dyadic){
@@ -189,6 +196,13 @@ runfunc(Function f, Array *left, Array *right)
}
return f.quad->monadfn(right);
}
+ }else if(f.type == FunctypeHybrid){
+ fndyad d = hybridfunctiondefs[f.code];
+ if(d == nil){
+ Rune *err = runesmprint("dyadic %C", primhybridnames[f.code]);
+ throwerror(err, ENotImplemented);
+ }
+ return d(left, right);
}else
return nil;
}