| 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;
|
| }
|
|
|