Index: src/scopes.cc |
diff --git a/src/scopes.cc b/src/scopes.cc |
index 65a91fc1b6ad0dd084eb7e1c1dd68954a8bc5b76..74c3f0be04db03830ea4d2006642a571c7178018 100644 |
--- a/src/scopes.cc |
+++ b/src/scopes.cc |
@@ -161,7 +161,8 @@ void Scope::SetDefaults(ScopeType scope_type, |
scope_contains_with_ = false; |
scope_calls_eval_ = false; |
scope_uses_arguments_ = false; |
- scope_uses_super_ = false; |
+ scope_uses_super_property_ = false; |
+ scope_uses_super_constructor_call_ = false; |
scope_uses_this_ = false; |
asm_module_ = false; |
asm_function_ = outer_scope != NULL && outer_scope->asm_module_; |
@@ -171,7 +172,8 @@ void Scope::SetDefaults(ScopeType scope_type, |
inner_scope_calls_eval_ = false; |
inner_scope_uses_arguments_ = false; |
inner_scope_uses_this_ = false; |
- inner_scope_uses_super_ = false; |
+ inner_scope_uses_super_property_ = false; |
+ inner_scope_uses_super_constructor_call_ = false; |
force_eager_compilation_ = false; |
force_context_allocation_ = (outer_scope != NULL && !is_function_scope()) |
? outer_scope->has_forced_context_allocation() : false; |
@@ -375,7 +377,9 @@ Scope* Scope::FinalizeBlockScope() { |
// Propagate usage flags to outer scope. |
if (uses_arguments()) outer_scope_->RecordArgumentsUsage(); |
- if (uses_super()) outer_scope_->RecordSuperUsage(); |
+ if (uses_super_property()) outer_scope_->RecordSuperPropertyUsage(); |
+ if (uses_super_constructor_call()) |
+ outer_scope_->RecordSuperConstructorCallUsage(); |
if (uses_this()) outer_scope_->RecordThisUsage(); |
return NULL; |
@@ -896,12 +900,20 @@ void Scope::Print(int n) { |
if (scope_contains_with_) Indent(n1, "// scope contains 'with'\n"); |
if (scope_calls_eval_) Indent(n1, "// scope calls 'eval'\n"); |
if (scope_uses_arguments_) Indent(n1, "// scope uses 'arguments'\n"); |
- if (scope_uses_super_) Indent(n1, "// scope uses 'super'\n"); |
+ if (scope_uses_super_property_) |
+ Indent(n1, "// scope uses 'super' property\n"); |
+ if (scope_uses_super_constructor_call_) { |
arv (Not doing code reviews)
2014/12/01 15:14:07
Inconsistent use of {}
|
+ Indent(n1, "// scope uses 'super' constructor\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_super_property_) |
+ Indent(n1, "// inner scope uses 'super' property\n"); |
+ if (inner_scope_uses_super_constructor_call_) { |
+ Indent(n1, "// inner scope uses 'super' constructor\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"); |
@@ -1174,8 +1186,13 @@ void Scope::PropagateScopeInfo(bool outer_scope_calls_sloppy_eval ) { |
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_super_property_ || |
+ inner->inner_scope_uses_super_property_) { |
+ inner_scope_uses_super_property_ = true; |
+ } |
+ if (inner->uses_super_constructor_call() || |
+ inner->inner_scope_uses_super_constructor_call_) { |
+ inner_scope_uses_super_constructor_call_ = true; |
} |
if (inner->scope_uses_this_ || inner->inner_scope_uses_this_) { |
inner_scope_uses_this_ = true; |