| Index: src/parser.cc
 | 
| ===================================================================
 | 
| --- src/parser.cc	(revision 984)
 | 
| +++ src/parser.cc	(working copy)
 | 
| @@ -120,7 +120,10 @@
 | 
|    Statement* ParseContinueStatement(bool* ok);
 | 
|    Statement* ParseBreakStatement(ZoneStringList* labels, bool* ok);
 | 
|    Statement* ParseReturnStatement(bool* ok);
 | 
| -  Block* WithHelper(Expression* obj, ZoneStringList* labels, bool* ok);
 | 
| +  Block* WithHelper(Expression* obj,
 | 
| +                    ZoneStringList* labels,
 | 
| +                    bool is_catch_block,
 | 
| +                    bool* ok);
 | 
|    Statement* ParseWithStatement(ZoneStringList* labels, bool* ok);
 | 
|    CaseClause* ParseCaseClause(bool* default_seen_ptr, bool* ok);
 | 
|    SwitchStatement* ParseSwitchStatement(ZoneStringList* labels, bool* ok);
 | 
| @@ -1921,7 +1924,10 @@
 | 
|  }
 | 
|  
 | 
|  
 | 
| -Block* Parser::WithHelper(Expression* obj, ZoneStringList* labels, bool* ok) {
 | 
| +Block* Parser::WithHelper(Expression* obj,
 | 
| +                          ZoneStringList* labels,
 | 
| +                          bool is_catch_block,
 | 
| +                          bool* ok) {
 | 
|    // Parse the statement and collect escaping labels.
 | 
|    ZoneList<Label*>* label_list = NEW(ZoneList<Label*>(0));
 | 
|    LabelCollector collector(label_list);
 | 
| @@ -1938,7 +1944,7 @@
 | 
|    Block* result = NEW(Block(NULL, 2, false));
 | 
|  
 | 
|    if (result) {
 | 
| -    result->AddStatement(NEW(WithEnterStatement(obj)));
 | 
| +    result->AddStatement(NEW(WithEnterStatement(obj, is_catch_block)));
 | 
|  
 | 
|      // Create body block.
 | 
|      Block* body = NEW(Block(NULL, 1, false));
 | 
| @@ -1974,7 +1980,7 @@
 | 
|    Expression* expr = ParseExpression(true, CHECK_OK);
 | 
|    Expect(Token::RPAREN, CHECK_OK);
 | 
|  
 | 
| -  return WithHelper(expr, labels, CHECK_OK);
 | 
| +  return WithHelper(expr, labels, false, CHECK_OK);
 | 
|  }
 | 
|  
 | 
|  
 | 
| @@ -2135,7 +2141,7 @@
 | 
|        catch_var = top_scope_->NewTemporary(Factory::catch_var_symbol());
 | 
|        Expression* obj = MakeCatchContext(name, catch_var);
 | 
|        { Target target(this, &catch_collector);
 | 
| -        catch_block = WithHelper(obj, NULL, CHECK_OK);
 | 
| +        catch_block = WithHelper(obj, NULL, true, CHECK_OK);
 | 
|        }
 | 
|      } else {
 | 
|        Expect(Token::LBRACE, CHECK_OK);
 | 
| 
 |