Index: src/preparser.h |
diff --git a/src/preparser.h b/src/preparser.h |
index 1c1e1c4520d0e3cad95a6f2cbb3afdec963d02a7..02d44f8af6345bf1dabb4b435dda57b8dded2d88 100644 |
--- a/src/preparser.h |
+++ b/src/preparser.h |
@@ -892,6 +892,8 @@ class PreParserScope { |
bool IsDeclared(const PreParserIdentifier& identifier) const { return false; } |
void DeclareParameter(const PreParserIdentifier& identifier, VariableMode) {} |
+ void RecordArgumentsUsage() {} |
+ void RecordThisUsage() {} |
// Allow scope->Foo() to work. |
PreParserScope* operator->() { return this; } |
@@ -1544,6 +1546,7 @@ typename ParserBase<Traits>::IdentifierT ParserBase<Traits>::ParseIdentifier( |
ReportMessage("strict_eval_arguments"); |
*ok = false; |
} |
+ if (name->IsArguments()) scope_->RecordArgumentsUsage(); |
return name; |
} else if (strict_mode() == SLOPPY && |
(next == Token::FUTURE_STRICT_RESERVED_WORD || |
@@ -1574,7 +1577,10 @@ typename ParserBase<Traits>::IdentifierT ParserBase< |
*ok = false; |
return Traits::EmptyIdentifier(); |
} |
- return this->GetSymbol(scanner()); |
+ |
+ IdentifierT name = this->GetSymbol(scanner()); |
+ if (name->IsArguments()) scope_->RecordArgumentsUsage(); |
+ return name; |
} |
@@ -1589,7 +1595,10 @@ ParserBase<Traits>::ParseIdentifierName(bool* ok) { |
*ok = false; |
return Traits::EmptyIdentifier(); |
} |
- return this->GetSymbol(scanner()); |
+ |
+ IdentifierT name = this->GetSymbol(scanner()); |
+ if (name->IsArguments()) scope_->RecordArgumentsUsage(); |
+ return name; |
} |
@@ -1666,6 +1675,7 @@ ParserBase<Traits>::ParsePrimaryExpression(bool* ok) { |
switch (token) { |
case Token::THIS: { |
Consume(Token::THIS); |
+ scope_->RecordThisUsage(); |
result = this->ThisExpression(scope_, factory()); |
break; |
} |