Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(358)

Unified Diff: src/preparser.h

Issue 422923004: Track usage of "this" and "arguments" in Scope (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Fix nits Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/objects.h ('k') | src/runtime/runtime-debug.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/preparser.h
diff --git a/src/preparser.h b/src/preparser.h
index f3bb292e2c5ca56afd33939d0e860091f4c0176e..abfe2f59cea36b896dbc601ca0bed2e317b29e90 100644
--- a/src/preparser.h
+++ b/src/preparser.h
@@ -627,7 +627,9 @@ class PreParserIdentifier {
return PreParserIdentifier(kConstructorIdentifier);
}
bool IsEval() const { return type_ == kEvalIdentifier; }
- bool IsArguments() const { return type_ == kArgumentsIdentifier; }
+ bool IsArguments(const AstValueFactory* = NULL) const {
+ return type_ == kArgumentsIdentifier;
+ }
bool IsYield() const { return type_ == kYieldIdentifier; }
bool IsPrototype() const { return type_ == kPrototypeIdentifier; }
bool IsConstructor() const { return type_ == kConstructorIdentifier; }
@@ -968,6 +970,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; }
@@ -1655,6 +1659,8 @@ typename ParserBase<Traits>::IdentifierT ParserBase<Traits>::ParseIdentifier(
ReportMessage("strict_eval_arguments");
*ok = false;
}
+ if (name->IsArguments(this->ast_value_factory()))
+ scope_->RecordArgumentsUsage();
return name;
} else if (strict_mode() == SLOPPY &&
(next == Token::FUTURE_STRICT_RESERVED_WORD ||
@@ -1685,7 +1691,11 @@ typename ParserBase<Traits>::IdentifierT ParserBase<
*ok = false;
return Traits::EmptyIdentifier();
}
- return this->GetSymbol(scanner());
+
+ IdentifierT name = this->GetSymbol(scanner());
+ if (name->IsArguments(this->ast_value_factory()))
+ scope_->RecordArgumentsUsage();
+ return name;
}
@@ -1700,7 +1710,11 @@ ParserBase<Traits>::ParseIdentifierName(bool* ok) {
*ok = false;
return Traits::EmptyIdentifier();
}
- return this->GetSymbol(scanner());
+
+ IdentifierT name = this->GetSymbol(scanner());
+ if (name->IsArguments(this->ast_value_factory()))
+ scope_->RecordArgumentsUsage();
+ return name;
}
@@ -1778,6 +1792,7 @@ ParserBase<Traits>::ParsePrimaryExpression(bool* ok) {
switch (token) {
case Token::THIS: {
Consume(Token::THIS);
+ scope_->RecordThisUsage();
result = this->ThisExpression(scope_, factory());
break;
}
@@ -2625,9 +2640,7 @@ template <class Traits>
typename ParserBase<Traits>::ExpressionT ParserBase<
Traits>::ParseArrowFunctionLiteral(int start_pos, ExpressionT params_ast,
bool* ok) {
- // TODO(aperez): Change this to use ARROW_SCOPE
- typename Traits::Type::ScopePtr scope =
- this->NewScope(scope_, FUNCTION_SCOPE);
+ typename Traits::Type::ScopePtr scope = this->NewScope(scope_, ARROW_SCOPE);
typename Traits::Type::StatementList body;
typename Traits::Type::AstProperties ast_properties;
BailoutReason dont_optimize_reason = kNoReason;
« no previous file with comments | « src/objects.h ('k') | src/runtime/runtime-debug.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698