Chromium Code Reviews| Index: src/rewriter.cc |
| diff --git a/src/rewriter.cc b/src/rewriter.cc |
| index a70cd82a72ee115a6e768d95e33f922746af6667..cfd93789e97e4deb638f2ea3c2451c5189324462 100644 |
| --- a/src/rewriter.cc |
| +++ b/src/rewriter.cc |
| @@ -1,4 +1,4 @@ |
| -// Copyright 2011 the V8 project authors. All rights reserved. |
| +// Copyright 2012 the V8 project authors. All rights reserved. |
| // Redistribution and use in source and binary forms, with or without |
| // modification, are permitted provided that the following conditions are |
| // met: |
| @@ -43,11 +43,20 @@ class Processor: public AstVisitor { |
| result_assigned_(false), |
| is_set_(false), |
| in_try_(false) { |
| + factory_ = new AstNodeFactory(isolate()); |
|
fschneider
2012/01/30 12:10:35
Why not just embed it in the instance? Then there
Jakob Kummerow
2012/02/01 14:46:09
Done.
|
| + } |
| + |
| + virtual ~Processor() { |
| + delete factory_; |
| } |
| void Process(ZoneList<Statement*>* statements); |
| bool result_assigned() const { return result_assigned_; } |
| + AstNodeFactory* factory() { |
| + return factory_; |
|
fschneider
2012/01/30 12:10:35
return &factory_;
Jakob Kummerow
2012/02/01 14:46:09
Done.
|
| + } |
| + |
| private: |
| Variable* result_; |
| @@ -64,15 +73,13 @@ class Processor: public AstVisitor { |
| bool is_set_; |
| bool in_try_; |
| + AstNodeFactory* factory_; |
|
fschneider
2012/01/30 12:10:35
AstNodeFactory factory_;
Jakob Kummerow
2012/02/01 14:46:09
Done.
|
| + |
| Expression* SetResult(Expression* value) { |
| result_assigned_ = true; |
| - Zone* zone = isolate()->zone(); |
| - VariableProxy* result_proxy = new(zone) VariableProxy(isolate(), result_); |
| - return new(zone) Assignment(isolate(), |
| - Token::ASSIGN, |
| - result_proxy, |
| - value, |
| - RelocInfo::kNoPosition); |
| + VariableProxy* result_proxy = factory()->NewVariableProxy(result_); |
| + return factory()->NewAssignment( |
| + Token::ASSIGN, result_proxy, value, RelocInfo::kNoPosition); |
| } |
| // Node visitors. |
| @@ -237,8 +244,6 @@ bool Rewriter::Rewrite(CompilationInfo* info) { |
| if (processor.result_assigned()) { |
| ASSERT(function->end_position() != RelocInfo::kNoPosition); |
| - Isolate* isolate = info->isolate(); |
| - Zone* zone = isolate->zone(); |
| // Set the position of the assignment statement one character past the |
| // source code, such that it definitely is not in the source code range |
| // of an immediate inner scope. For example in |
| @@ -246,10 +251,11 @@ bool Rewriter::Rewrite(CompilationInfo* info) { |
| // the end position of the function generated for executing the eval code |
| // coincides with the end of the with scope which is the position of '1'. |
| int position = function->end_position(); |
| - VariableProxy* result_proxy = new(zone) VariableProxy( |
| - isolate, result->name(), false, position); |
| + VariableProxy* result_proxy = processor.factory()->NewVariableProxy( |
| + result->name(), false, position); |
| result_proxy->BindTo(result); |
| - Statement* result_statement = new(zone) ReturnStatement(result_proxy); |
| + Statement* result_statement = |
| + processor.factory()->NewReturnStatement(result_proxy); |
| result_statement->set_statement_pos(position); |
| body->Add(result_statement); |
| } |