summaryrefslogtreecommitdiff
path: root/quickjs.c
diff options
context:
space:
mode:
authorFabrice Bellard <fabrice@bellard.org>2023-12-09 12:27:39 +0100
committerFabrice Bellard <fabrice@bellard.org>2023-12-09 12:27:39 +0100
commitc4cdd61a3ed284cd760faf6b00bbf0cb908da077 (patch)
tree8721fa3f49e71bfe7a12bf819d3157bf9151d7b7 /quickjs.c
parent26fdf659e379a29afb47f1fd46e709b3576645fd (diff)
downloadquickjs-c4cdd61a3ed284cd760faf6b00bbf0cb908da077.tar.gz
quickjs-c4cdd61a3ed284cd760faf6b00bbf0cb908da077.zip
fixed lexical scope of 'this' with eval (github issue #192)
Diffstat (limited to 'quickjs.c')
-rw-r--r--quickjs.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/quickjs.c b/quickjs.c
index 35211d6..efe78e8 100644
--- a/quickjs.c
+++ b/quickjs.c
@@ -29993,12 +29993,13 @@ static void add_eval_variables(JSContext *ctx, JSFunctionDef *s)
is_arg_scope = (scope_idx == ARG_SCOPE_END);
if (!is_arg_scope) {
/* add unscoped variables */
+ /* XXX: propagate is_const and var_kind too ? */
for(i = 0; i < fd->arg_count; i++) {
vd = &fd->args[i];
if (vd->var_name != JS_ATOM_NULL) {
get_closure_var(ctx, s, fd,
- TRUE, i, vd->var_name, FALSE, FALSE,
- JS_VAR_NORMAL);
+ TRUE, i, vd->var_name, FALSE,
+ vd->is_lexical, JS_VAR_NORMAL);
}
}
for(i = 0; i < fd->var_count; i++) {
@@ -30008,8 +30009,8 @@ static void add_eval_variables(JSContext *ctx, JSFunctionDef *s)
vd->var_name != JS_ATOM__ret_ &&
vd->var_name != JS_ATOM_NULL) {
get_closure_var(ctx, s, fd,
- FALSE, i, vd->var_name, FALSE, FALSE,
- JS_VAR_NORMAL);
+ FALSE, i, vd->var_name, FALSE,
+ vd->is_lexical, JS_VAR_NORMAL);
}
}
} else {
@@ -30018,8 +30019,8 @@ static void add_eval_variables(JSContext *ctx, JSFunctionDef *s)
/* do not close top level last result */
if (vd->scope_level == 0 && is_var_in_arg_scope(vd)) {
get_closure_var(ctx, s, fd,
- FALSE, i, vd->var_name, FALSE, FALSE,
- JS_VAR_NORMAL);
+ FALSE, i, vd->var_name, FALSE,
+ vd->is_lexical, JS_VAR_NORMAL);
}
}
}