Index: src/parser.cc |
diff --git a/src/parser.cc b/src/parser.cc |
index 9d2f4838d9e4dd9a36e5be6bf76f5672e52d7720..5be6d82b67d582b11601b227c0f7b9d739ba2480 100644 |
--- a/src/parser.cc |
+++ b/src/parser.cc |
@@ -740,9 +740,7 @@ |
Expression* ParserTraits::ThisExpression(Scope* scope, AstNodeFactory* factory, |
int pos) { |
- return scope->NewUnresolved(factory, |
- parser_->ast_value_factory()->this_string(), |
- Variable::THIS, pos, pos + 4); |
+ return factory->NewVariableProxy(scope->receiver(), pos); |
} |
Expression* ParserTraits::SuperReference(Scope* scope, AstNodeFactory* factory, |
@@ -790,8 +788,7 @@ |
Scope* scope, |
AstNodeFactory* factory) { |
if (parser_->fni_ != NULL) parser_->fni_->PushVariableName(name); |
- return scope->NewUnresolved(factory, name, Variable::NORMAL, start_position, |
- end_position); |
+ return scope->NewUnresolved(factory, name, start_position, end_position); |
} |
@@ -970,8 +967,6 @@ |
FunctionLiteral* result = NULL; |
{ |
- // TODO(wingo): Add an outer GLOBAL_SCOPE corresponding to the native |
- // context, which will have the "this" binding for script scopes. |
Scope* scope = NewScope(scope_, SCRIPT_SCOPE); |
info->set_script_scope(scope); |
if (!info->context().is_null() && !info->context()->IsNativeContext()) { |
@@ -1922,9 +1917,9 @@ |
// scope. |
// Let/const variables in harmony mode are always added to the immediately |
// enclosing scope. |
- return DeclarationScope(mode)->NewUnresolved( |
- factory(), name, Variable::NORMAL, scanner()->location().beg_pos, |
- scanner()->location().end_pos); |
+ return DeclarationScope(mode)->NewUnresolved(factory(), name, |
+ scanner()->location().beg_pos, |
+ scanner()->location().end_pos); |
} |
@@ -3443,9 +3438,8 @@ |
Expression* enumerable = ParseExpression(true, CHECK_OK); |
Expect(Token::RPAREN, CHECK_OK); |
- VariableProxy* each = |
- scope_->NewUnresolved(factory(), parsing_result.SingleName(), |
- Variable::NORMAL, each_beg_pos, each_end_pos); |
+ VariableProxy* each = scope_->NewUnresolved( |
+ factory(), parsing_result.SingleName(), each_beg_pos, each_end_pos); |
Statement* body = ParseSubStatement(NULL, CHECK_OK); |
InitializeForEachStatement(loop, each, enumerable, body); |
Block* result = |
@@ -3528,9 +3522,8 @@ |
scope_ = for_scope; |
Expect(Token::RPAREN, CHECK_OK); |
- VariableProxy* each = |
- scope_->NewUnresolved(factory(), parsing_result.SingleName(), |
- Variable::NORMAL, each_end_pos); |
+ VariableProxy* each = scope_->NewUnresolved( |
+ factory(), parsing_result.SingleName(), each_end_pos); |
Statement* body = ParseSubStatement(NULL, CHECK_OK); |
Block* body_block = |
factory()->NewBlock(NULL, 3, false, RelocInfo::kNoPosition); |
@@ -5723,8 +5716,9 @@ |
if (function->IsProperty()) { |
// Method calls |
if (function->AsProperty()->IsSuperAccess()) { |
- Expression* home = ThisExpression(scope_, factory(), |
- RelocInfo::kNoPosition); |
+ VariableProxy* original_home = |
+ function->AsProperty()->obj()->AsSuperReference()->this_var(); |
+ VariableProxy* home = factory()->NewVariableProxy(original_home->var()); |
args->InsertAt(0, function, zone()); |
args->InsertAt(1, home, zone()); |
} else { |