Index: src/isolate-inl.h |
diff --git a/src/isolate-inl.h b/src/isolate-inl.h |
index 214117879caee97253befe8e8fe90130fa6d76c2..58a169bd9daa137a5a435becee3c5516489ce8ab 100644 |
--- a/src/isolate-inl.h |
+++ b/src/isolate-inl.h |
@@ -101,6 +101,24 @@ Isolate::ExceptionScope::~ExceptionScope() { |
NATIVE_CONTEXT_FIELDS(NATIVE_CONTEXT_FIELD_ACCESSOR) |
#undef NATIVE_CONTEXT_FIELD_ACCESSOR |
+bool Isolate::IsArraySpeciesLookupChainIntact() { |
+ if (!FLAG_harmony_species) return true; |
+ // Note: It would be nice to have debug checks to make sure that the |
+ // species protector is accurate, but this would be hard to do for most of |
+ // what the protector stands for: |
+ // - You'd need to traverse the heap to check that no Array instance has |
+ // a constructor property |
+ // - To check that Array[Symbol.species] == Array, JS code has to execute, |
+ // but JS cannot be invoked in callstack overflow situations |
+ // All that could be checked reliably is that |
+ // Array.prototype.constructor == Array. Given that limitation, no check is |
+ // done here. In place, there are mjsunit tests harmony/array-species* which |
+ // ensure that behavior is correct in various invalid protector cases. |
+ |
+ PropertyCell* species_cell = heap()->species_protector(); |
+ return species_cell->value()->IsSmi() && |
+ Smi::cast(species_cell->value())->value() == kArrayProtectorValid; |
+} |
} // namespace internal |
} // namespace v8 |