diff options
author | Peter Mikkelsen <petermikkelsen10@gmail.com> | 2022-01-26 10:08:28 +0000 |
---|---|---|
committer | Peter Mikkelsen <petermikkelsen10@gmail.com> | 2022-01-26 10:08:28 +0000 |
commit | a328d13015fc4cbe34d99ddcfd36754e860dac00 (patch) | |
tree | dfeb160260c20de742c9a3f3f8ee488016ce3050 /functions.c | |
parent | 794e0d2b6a7c8b15a302b0bb26c9d0d342d38a61 (diff) |
Implement a variant of execute ⍎. Mine doesn't print the result of statements that aren't the result or are assigned.
Diffstat (limited to 'functions.c')
-rw-r--r-- | functions.c | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/functions.c b/functions.c index 9eb6406..c4b5cee 100644 --- a/functions.c +++ b/functions.c @@ -57,7 +57,7 @@ fnmonad monadfunctiondefs[] = { fnReverseLast, /* ⌽ */ fnReverseFirst, /* ⊖ */ fnTranspose, /* ⍉ */ - 0, /* ⍎ */ + fnExecute, /* ⍎ */ 0, /* ⍕ */ fnSelfReference1, /* ∇ */ }; @@ -715,6 +715,23 @@ fnTranspose(Array *right) } Array * +fnExecute(Array *right) +{ + if(right->type != AtypeRune) + throwerror(nil, EType); + Rune *code = pparray(right); + Datum *result = evalline(code, nil, 1); + free(code); + if(!result) + throwerror(L"No result produced by ⍎", EDomain); + if(result->tag != ArrayTag) + throwerror(L"Result of ⍎ must be an array", EType); + Array *res = result->array; + free(result); + return res; +} + +Array * fnSelfReference1(Array *right) { DfnFrame *dfn = getcurrentdfn(); |