diff options
author | Peter Mikkelsen <petermikkelsen10@gmail.com> | 2022-05-11 10:21:28 +0000 |
---|---|---|
committer | Peter Mikkelsen <petermikkelsen10@gmail.com> | 2022-05-11 10:21:28 +0000 |
commit | fd3f483368ec3c52e00260ae2941b6c0552473cf (patch) | |
tree | 6b43e0c4ad470a32156f6738b1e5bd2ee95dba70 | |
parent | e425895a315d65ff9ca1e2d7911c2fd21d49fe5e (diff) |
Fix more bugs
-rw-r--r-- | error.c | 2 | ||||
-rw-r--r-- | eval.c | 2 | ||||
-rw-r--r-- | functions.c | 2 | ||||
-rw-r--r-- | lexer.c | 2 | ||||
-rw-r--r-- | memory.c | 5 |
5 files changed, 10 insertions, 3 deletions
@@ -37,7 +37,7 @@ throwerror(Rune *msg, int err) td->lasterror = err; if(td->lasterrormsg) free(td->lasterrormsg); - td->lasterrormsg = runestrdup(msg); + td->lasterrormsg = msg ? runestrdup(msg) : nil; while(frame != nil){ for(ErrorGuard *eg = frame->errorguards; eg != nil; eg = eg->next){ @@ -384,7 +384,7 @@ train(Datum *left, Datum *right) result->func.type = FunctypeTrain; result->func.left = nil; if(left->func.type == FunctypeTrain) - result->func = left->func; + result->func = dupfunction(left->func); else{ result->func.train.nfuncs = 1; result->func.train.funcs = emalloc(sizeof(Function)); diff --git a/functions.c b/functions.c index f73ff29..2e95316 100644 --- a/functions.c +++ b/functions.c @@ -1404,7 +1404,7 @@ fnDrop(Array *left, Array *right) if(GetSize(left) > GetRank(right)) throwerror(nil, ELength); else if(GetSize(left) == GetRank(right)) - left = fnSame(left); + left = duparray(left); else{ Array *old = left; left = allocarray(AtypeInt, 1, GetRank(right)); @@ -84,6 +84,8 @@ lexline(InputStream *input, int toplevel) case L'⍝': while(peek != '\n' && !inputEOF(input)) peek = getrune(input); + if(stmt->ntoks == 0) + continue; goto end; case L'⍬': stmt->toks[stmt->ntoks] = allocdatum(ArrayTag, 0); @@ -243,6 +243,11 @@ dupfunction(Function f) break; case FunctypeHybrid: break; + case FunctypeTrain: + g.train.funcs = emalloc(sizeof(Function) * g.train.nfuncs); + for(int i = 0; i < g.train.nfuncs; i++) + g.train.funcs[i] = dupfunction(f.train.funcs[i]); + break; default: print("Missing case in dupfunction: %d\n", f.type); threadexitsall("dupfunction"); |