| Index: src/scopes.cc
|
| diff --git a/src/scopes.cc b/src/scopes.cc
|
| index 51c00653c6165a6adc5832040bd27ab090467272..92a8dc779b4e31bc92b4a5e60457a018f3b8bc1c 100644
|
| --- a/src/scopes.cc
|
| +++ b/src/scopes.cc
|
| @@ -160,16 +160,18 @@ void Scope::SetDefaults(ScopeType scope_type,
|
| scope_inside_with_ = false;
|
| scope_contains_with_ = false;
|
| scope_calls_eval_ = false;
|
| - scope_uses_this_ = false;
|
| scope_uses_arguments_ = false;
|
| + scope_uses_super_ = false;
|
| + scope_uses_this_ = false;
|
| asm_module_ = false;
|
| asm_function_ = outer_scope != NULL && outer_scope->asm_module_;
|
| // Inherit the strict mode from the parent scope.
|
| strict_mode_ = outer_scope != NULL ? outer_scope->strict_mode_ : SLOPPY;
|
| outer_scope_calls_sloppy_eval_ = false;
|
| inner_scope_calls_eval_ = false;
|
| - inner_scope_uses_this_ = false;
|
| inner_scope_uses_arguments_ = false;
|
| + inner_scope_uses_this_ = false;
|
| + inner_scope_uses_super_ = false;
|
| force_eager_compilation_ = false;
|
| force_context_allocation_ = (outer_scope != NULL && !is_function_scope())
|
| ? outer_scope->has_forced_context_allocation() : false;
|
| @@ -889,12 +891,14 @@ void Scope::Print(int n) {
|
| if (scope_inside_with_) Indent(n1, "// scope inside 'with'\n");
|
| if (scope_contains_with_) Indent(n1, "// scope contains 'with'\n");
|
| if (scope_calls_eval_) Indent(n1, "// scope calls 'eval'\n");
|
| - if (scope_uses_this_) Indent(n1, "// scope uses 'this'\n");
|
| if (scope_uses_arguments_) Indent(n1, "// scope uses 'arguments'\n");
|
| - if (inner_scope_uses_this_) Indent(n1, "// inner scope uses 'this'\n");
|
| + if (scope_uses_super_) Indent(n1, "// scope uses 'super'\n");
|
| + if (scope_uses_this_) Indent(n1, "// scope uses 'this'\n");
|
| if (inner_scope_uses_arguments_) {
|
| Indent(n1, "// inner scope uses 'arguments'\n");
|
| }
|
| + if (inner_scope_uses_super_) Indent(n1, "// inner scope uses 'super'\n");
|
| + if (inner_scope_uses_this_) Indent(n1, "// inner scope uses 'this'\n");
|
| if (outer_scope_calls_sloppy_eval_) {
|
| Indent(n1, "// outer scope calls 'eval' in sloppy context\n");
|
| }
|
| @@ -1177,15 +1181,18 @@ void Scope::PropagateScopeInfo(bool outer_scope_calls_sloppy_eval ) {
|
| inner_scope_calls_eval_ = true;
|
| }
|
| // If the inner scope is an arrow function, propagate the flags tracking
|
| - // usage of this/arguments, but do not propagate them out from normal
|
| + // usage of arguments/super/this, but do not propagate them out from normal
|
| // functions.
|
| if (!inner->is_function_scope() || inner->is_arrow_scope()) {
|
| - if (inner->scope_uses_this_ || inner->inner_scope_uses_this_) {
|
| - inner_scope_uses_this_ = true;
|
| - }
|
| if (inner->scope_uses_arguments_ || inner->inner_scope_uses_arguments_) {
|
| inner_scope_uses_arguments_ = true;
|
| }
|
| + if (inner->scope_uses_super_ || inner->inner_scope_uses_super_) {
|
| + inner_scope_uses_super_ = true;
|
| + }
|
| + if (inner->scope_uses_this_ || inner->inner_scope_uses_this_) {
|
| + inner_scope_uses_this_ = true;
|
| + }
|
| }
|
| if (inner->force_eager_compilation_) {
|
| force_eager_compilation_ = true;
|
|
|