Merge V8 5.2.361.47 DO NOT MERGE
https://chromium.googlesource.com/v8/v8/+/5.2.361.47
FPIIM-449
Change-Id: Ibec421b85a9b88cb3a432ada642e469fe7e78346
(cherry picked from commit bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8)
diff --git a/src/isolate.h b/src/isolate.h
index 8847164..5895ebb 100644
--- a/src/isolate.h
+++ b/src/isolate.h
@@ -58,7 +58,6 @@
class ExternalCallbackScope;
class ExternalReferenceTable;
class Factory;
-class FunctionInfoListener;
class HandleScopeImplementer;
class HeapProfiler;
class HStatistics;
@@ -383,8 +382,6 @@
/* function cache of the native context. */ \
V(int, next_serial_number, 0) \
V(ExternalReferenceRedirectorPointer*, external_reference_redirector, NULL) \
- /* Part of the state of liveedit. */ \
- V(FunctionInfoListener*, active_function_info_listener, NULL) \
/* State for Relocatable. */ \
V(Relocatable*, relocatable_top, NULL) \
V(DebugObjectCache*, string_stream_debug_object_cache, NULL) \
@@ -495,14 +492,6 @@
return isolate;
}
- // Like Current, but skips the check that |isolate_key_| was initialized.
- // Callers have to ensure that themselves.
- // DO NOT USE. The only remaining callsite will be deleted soon.
- INLINE(static Isolate* UnsafeCurrent()) {
- return reinterpret_cast<Isolate*>(
- base::Thread::GetThreadLocal(isolate_key_));
- }
-
// Usually called by Init(), but can be called early e.g. to allow
// testing components that require logging but not the whole
// isolate.
@@ -633,9 +622,7 @@
inline Handle<JSGlobalObject> global_object();
// Returns the global proxy object of the current context.
- JSObject* global_proxy() {
- return context()->global_proxy();
- }
+ inline Handle<JSObject> global_proxy();
static int ArchiveSpacePerThread() { return sizeof(ThreadLocalTop); }
void FreeThreadResources() { thread_local_top_.Free(); }
@@ -701,7 +688,7 @@
void ReportFailedAccessCheck(Handle<JSObject> receiver);
// Exception throwing support. The caller should use the result
- // of Throw() as its return value.
+ // of Throw() as its return vaue.
Object* Throw(Object* exception, MessageLocation* location = NULL);
Object* ThrowIllegalOperation();
@@ -817,7 +804,6 @@
DCHECK(counters_ != NULL);
return counters_;
}
- CodeRange* code_range() { return code_range_; }
RuntimeProfiler* runtime_profiler() { return runtime_profiler_; }
CompilationCache* compilation_cache() { return compilation_cache_; }
Logger* logger() {
@@ -841,10 +827,6 @@
return materialized_object_store_;
}
- MemoryAllocator* memory_allocator() {
- return memory_allocator_;
- }
-
KeyedLookupCache* keyed_lookup_cache() {
return keyed_lookup_cache_;
}
@@ -974,6 +956,8 @@
bool IsFastArrayConstructorPrototypeChainIntact();
inline bool IsArraySpeciesLookupChainIntact();
+ inline bool IsHasInstanceLookupChainIntact();
+ bool IsIsConcatSpreadableLookupChainIntact();
// On intent to set an element in object, make sure that appropriate
// notifications occur if the set is on the elements of the array or
@@ -990,6 +974,8 @@
UpdateArrayProtectorOnSetElement(object);
}
void InvalidateArraySpeciesProtector();
+ void InvalidateHasInstanceProtector();
+ void InvalidateIsConcatSpreadableProtector();
// Returns true if array is the initial array prototype in any native context.
bool IsAnyInitialArrayPrototype(Handle<JSArray> array);
@@ -1077,6 +1063,7 @@
void EnqueueMicrotask(Handle<Object> microtask);
void RunMicrotasks();
+ bool IsRunningMicrotasks() const { return is_running_microtasks_; }
void SetUseCounterCallback(v8::Isolate::UseCounterCallback callback);
void CountUsage(v8::Isolate::UseCounterFeature feature);
@@ -1121,8 +1108,11 @@
base::AccountingAllocator* allocator() { return &allocator_; }
+ bool IsInAnyContext(Object* object, uint32_t index);
+
protected:
explicit Isolate(bool enable_serializer);
+ bool IsArrayOrObjectPrototype(Object* object);
private:
friend struct GlobalState;
@@ -1240,7 +1230,6 @@
RuntimeProfiler* runtime_profiler_;
CompilationCache* compilation_cache_;
Counters* counters_;
- CodeRange* code_range_;
base::RecursiveMutex break_access_;
Logger* logger_;
StackGuard stack_guard_;
@@ -1254,7 +1243,6 @@
bool capture_stack_trace_for_uncaught_exceptions_;
int stack_trace_for_uncaught_exceptions_frame_limit_;
StackTrace::StackTraceOptions stack_trace_for_uncaught_exceptions_options_;
- MemoryAllocator* memory_allocator_;
KeyedLookupCache* keyed_lookup_cache_;
ContextSlotCache* context_slot_cache_;
DescriptorLookupCache* descriptor_lookup_cache_;
@@ -1358,6 +1346,7 @@
// List of callbacks after microtasks were run.
List<MicrotasksCompletedCallback> microtasks_completed_callbacks_;
+ bool is_running_microtasks_;
v8::Isolate::UseCounterCallback use_counter_callback_;
BasicBlockProfiler* basic_block_profiler_;
@@ -1381,8 +1370,6 @@
friend class Simulator;
friend class StackGuard;
friend class ThreadId;
- friend class TestMemoryAllocatorScope;
- friend class TestCodeRangeScope;
friend class v8::Isolate;
friend class v8::Locker;
friend class v8::Unlocker;
@@ -1499,6 +1486,15 @@
Isolate* isolate_;
};
+#define STACK_CHECK(isolate, result_value) \
+ do { \
+ StackLimitCheck stack_check(isolate); \
+ if (stack_check.HasOverflowed()) { \
+ isolate->Throw(*isolate->factory()->NewRangeError( \
+ MessageTemplate::kStackOverflow)); \
+ return result_value; \
+ } \
+ } while (false)
// Support for temporarily postponing interrupts. When the outermost
// postpone scope is left the interrupts will be re-enabled and any