summaryrefslogtreecommitdiff
path: root/functions.c
diff options
context:
space:
mode:
authorPeter Mikkelsen <petermikkelsen10@gmail.com>2022-01-22 20:58:20 +0000
committerPeter Mikkelsen <petermikkelsen10@gmail.com>2022-01-22 20:58:20 +0000
commit8299b90052e5fd064567f0bc06ee551970fd48ef (patch)
tree6d564708a6a50b0dedf8b2401efd7f5b422bcceb /functions.c
parentf28544ec25ceee5fe2b783f1980cdf19caf0e977 (diff)
Implement Agh trains
Diffstat (limited to 'functions.c')
-rw-r--r--functions.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/functions.c b/functions.c
index c229322..4b66972 100644
--- a/functions.c
+++ b/functions.c
@@ -226,7 +226,7 @@ rundfn(Rune *code, Array *left, Array *right)
Array *
runtrain(Function *funcs, int nfuncs, Array *left, Array *right, Array *acc)
{
- if(nfuncs >= 3 && acc == nil){
+ if(nfuncs >= 3 && acc == nil && !(funcs[0].left != nil && nfuncs == 3)){
Array *rtmp = runfunc(funcs[nfuncs-1], left, right);
Array *ltmp = runfunc(funcs[nfuncs-3], left, right);
Array *r = simplifyarray(rtmp);
@@ -240,7 +240,7 @@ runtrain(Function *funcs, int nfuncs, Array *left, Array *right, Array *acc)
return c;
else
return runtrain(funcs, nfuncs-3, left, right, c);
- }else if(nfuncs >= 2 && acc != nil){
+ }else if(nfuncs >= 2 && acc != nil && !(funcs[0].left != nil && nfuncs == 2)){
Array *ltmp = runfunc(funcs[nfuncs-2], left, right);
Array *l = simplifyarray(ltmp);
Array *c = runfunc(funcs[nfuncs-1], l, acc);
@@ -254,16 +254,16 @@ runtrain(Function *funcs, int nfuncs, Array *left, Array *right, Array *acc)
}else if(nfuncs == 2 && acc == nil){
Array *rtmp = runfunc(funcs[1], left, right);
Array *r = simplifyarray(rtmp);
- Array *c = runfunc(funcs[0], nil, r);
+ Array *c = runfunc(funcs[0], funcs[0].left, r);
freearray(rtmp);
freearray(r);
return c;
}else if(nfuncs == 1 && acc != nil){
- Array *c = runfunc(funcs[0], nil, acc);
+ Array *c = runfunc(funcs[0], funcs[0].left, acc);
freearray(acc);
return c;
}else{
- throwerror(L"train combination", ENotImplemented);
+ throwerror(L"train combination", ESyntax);
return nil;
}
}