Upgrade V8 to 5.1.281.57 DO NOT MERGE
FPIIM-449
Change-Id: Id981b686b4d587ac31697662eb98bb34be42ad90
(cherry picked from commit 3b9bc31999c9787eb726ecdbfd5796bfdec32a18)
diff --git a/src/isolate.h b/src/isolate.h
index 2d74dc4..8847164 100644
--- a/src/isolate.h
+++ b/src/isolate.h
@@ -11,6 +11,7 @@
#include "include/v8-debug.h"
#include "src/allocation.h"
#include "src/assert-scope.h"
+#include "src/base/accounting-allocator.h"
#include "src/base/atomicops.h"
#include "src/builtins.h"
#include "src/cancelable-task.h"
@@ -26,8 +27,8 @@
#include "src/messages.h"
#include "src/optimizing-compile-dispatcher.h"
#include "src/regexp/regexp-stack.h"
-#include "src/runtime/runtime.h"
#include "src/runtime-profiler.h"
+#include "src/runtime/runtime.h"
#include "src/zone.h"
namespace v8 {
@@ -178,6 +179,20 @@
C(ExternalCaughtException, external_caught_exception) \
C(JSEntrySP, js_entry_sp)
+#define FOR_WITH_HANDLE_SCOPE(isolate, loop_var_type, init, loop_var, \
+ limit_check, increment, body) \
+ do { \
+ loop_var_type init; \
+ loop_var_type for_with_handle_limit = loop_var; \
+ Isolate* for_with_handle_isolate = isolate; \
+ while (limit_check) { \
+ for_with_handle_limit += 1024; \
+ HandleScope loop_scope(for_with_handle_isolate); \
+ for (; limit_check && loop_var < for_with_handle_limit; increment) { \
+ body \
+ } \
+ } \
+ } while (false)
// Platform-independent, reliable thread identifier.
class ThreadId {
@@ -378,7 +393,6 @@
V(HashMap*, external_reference_map, NULL) \
V(HashMap*, root_index_map, NULL) \
V(int, pending_microtask_count, 0) \
- V(bool, autorun_microtasks, true) \
V(HStatistics*, hstatistics, NULL) \
V(CompilationStatistics*, turbo_statistics, NULL) \
V(HTracer*, htracer, NULL) \
@@ -668,12 +682,12 @@
Handle<JSArray> CaptureCurrentStackTrace(
int frame_limit,
StackTrace::StackTraceOptions options);
- Handle<Object> CaptureSimpleStackTrace(Handle<JSObject> error_object,
+ Handle<Object> CaptureSimpleStackTrace(Handle<JSReceiver> error_object,
Handle<Object> caller);
- MaybeHandle<JSObject> CaptureAndSetDetailedStackTrace(
- Handle<JSObject> error_object);
- MaybeHandle<JSObject> CaptureAndSetSimpleStackTrace(
- Handle<JSObject> error_object, Handle<Object> caller);
+ MaybeHandle<JSReceiver> CaptureAndSetDetailedStackTrace(
+ Handle<JSReceiver> error_object);
+ MaybeHandle<JSReceiver> CaptureAndSetSimpleStackTrace(
+ Handle<JSReceiver> error_object, Handle<Object> caller);
Handle<JSArray> GetDetailedStackTrace(Handle<JSObject> error_object);
Handle<JSArray> GetDetailedFromSimpleStackTrace(
Handle<JSObject> error_object);
@@ -953,14 +967,13 @@
date_cache_ = date_cache;
}
- Map* get_initial_js_array_map(ElementsKind kind,
- Strength strength = Strength::WEAK);
+ Map* get_initial_js_array_map(ElementsKind kind);
static const int kArrayProtectorValid = 1;
static const int kArrayProtectorInvalid = 0;
bool IsFastArrayConstructorPrototypeChainIntact();
- bool IsArraySpeciesLookupChainIntact();
+ inline bool IsArraySpeciesLookupChainIntact();
// 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
@@ -998,13 +1011,6 @@
return optimizing_compile_dispatcher_ != NULL;
}
- bool concurrent_osr_enabled() const {
- // Thread is only available with flag enabled.
- DCHECK(optimizing_compile_dispatcher_ == NULL ||
- FLAG_concurrent_recompilation);
- return optimizing_compile_dispatcher_ != NULL && FLAG_concurrent_osr;
- }
-
OptimizingCompileDispatcher* optimizing_compile_dispatcher() {
return optimizing_compile_dispatcher_;
}
@@ -1061,6 +1067,10 @@
void RemoveBeforeCallEnteredCallback(BeforeCallEnteredCallback callback);
void FireBeforeCallEnteredCallback();
+ void AddMicrotasksCompletedCallback(MicrotasksCompletedCallback callback);
+ void RemoveMicrotasksCompletedCallback(MicrotasksCompletedCallback callback);
+ void FireMicrotasksCompletedCallback();
+
void SetPromiseRejectCallback(PromiseRejectCallback callback);
void ReportPromiseReject(Handle<JSObject> promise, Handle<Object> value,
v8::PromiseRejectEvent event);
@@ -1080,6 +1090,14 @@
int GetNextUniqueSharedFunctionInfoId() { return next_unique_sfi_id_++; }
#endif
+ // Support for dynamically disabling tail call elimination.
+ Address is_tail_call_elimination_enabled_address() {
+ return reinterpret_cast<Address>(&is_tail_call_elimination_enabled_);
+ }
+ bool is_tail_call_elimination_enabled() const {
+ return is_tail_call_elimination_enabled_;
+ }
+ void SetTailCallEliminationEnabled(bool enabled);
void AddDetachedContext(Handle<Context> context);
void CheckDetachedContextsAfterGC();
@@ -1101,6 +1119,8 @@
interpreter::Interpreter* interpreter() const { return interpreter_; }
+ base::AccountingAllocator* allocator() { return &allocator_; }
+
protected:
explicit Isolate(bool enable_serializer);
@@ -1209,6 +1229,8 @@
// the frame.
void RemoveMaterializedObjectsOnUnwind(StackFrame* frame);
+ void RunMicrotasksInternal();
+
base::Atomic32 id_;
EntryStackItem* entry_stack_;
int stack_trace_nesting_level_;
@@ -1239,6 +1261,7 @@
HandleScopeData handle_scope_data_;
HandleScopeImplementer* handle_scope_implementer_;
UnicodeCache* unicode_cache_;
+ base::AccountingAllocator allocator_;
Zone runtime_zone_;
Zone interface_descriptor_zone_;
InnerPointerToCodeCache* inner_pointer_to_code_cache_;
@@ -1266,6 +1289,9 @@
// True if this isolate was initialized from a snapshot.
bool initialized_from_snapshot_;
+ // True if ES2015 tail call elimination feature is enabled.
+ bool is_tail_call_elimination_enabled_;
+
// Time stamp at initialization.
double time_millis_at_init_;
@@ -1330,6 +1356,9 @@
// List of callbacks when a Call completes.
List<CallCompletedCallback> call_completed_callbacks_;
+ // List of callbacks after microtasks were run.
+ List<MicrotasksCompletedCallback> microtasks_completed_callbacks_;
+
v8::Isolate::UseCounterCallback use_counter_callback_;
BasicBlockProfiler* basic_block_profiler_;
@@ -1358,6 +1387,8 @@
friend class v8::Locker;
friend class v8::Unlocker;
friend v8::StartupData v8::V8::CreateSnapshotDataBlob(const char*);
+ friend v8::StartupData v8::V8::WarmUpSnapshotDataBlob(v8::StartupData,
+ const char*);
DISALLOW_COPY_AND_ASSIGN(Isolate);
};