Index: src/ast.cc |
diff --git a/src/ast.cc b/src/ast.cc |
index adf0fb8703dc68800cf8b34fbf1624d71a70383f..3ca1449409466af29bca87c184efa14b6c381a4b 100644 |
--- a/src/ast.cc |
+++ b/src/ast.cc |
@@ -262,7 +262,7 @@ bool ObjectLiteral::IsBoilerplateProperty(ObjectLiteral::Property* property) { |
} |
-void ObjectLiteral::BuildConstantProperties(Isolate* isolate, int* depth) { |
+void ObjectLiteral::BuildConstantProperties(Isolate* isolate) { |
if (!constant_properties_.is_null()) return; |
// Allocate a fixed array to hold all the constant properties. |
@@ -283,9 +283,8 @@ void ObjectLiteral::BuildConstantProperties(Isolate* isolate, int* depth) { |
} |
MaterializedLiteral* m_literal = property->value()->AsMaterializedLiteral(); |
if (m_literal != NULL) { |
- int inner_depth = 1; |
- m_literal->BuildConstants(isolate, &inner_depth); |
- if (inner_depth >= depth_acc) depth_acc = inner_depth + 1; |
+ m_literal->BuildConstants(isolate); |
+ if (m_literal->depth() >= depth_acc) depth_acc = m_literal->depth() + 1; |
} |
// Add CONSTANT and COMPUTED properties to boilerplate. Use undefined |
@@ -334,11 +333,11 @@ void ObjectLiteral::BuildConstantProperties(Isolate* isolate, int* depth) { |
fast_elements_ = |
(max_element_index <= 32) || ((2 * elements) >= max_element_index); |
set_is_simple(is_simple); |
- if (depth != NULL) *depth = depth_acc; |
+ set_depth(depth_acc); |
} |
-void ArrayLiteral::BuildConstantElements(Isolate* isolate, int* depth) { |
+void ArrayLiteral::BuildConstantElements(Isolate* isolate) { |
if (!constant_elements_.is_null()) return; |
// Allocate a fixed array to hold all the object literals. |
@@ -355,9 +354,10 @@ void ArrayLiteral::BuildConstantElements(Isolate* isolate, int* depth) { |
Expression* element = values()->at(i); |
MaterializedLiteral* m_literal = element->AsMaterializedLiteral(); |
if (m_literal != NULL) { |
- int inner_depth = 1; |
- m_literal->BuildConstants(isolate, &inner_depth); |
- if (inner_depth + 1 > depth_acc) depth_acc = inner_depth + 1; |
+ m_literal->BuildConstants(isolate); |
+ if (m_literal->depth() + 1 > depth_acc) { |
+ depth_acc = m_literal->depth() + 1; |
+ } |
} |
Handle<Object> boilerplate_value = GetBoilerplateValue(element, isolate); |
if (boilerplate_value->IsTheHole()) { |
@@ -392,7 +392,7 @@ void ArrayLiteral::BuildConstantElements(Isolate* isolate, int* depth) { |
constant_elements_ = literals; |
set_is_simple(is_simple); |
- if (depth != NULL) *depth = depth_acc; |
+ set_depth(depth_acc); |
} |
@@ -408,14 +408,15 @@ Handle<Object> MaterializedLiteral::GetBoilerplateValue(Expression* expression, |
} |
-void MaterializedLiteral::BuildConstants(Isolate* isolate, int* depth) { |
+void MaterializedLiteral::BuildConstants(Isolate* isolate) { |
if (IsArrayLiteral()) { |
- return AsArrayLiteral()->BuildConstantElements(isolate, depth); |
+ return AsArrayLiteral()->BuildConstantElements(isolate); |
} |
if (IsObjectLiteral()) { |
- return AsObjectLiteral()->BuildConstantProperties(isolate, depth); |
+ return AsObjectLiteral()->BuildConstantProperties(isolate); |
} |
ASSERT(IsRegExpLiteral()); |
+ ASSERT(depth() >= 1); // Depth should be initialized. |
} |