| 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 { | 
|  |