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); |
} |