Index: src/parser.cc |
diff --git a/src/parser.cc b/src/parser.cc |
index 46d49f3085404fa2865ca7826402680962d907c0..a10f9f9c5c5bcd0adac447a12258d4b7654152fd 100644 |
--- a/src/parser.cc |
+++ b/src/parser.cc |
@@ -252,7 +252,7 @@ void RegExpBuilder::AddQuantifierToAtom(int min, |
// allocated and hence used by the pre-parser. |
class TemporaryScope BASE_EMBEDDED { |
public: |
- explicit TemporaryScope(TemporaryScope** variable); |
+ TemporaryScope(TemporaryScope** variable, Isolate* isolate); |
~TemporaryScope(); |
int NextMaterializedLiteralIndex() { |
@@ -306,12 +306,11 @@ class TemporaryScope BASE_EMBEDDED { |
}; |
-TemporaryScope::TemporaryScope(TemporaryScope** variable) |
+TemporaryScope::TemporaryScope(TemporaryScope** variable, Isolate* isolate) |
: materialized_literal_count_(0), |
expected_property_count_(0), |
only_simple_this_property_assignments_(false), |
- this_property_assignments_( |
- Isolate::Current()->factory()->empty_fixed_array()), |
+ this_property_assignments_(isolate->factory()->empty_fixed_array()), |
loop_count_(0), |
variable_(variable), |
parent_(*variable) { |
@@ -659,7 +658,7 @@ FunctionLiteral* Parser::DoParseProgram(Handle<String> source, |
{ Scope* scope = NewScope(top_scope_, type, inside_with()); |
LexicalScope lexical_scope(&this->top_scope_, &this->with_nesting_level_, |
scope); |
- TemporaryScope temp_scope(&this->temp_scope_); |
+ TemporaryScope temp_scope(&this->temp_scope_, isolate()); |
if (strict_mode == kStrictMode) { |
top_scope_->EnableStrictMode(); |
} |
@@ -749,7 +748,7 @@ FunctionLiteral* Parser::ParseLazy(CompilationInfo* info, |
} |
LexicalScope lexical_scope(&this->top_scope_, &this->with_nesting_level_, |
scope); |
- TemporaryScope temp_scope(&this->temp_scope_); |
+ TemporaryScope temp_scope(&this->temp_scope_, isolate()); |
if (shared_info->strict_mode()) { |
top_scope_->EnableStrictMode(); |
@@ -952,8 +951,9 @@ class InitializationBlockFinder : public ParserFinder { |
// function contains only assignments of this type. |
class ThisNamedPropertyAssigmentFinder : public ParserFinder { |
public: |
- ThisNamedPropertyAssigmentFinder() |
- : only_simple_this_property_assignments_(true), |
+ explicit ThisNamedPropertyAssigmentFinder(Isolate* isolate) |
+ : isolate_(isolate), |
+ only_simple_this_property_assignments_(true), |
names_(NULL), |
assigned_arguments_(NULL), |
assigned_constants_(NULL) {} |
@@ -984,14 +984,14 @@ class ThisNamedPropertyAssigmentFinder : public ParserFinder { |
// form this.x = y; |
Handle<FixedArray> GetThisPropertyAssignments() { |
if (names_ == NULL) { |
- return FACTORY->empty_fixed_array(); |
+ return isolate_->factory()->empty_fixed_array(); |
} |
ASSERT(names_ != NULL); |
ASSERT(assigned_arguments_ != NULL); |
ASSERT_EQ(names_->length(), assigned_arguments_->length()); |
ASSERT_EQ(names_->length(), assigned_constants_->length()); |
Handle<FixedArray> assignments = |
- FACTORY->NewFixedArray(names_->length() * 3); |
+ isolate_->factory()->NewFixedArray(names_->length() * 3); |
for (int i = 0; i < names_->length(); i++) { |
assignments->set(i * 3, *names_->at(i)); |
assignments->set(i * 3 + 1, Smi::FromInt(assigned_arguments_->at(i))); |
@@ -1021,7 +1021,8 @@ class ThisNamedPropertyAssigmentFinder : public ParserFinder { |
uint32_t dummy; |
if (literal != NULL && |
literal->handle()->IsString() && |
- !String::cast(*(literal->handle()))->Equals(HEAP->Proto_symbol()) && |
+ !String::cast(*(literal->handle()))->Equals( |
+ isolate_->heap()->Proto_symbol()) && |
!String::cast(*(literal->handle()))->AsArrayIndex(&dummy)) { |
Handle<String> key = Handle<String>::cast(literal->handle()); |
@@ -1055,7 +1056,7 @@ class ThisNamedPropertyAssigmentFinder : public ParserFinder { |
EnsureAllocation(); |
names_->Add(name); |
assigned_arguments_->Add(index); |
- assigned_constants_->Add(FACTORY->undefined_value()); |
+ assigned_constants_->Add(isolate_->factory()->undefined_value()); |
} |
void AssignmentFromConstant(Handle<String> name, Handle<Object> value) { |
@@ -1080,6 +1081,7 @@ class ThisNamedPropertyAssigmentFinder : public ParserFinder { |
} |
} |
+ Isolate* isolate_; |
bool only_simple_this_property_assignments_; |
ZoneStringList* names_; |
ZoneList<int>* assigned_arguments_; |
@@ -1101,7 +1103,7 @@ void* Parser::ParseSourceElements(ZoneList<Statement*>* processor, |
ASSERT(processor != NULL); |
InitializationBlockFinder block_finder; |
- ThisNamedPropertyAssigmentFinder this_property_assignment_finder; |
+ ThisNamedPropertyAssigmentFinder this_property_assignment_finder(isolate()); |
bool directive_prologue = true; // Parsing directive prologue. |
while (peek() != end_token) { |
@@ -1519,11 +1521,13 @@ Block* Parser::ParseVariableStatement(bool* ok) { |
return result; |
} |
-static bool IsEvalOrArguments(Handle<String> string) { |
- return string.is_identical_to(FACTORY->eval_symbol()) || |
- string.is_identical_to(FACTORY->arguments_symbol()); |
+ |
+bool Parser::IsEvalOrArguments(Handle<String> string) { |
+ return string.is_identical_to(isolate()->factory()->eval_symbol()) || |
+ string.is_identical_to(isolate()->factory()->arguments_symbol()); |
} |
+ |
// If the variable declaration declares exactly one non-const |
// variable, then *var is set to that variable. In all other cases, |
// *var is untouched; in particular, it is the caller's responsibility |
@@ -3540,7 +3544,7 @@ FunctionLiteral* Parser::ParseFunctionLiteral(Handle<String> var_name, |
NewScope(top_scope_, Scope::FUNCTION_SCOPE, inside_with()); |
LexicalScope lexical_scope(&this->top_scope_, &this->with_nesting_level_, |
scope); |
- TemporaryScope temp_scope(&this->temp_scope_); |
+ TemporaryScope temp_scope(&this->temp_scope_, isolate()); |
top_scope_->SetScopeName(name); |
// FormalParameterList :: |