diff options
author | Peter Mikkelsen <petermikkelsen10@gmail.com> | 2022-02-22 11:15:02 +0000 |
---|---|---|
committer | Peter Mikkelsen <petermikkelsen10@gmail.com> | 2022-02-22 11:15:02 +0000 |
commit | 9ce53480b3cc3f85e16fe9cbe4eb3d8df4f6dbdb (patch) | |
tree | 5ec470ed1af4506f9a4728ff369a831b4d7bb10f | |
parent | df6c3247c40b05266894d45136dc64f96b0cbac9 (diff) |
Also use lexical scoping for operators
-rw-r--r-- | apl9.h | 1 | ||||
-rw-r--r-- | eval.c | 1 | ||||
-rw-r--r-- | lexer.c | 1 |
3 files changed, 3 insertions, 0 deletions
@@ -133,6 +133,7 @@ struct Operator int code; Rune *dop; }; + DfnFrame *scope; Datum *left; Datum *right; }; @@ -336,6 +336,7 @@ monadop(Datum *left, Datum *right) result->func.operator.left = left; incdatumref(left); result->func.left = nil; + result->func.scope = right->operator.scope; return result; } @@ -124,6 +124,7 @@ lexline(InputStream *input, int toplevel) stmt->toks[stmt->ntoks]->operator.type = OperatortypeDop; stmt->toks[stmt->ntoks]->operator.dyadic = oplevel == 2; stmt->toks[stmt->ntoks]->operator.dop = runestrdup(buf); + stmt->toks[stmt->ntoks]->operator.scope = getcurrentdfn(); } }else if(peek == '('){ int unclosed = 1; |