| Index: src/rewriter.cc
|
| diff --git a/src/rewriter.cc b/src/rewriter.cc
|
| index a70cd82a72ee115a6e768d95e33f922746af6667..5b80def9f8e5f27b437d5d0e82b5671d9df89555 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:
|
| @@ -42,12 +42,18 @@ class Processor: public AstVisitor {
|
| : result_(result),
|
| result_assigned_(false),
|
| is_set_(false),
|
| - in_try_(false) {
|
| - }
|
| + in_try_(false),
|
| + factory_(isolate()) { }
|
| +
|
| + virtual ~Processor() { }
|
|
|
| void Process(ZoneList<Statement*>* statements);
|
| bool result_assigned() const { return result_assigned_; }
|
|
|
| + AstNodeFactory* factory() {
|
| + return &factory_;
|
| + }
|
| +
|
| private:
|
| Variable* result_;
|
|
|
| @@ -64,15 +70,13 @@ class Processor: public AstVisitor {
|
| bool is_set_;
|
| bool in_try_;
|
|
|
| + AstNodeFactory factory_;
|
| +
|
| 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 +241,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 +248,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);
|
| }
|
|
|