summaryrefslogtreecommitdiff
path: root/deps/v8/src/ast/ast.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/ast/ast.cc')
-rw-r--r--deps/v8/src/ast/ast.cc21
1 files changed, 9 insertions, 12 deletions
diff --git a/deps/v8/src/ast/ast.cc b/deps/v8/src/ast/ast.cc
index 710cbb40a5..da14d87475 100644
--- a/deps/v8/src/ast/ast.cc
+++ b/deps/v8/src/ast/ast.cc
@@ -514,18 +514,17 @@ bool ArrayLiteral::is_empty() const {
}
int ArrayLiteral::InitDepthAndFlags() {
- DCHECK_LT(first_spread_index_, 0);
if (is_initialized()) return depth();
- int constants_length = values()->length();
+ int constants_length =
+ first_spread_index_ >= 0 ? first_spread_index_ : values()->length();
// Fill in the literals.
- bool is_simple = true;
+ bool is_simple = first_spread_index_ < 0;
int depth_acc = 1;
int array_index = 0;
for (; array_index < constants_length; array_index++) {
Expression* element = values()->at(array_index);
- DCHECK(!element->IsSpread());
MaterializedLiteral* literal = element->AsMaterializedLiteral();
if (literal != nullptr) {
int subliteral_depth = literal->InitDepthAndFlags() + 1;
@@ -546,11 +545,10 @@ int ArrayLiteral::InitDepthAndFlags() {
}
void ArrayLiteral::BuildConstantElements(Isolate* isolate) {
- DCHECK_LT(first_spread_index_, 0);
-
if (!constant_elements_.is_null()) return;
- int constants_length = values()->length();
+ int constants_length =
+ first_spread_index_ >= 0 ? first_spread_index_ : values()->length();
ElementsKind kind = FIRST_FAST_ELEMENTS_KIND;
Handle<FixedArray> fixed_array =
isolate->factory()->NewFixedArrayWithHoles(constants_length);
@@ -614,11 +612,6 @@ bool ArrayLiteral::IsFastCloningSupported() const {
ConstructorBuiltins::kMaximumClonedShallowArrayElements;
}
-void ArrayLiteral::RewindSpreads() {
- values_->Rewind(first_spread_index_);
- first_spread_index_ = -1;
-}
-
bool MaterializedLiteral::IsSimple() const {
if (IsArrayLiteral()) return AsArrayLiteral()->is_simple();
if (IsObjectLiteral()) return AsObjectLiteral()->is_simple();
@@ -812,6 +805,10 @@ Call::CallType Call::GetCallType() const {
}
}
+ if (expression()->IsResolvedProperty()) {
+ return RESOLVED_PROPERTY_CALL;
+ }
+
return OTHER_CALL;
}