From feb815bc1a058b91eed9dea3c5cad8ea52d51806 Mon Sep 17 00:00:00 2001 From: Jo-Philipp Wich Date: Tue, 3 Nov 2020 23:33:30 +0100 Subject: syntax: implement ES6-like arrow function syntax Signed-off-by: Jo-Philipp Wich --- eval.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'eval.c') diff --git a/eval.c b/eval.c index 481efc1..b7aece0 100644 --- a/eval.c +++ b/eval.c @@ -1046,7 +1046,12 @@ ut_invoke(struct ut_state *state, uint32_t off, struct json_object *this, callstack.next = state->callstack; callstack.function = state->function; callstack.off = op ? op->off : 0; - callstack.ctx = json_object_get(this ? this : state->ctx); + + if (tag->is_arrow) + callstack.ctx = state->callstack ? json_object_get(state->callstack->ctx) : NULL; + else + callstack.ctx = json_object_get(this ? this : state->ctx); + state->callstack = &callstack; state->calldepth++; @@ -1630,6 +1635,7 @@ static struct json_object *(*fns[__T_MAX])(struct ut_state *, uint32_t) = { [T_NULL] = ut_execute_atom, [T_THIS] = ut_execute_this, [T_FUNC] = ut_execute_function, + [T_ARROW] = ut_execute_function, [T_TEXT] = ut_execute_text, [T_ASSIGN] = ut_execute_assign, [T_LOCAL] = ut_execute_local, -- cgit v1.2.3