libv8 6.3.292.48.1-universal-darwin-14 → 6.7.288.46.1beta0-universal-darwin-14

Sign up to get free protection for your applications and to get access to all the features.
@@ -286,6 +286,13 @@ class V8_EXPORT CpuProfiler {
286
286
  */
287
287
  static CpuProfiler* New(Isolate* isolate);
288
288
 
289
+ /**
290
+ * Synchronously collect current stack sample in all profilers attached to
291
+ * the |isolate|. The call does not affect number of ticks recorded for
292
+ * the current top node.
293
+ */
294
+ static void CollectSample(Isolate* isolate);
295
+
289
296
  /**
290
297
  * Disposes the CPU profiler object.
291
298
  */
@@ -322,12 +329,14 @@ class V8_EXPORT CpuProfiler {
322
329
  * Recording the forced sample does not contribute to the aggregated
323
330
  * profile statistics.
324
331
  */
325
- void CollectSample();
332
+ V8_DEPRECATED("Use static CollectSample(Isolate*) instead.",
333
+ void CollectSample());
326
334
 
327
335
  /**
328
336
  * Tells the profiler whether the embedder is idle.
329
337
  */
330
- void SetIdle(bool is_idle);
338
+ V8_DEPRECATED("Use Isolate::SetIdle(bool) instead.",
339
+ void SetIdle(bool is_idle));
331
340
 
332
341
  private:
333
342
  CpuProfiler();
@@ -393,7 +402,8 @@ class V8_EXPORT HeapGraphNode {
393
402
  // snapshot items together.
394
403
  kConsString = 10, // Concatenated string. A pair of pointers to strings.
395
404
  kSlicedString = 11, // Sliced string. A fragment of another string.
396
- kSymbol = 12 // A Symbol (ES6).
405
+ kSymbol = 12, // A Symbol (ES6).
406
+ kBigInt = 13 // BigInt.
397
407
  };
398
408
 
399
409
  /** Returns node type (see HeapGraphNode::Type). */
@@ -618,6 +628,68 @@ class V8_EXPORT AllocationProfile {
618
628
  static const int kNoColumnNumberInfo = Message::kNoColumnInfo;
619
629
  };
620
630
 
631
+ /**
632
+ * An object graph consisting of embedder objects and V8 objects.
633
+ * Edges of the graph are strong references between the objects.
634
+ * The embedder can build this graph during heap snapshot generation
635
+ * to include the embedder objects in the heap snapshot.
636
+ * Usage:
637
+ * 1) Define derived class of EmbedderGraph::Node for embedder objects.
638
+ * 2) Set the build embedder graph callback on the heap profiler using
639
+ * HeapProfiler::SetBuildEmbedderGraphCallback.
640
+ * 3) In the callback use graph->AddEdge(node1, node2) to add an edge from
641
+ * node1 to node2.
642
+ * 4) To represent references from/to V8 object, construct V8 nodes using
643
+ * graph->V8Node(value).
644
+ */
645
+ class V8_EXPORT EmbedderGraph {
646
+ public:
647
+ class Node {
648
+ public:
649
+ Node() = default;
650
+ virtual ~Node() = default;
651
+ virtual const char* Name() = 0;
652
+ virtual size_t SizeInBytes() = 0;
653
+ /**
654
+ * The corresponding V8 wrapper node if not null.
655
+ * During heap snapshot generation the embedder node and the V8 wrapper
656
+ * node will be merged into one node to simplify retaining paths.
657
+ */
658
+ virtual Node* WrapperNode() { return nullptr; }
659
+ virtual bool IsRootNode() { return false; }
660
+ /** Must return true for non-V8 nodes. */
661
+ virtual bool IsEmbedderNode() { return true; }
662
+ /**
663
+ * Optional name prefix. It is used in Chrome for tagging detached nodes.
664
+ */
665
+ virtual const char* NamePrefix() { return nullptr; }
666
+
667
+ private:
668
+ Node(const Node&) = delete;
669
+ Node& operator=(const Node&) = delete;
670
+ };
671
+
672
+ /**
673
+ * Returns a node corresponding to the given V8 value. Ownership is not
674
+ * transferred. The result pointer is valid while the graph is alive.
675
+ */
676
+ virtual Node* V8Node(const v8::Local<v8::Value>& value) = 0;
677
+
678
+ /**
679
+ * Adds the given node to the graph and takes ownership of the node.
680
+ * Returns a raw pointer to the node that is valid while the graph is alive.
681
+ */
682
+ virtual Node* AddNode(std::unique_ptr<Node> node) = 0;
683
+
684
+ /**
685
+ * Adds an edge that represents a strong reference from the given node
686
+ * |from| to the given node |to|. The nodes must be added to the graph
687
+ * before calling this function.
688
+ */
689
+ virtual void AddEdge(Node* from, Node* to) = 0;
690
+
691
+ virtual ~EmbedderGraph() = default;
692
+ };
621
693
 
622
694
  /**
623
695
  * Interface for controlling heap profiling. Instance of the
@@ -657,6 +729,15 @@ class V8_EXPORT HeapProfiler {
657
729
  typedef RetainedObjectInfo* (*WrapperInfoCallback)(uint16_t class_id,
658
730
  Local<Value> wrapper);
659
731
 
732
+ /**
733
+ * Callback function invoked during heap snapshot generation to retrieve
734
+ * the embedder object graph. The callback should use graph->AddEdge(..) to
735
+ * add references between the objects.
736
+ * The callback must not trigger garbage collection in V8.
737
+ */
738
+ typedef void (*BuildEmbedderGraphCallback)(v8::Isolate* isolate,
739
+ v8::EmbedderGraph* graph);
740
+
660
741
  /** Returns the number of snapshots taken. */
661
742
  int GetSnapshotCount();
662
743
 
@@ -796,11 +877,16 @@ class V8_EXPORT HeapProfiler {
796
877
  void DeleteAllHeapSnapshots();
797
878
 
798
879
  /** Binds a callback to embedder's class ID. */
799
- void SetWrapperClassInfoProvider(
800
- uint16_t class_id,
801
- WrapperInfoCallback callback);
880
+ V8_DEPRECATED(
881
+ "Use SetBuildEmbedderGraphCallback to provide info about embedder nodes",
882
+ void SetWrapperClassInfoProvider(uint16_t class_id,
883
+ WrapperInfoCallback callback));
884
+
885
+ V8_DEPRECATED(
886
+ "Use SetBuildEmbedderGraphCallback to provide info about embedder nodes",
887
+ void SetGetRetainerInfosCallback(GetRetainerInfosCallback callback));
802
888
 
803
- void SetGetRetainerInfosCallback(GetRetainerInfosCallback callback);
889
+ void SetBuildEmbedderGraphCallback(BuildEmbedderGraphCallback callback);
804
890
 
805
891
  /**
806
892
  * Default value of persistent handle class ID. Must not be used to
@@ -196,16 +196,6 @@ class PersistentValueMapBase {
196
196
  return SetReturnValueFromVal(&returnValue, Traits::Get(&impl_, key));
197
197
  }
198
198
 
199
- /**
200
- * Call Isolate::SetReference with the given parent and the map value.
201
- */
202
- void SetReference(const K& key,
203
- const Persistent<Object>& parent) {
204
- GetIsolate()->SetReference(
205
- reinterpret_cast<internal::Object**>(parent.val_),
206
- reinterpret_cast<internal::Object**>(FromVal(Traits::Get(&impl_, key))));
207
- }
208
-
209
199
  /**
210
200
  * Call V8::RegisterExternallyReferencedObject with the map value for given
211
201
  * key.
@@ -393,9 +383,14 @@ class PersistentValueMap : public PersistentValueMapBase<K, V, Traits> {
393
383
  */
394
384
  Global<V> SetUnique(const K& key, Global<V>* persistent) {
395
385
  if (Traits::kCallbackType != kNotWeak) {
386
+ WeakCallbackType callback_type =
387
+ Traits::kCallbackType == kWeakWithInternalFields
388
+ ? WeakCallbackType::kInternalFields
389
+ : WeakCallbackType::kParameter;
396
390
  Local<V> value(Local<V>::New(this->isolate(), *persistent));
397
391
  persistent->template SetWeak<typename Traits::WeakCallbackDataType>(
398
- Traits::WeakCallbackParameter(this, key, value), WeakCallback);
392
+ Traits::WeakCallbackParameter(this, key, value), WeakCallback,
393
+ callback_type);
399
394
  }
400
395
  PersistentContainerValue old_value =
401
396
  Traits::Set(this->impl(), key, this->ClearAndLeak(persistent));
@@ -29,9 +29,10 @@
29
29
  "." V8_S(V8_MINOR_VERSION) "." V8_S(V8_BUILD_NUMBER) "." V8_S( \
30
30
  V8_PATCH_LEVEL) V8_EMBEDDER_STRING V8_CANDIDATE_STRING
31
31
  #else
32
- #define V8_VERSION_STRING \
33
- V8_S(V8_MAJOR_VERSION) \
34
- "." V8_S(V8_MINOR_VERSION) "." V8_S(V8_BUILD_NUMBER) V8_CANDIDATE_STRING
32
+ #define V8_VERSION_STRING \
33
+ V8_S(V8_MAJOR_VERSION) \
34
+ "." V8_S(V8_MINOR_VERSION) "." V8_S(V8_BUILD_NUMBER) \
35
+ V8_EMBEDDER_STRING V8_CANDIDATE_STRING
35
36
  #endif
36
37
 
37
38
  #endif // V8_VERSION_STRING_H_
@@ -9,9 +9,9 @@
9
9
  // NOTE these macros are used by some of the tool scripts and the build
10
10
  // system so their names cannot be changed without changing the scripts.
11
11
  #define V8_MAJOR_VERSION 6
12
- #define V8_MINOR_VERSION 3
13
- #define V8_BUILD_NUMBER 292
14
- #define V8_PATCH_LEVEL 48
12
+ #define V8_MINOR_VERSION 7
13
+ #define V8_BUILD_NUMBER 288
14
+ #define V8_PATCH_LEVEL 46
15
15
 
16
16
  // Use 1 for candidates and 0 otherwise.
17
17
  // (Boolean macro values are not supported by all preprocessors.)
@@ -66,6 +66,8 @@ namespace v8 {
66
66
  class AccessorSignature;
67
67
  class Array;
68
68
  class ArrayBuffer;
69
+ class BigInt;
70
+ class BigIntObject;
69
71
  class Boolean;
70
72
  class BooleanObject;
71
73
  class Context;
@@ -145,7 +147,7 @@ class Heap;
145
147
  class HeapObject;
146
148
  class Isolate;
147
149
  class Object;
148
- struct StreamedSource;
150
+ struct ScriptStreamingData;
149
151
  template<typename T> class CustomArguments;
150
152
  class PropertyCallbackArguments;
151
153
  class FunctionCallbackArguments;
@@ -313,6 +315,7 @@ class Local {
313
315
  friend class String;
314
316
  friend class Object;
315
317
  friend class Context;
318
+ friend class Isolate;
316
319
  friend class Private;
317
320
  template<class F> friend class internal::CustomArguments;
318
321
  friend Local<Primitive> Undefined(Isolate* isolate);
@@ -433,20 +436,6 @@ class WeakCallbackInfo {
433
436
  V8_INLINE T* GetParameter() const { return parameter_; }
434
437
  V8_INLINE void* GetInternalField(int index) const;
435
438
 
436
- V8_INLINE V8_DEPRECATED("use indexed version",
437
- void* GetInternalField1() const) {
438
- return embedder_fields_[0];
439
- }
440
- V8_INLINE V8_DEPRECATED("use indexed version",
441
- void* GetInternalField2() const) {
442
- return embedder_fields_[1];
443
- }
444
-
445
- V8_DEPRECATED("Not realiable once SetSecondPassCallback() was used.",
446
- bool IsFirstPass() const) {
447
- return callback_ != nullptr;
448
- }
449
-
450
439
  // When first called, the embedder MUST Reset() the Global which triggered the
451
440
  // callback. The Global itself is unusable for anything else. No v8 other api
452
441
  // calls may be called in the first callback. Should additional work be
@@ -566,6 +555,14 @@ template <class T> class PersistentBase {
566
555
  // TODO(dcarney): remove this.
567
556
  V8_INLINE void ClearWeak() { ClearWeak<void>(); }
568
557
 
558
+ /**
559
+ * Annotates the strong handle with the given label, which is then used by the
560
+ * heap snapshot generator as a name of the edge from the root to the handle.
561
+ * The function does not take ownership of the label and assumes that the
562
+ * label is valid as long as the handle is valid.
563
+ */
564
+ V8_INLINE void AnnotateStrongRetainer(const char* label);
565
+
569
566
  /**
570
567
  * Allows the embedder to tell the v8 garbage collector that a certain object
571
568
  * is alive. Only allowed when the embedder is asked to trace its heap by
@@ -579,16 +576,22 @@ template <class T> class PersistentBase {
579
576
  * independent handle should not assume that it will be preceded by a global
580
577
  * GC prologue callback or followed by a global GC epilogue callback.
581
578
  */
582
- V8_INLINE void MarkIndependent();
579
+ V8_DEPRECATE_SOON(
580
+ "Objects are always considered independent. "
581
+ "Use MarkActive to avoid collecting otherwise dead weak handles.",
582
+ V8_INLINE void MarkIndependent());
583
583
 
584
584
  /**
585
585
  * Marks the reference to this object as active. The scavenge garbage
586
- * collection should not reclaim the objects marked as active.
586
+ * collection should not reclaim the objects marked as active, even if the
587
+ * object held by the handle is otherwise unreachable.
588
+ *
587
589
  * This bit is cleared after the each garbage collection pass.
588
590
  */
589
591
  V8_INLINE void MarkActive();
590
592
 
591
- V8_INLINE bool IsIndependent() const;
593
+ V8_DEPRECATE_SOON("See MarkIndependent.",
594
+ V8_INLINE bool IsIndependent() const);
592
595
 
593
596
  /** Checks if the handle holds the only reference to an object. */
594
597
  V8_INLINE bool IsNearDeath() const;
@@ -952,7 +955,7 @@ class V8_EXPORT EscapableHandleScope : public HandleScope {
952
955
  */
953
956
  class V8_EXPORT SealHandleScope {
954
957
  public:
955
- SealHandleScope(Isolate* isolate);
958
+ explicit SealHandleScope(Isolate* isolate);
956
959
  ~SealHandleScope();
957
960
 
958
961
  SealHandleScope(const SealHandleScope&) = delete;
@@ -984,9 +987,6 @@ class V8_EXPORT Data {
984
987
  };
985
988
 
986
989
  /**
987
- * This is an unfinished experimental feature, and is only exposed
988
- * here for internal testing purposes. DO NOT USE.
989
- *
990
990
  * A container type that holds relevant metadata for module loading.
991
991
  *
992
992
  * This is passed back to the embedder as part of
@@ -1008,9 +1008,6 @@ class V8_EXPORT ScriptOrModule {
1008
1008
  };
1009
1009
 
1010
1010
  /**
1011
- * This is an unfinished experimental feature, and is only exposed
1012
- * here for internal testing purposes. DO NOT USE.
1013
- *
1014
1011
  * An array to hold Primitive values. This is used by the embedder to
1015
1012
  * pass host defined options to the ScriptOptions during compilation.
1016
1013
  *
@@ -1143,15 +1140,16 @@ class V8_EXPORT Location {
1143
1140
  };
1144
1141
 
1145
1142
  /**
1146
- * This is an unfinished experimental feature, and is only exposed
1147
- * here for internal testing purposes. DO NOT USE.
1148
- *
1149
1143
  * A compiled JavaScript module.
1150
1144
  */
1151
1145
  class V8_EXPORT Module {
1152
1146
  public:
1153
1147
  /**
1154
1148
  * The different states a module can be in.
1149
+ *
1150
+ * This corresponds to the states used in ECMAScript except that "evaluated"
1151
+ * is split into kEvaluated and kErrored, indicating success and failure,
1152
+ * respectively.
1155
1153
  */
1156
1154
  enum Status {
1157
1155
  kUninstantiated,
@@ -1199,29 +1197,29 @@ class V8_EXPORT Module {
1199
1197
  Local<Module> referrer);
1200
1198
 
1201
1199
  /**
1202
- * ModuleDeclarationInstantiation
1200
+ * Instantiates the module and its dependencies.
1203
1201
  *
1204
1202
  * Returns an empty Maybe<bool> if an exception occurred during
1205
1203
  * instantiation. (In the case where the callback throws an exception, that
1206
1204
  * exception is propagated.)
1207
1205
  */
1208
- V8_DEPRECATED("Use Maybe<bool> version",
1209
- bool Instantiate(Local<Context> context,
1210
- ResolveCallback callback));
1211
1206
  V8_WARN_UNUSED_RESULT Maybe<bool> InstantiateModule(Local<Context> context,
1212
1207
  ResolveCallback callback);
1213
1208
 
1214
1209
  /**
1215
- * ModuleEvaluation
1210
+ * Evaluates the module and its dependencies.
1216
1211
  *
1217
- * Returns the completion value.
1218
- * TODO(neis): Be more precise or say nothing.
1212
+ * If status is kInstantiated, run the module's code. On success, set status
1213
+ * to kEvaluated and return the completion value; on failure, set status to
1214
+ * kErrored and propagate the thrown exception (which is then also available
1215
+ * via |GetException|).
1219
1216
  */
1220
1217
  V8_WARN_UNUSED_RESULT MaybeLocal<Value> Evaluate(Local<Context> context);
1221
1218
 
1222
1219
  /**
1223
1220
  * Returns the namespace object of this module.
1224
- * The module's status must be kEvaluated.
1221
+ *
1222
+ * The module's status must be at least kInstantiated.
1225
1223
  */
1226
1224
  Local<Value> GetModuleNamespace();
1227
1225
  };
@@ -1235,24 +1233,23 @@ class V8_EXPORT Script {
1235
1233
  /**
1236
1234
  * A shorthand for ScriptCompiler::Compile().
1237
1235
  */
1238
- static V8_DEPRECATE_SOON(
1239
- "Use maybe version",
1240
- Local<Script> Compile(Local<String> source,
1241
- ScriptOrigin* origin = nullptr));
1236
+ static V8_DEPRECATED("Use maybe version",
1237
+ Local<Script> Compile(Local<String> source,
1238
+ ScriptOrigin* origin = nullptr));
1242
1239
  static V8_WARN_UNUSED_RESULT MaybeLocal<Script> Compile(
1243
1240
  Local<Context> context, Local<String> source,
1244
1241
  ScriptOrigin* origin = nullptr);
1245
1242
 
1246
- static Local<Script> V8_DEPRECATE_SOON("Use maybe version",
1247
- Compile(Local<String> source,
1248
- Local<String> file_name));
1243
+ static Local<Script> V8_DEPRECATED("Use maybe version",
1244
+ Compile(Local<String> source,
1245
+ Local<String> file_name));
1249
1246
 
1250
1247
  /**
1251
1248
  * Runs the script returning the resulting value. It will be run in the
1252
1249
  * context in which it was created (ScriptCompiler::CompileBound or
1253
1250
  * UnboundScript::BindToCurrentContext()).
1254
1251
  */
1255
- V8_DEPRECATE_SOON("Use maybe version", Local<Value> Run());
1252
+ V8_DEPRECATED("Use maybe version", Local<Value> Run());
1256
1253
  V8_WARN_UNUSED_RESULT MaybeLocal<Value> Run(Local<Context> context);
1257
1254
 
1258
1255
  /**
@@ -1411,14 +1408,14 @@ class V8_EXPORT ScriptCompiler {
1411
1408
  // object is alive.
1412
1409
  const CachedData* GetCachedData() const;
1413
1410
 
1414
- internal::StreamedSource* impl() const { return impl_; }
1411
+ internal::ScriptStreamingData* impl() const { return impl_; }
1415
1412
 
1416
1413
  // Prevent copying.
1417
1414
  StreamedSource(const StreamedSource&) = delete;
1418
1415
  StreamedSource& operator=(const StreamedSource&) = delete;
1419
1416
 
1420
1417
  private:
1421
- internal::StreamedSource* impl_;
1418
+ internal::ScriptStreamingData* impl_;
1422
1419
  };
1423
1420
 
1424
1421
  /**
@@ -1437,7 +1434,29 @@ class V8_EXPORT ScriptCompiler {
1437
1434
  kConsumeParserCache,
1438
1435
  kProduceCodeCache,
1439
1436
  kProduceFullCodeCache,
1440
- kConsumeCodeCache
1437
+ kConsumeCodeCache,
1438
+ kEagerCompile
1439
+ };
1440
+
1441
+ /**
1442
+ * The reason for which we are not requesting or providing a code cache.
1443
+ */
1444
+ enum NoCacheReason {
1445
+ kNoCacheNoReason = 0,
1446
+ kNoCacheBecauseCachingDisabled,
1447
+ kNoCacheBecauseNoResource,
1448
+ kNoCacheBecauseInlineScript,
1449
+ kNoCacheBecauseModule,
1450
+ kNoCacheBecauseStreamingSource,
1451
+ kNoCacheBecauseInspector,
1452
+ kNoCacheBecauseScriptTooSmall,
1453
+ kNoCacheBecauseCacheTooCold,
1454
+ kNoCacheBecauseV8Extension,
1455
+ kNoCacheBecauseExtensionModule,
1456
+ kNoCacheBecausePacScript,
1457
+ kNoCacheBecauseInDocumentWrite,
1458
+ kNoCacheBecauseResourceWithNoCacheHandler,
1459
+ kNoCacheBecauseDeferredProduceCodeCache
1441
1460
  };
1442
1461
 
1443
1462
  /**
@@ -1453,13 +1472,10 @@ class V8_EXPORT ScriptCompiler {
1453
1472
  * \return Compiled script object (context independent; for running it must be
1454
1473
  * bound to a context).
1455
1474
  */
1456
- static V8_DEPRECATED("Use maybe version",
1457
- Local<UnboundScript> CompileUnbound(
1458
- Isolate* isolate, Source* source,
1459
- CompileOptions options = kNoCompileOptions));
1460
1475
  static V8_WARN_UNUSED_RESULT MaybeLocal<UnboundScript> CompileUnboundScript(
1461
1476
  Isolate* isolate, Source* source,
1462
- CompileOptions options = kNoCompileOptions);
1477
+ CompileOptions options = kNoCompileOptions,
1478
+ NoCacheReason no_cache_reason = kNoCacheNoReason);
1463
1479
 
1464
1480
  /**
1465
1481
  * Compiles the specified script (bound to current context).
@@ -1472,13 +1488,10 @@ class V8_EXPORT ScriptCompiler {
1472
1488
  * when this function was called. When run it will always use this
1473
1489
  * context.
1474
1490
  */
1475
- static V8_DEPRECATED(
1476
- "Use maybe version",
1477
- Local<Script> Compile(Isolate* isolate, Source* source,
1478
- CompileOptions options = kNoCompileOptions));
1479
1491
  static V8_WARN_UNUSED_RESULT MaybeLocal<Script> Compile(
1480
1492
  Local<Context> context, Source* source,
1481
- CompileOptions options = kNoCompileOptions);
1493
+ CompileOptions options = kNoCompileOptions,
1494
+ NoCacheReason no_cache_reason = kNoCacheNoReason);
1482
1495
 
1483
1496
  /**
1484
1497
  * Returns a task which streams script data into V8, or NULL if the script
@@ -1502,11 +1515,6 @@ class V8_EXPORT ScriptCompiler {
1502
1515
  * (ScriptStreamingTask has been run). V8 doesn't construct the source string
1503
1516
  * during streaming, so the embedder needs to pass the full source here.
1504
1517
  */
1505
- static V8_DEPRECATED("Use maybe version",
1506
- Local<Script> Compile(Isolate* isolate,
1507
- StreamedSource* source,
1508
- Local<String> full_source_string,
1509
- const ScriptOrigin& origin));
1510
1518
  static V8_WARN_UNUSED_RESULT MaybeLocal<Script> Compile(
1511
1519
  Local<Context> context, StreamedSource* source,
1512
1520
  Local<String> full_source_string, const ScriptOrigin& origin);
@@ -1532,9 +1540,6 @@ class V8_EXPORT ScriptCompiler {
1532
1540
  static uint32_t CachedDataVersionTag();
1533
1541
 
1534
1542
  /**
1535
- * This is an unfinished experimental feature, and is only exposed
1536
- * here for internal testing purposes. DO NOT USE.
1537
- *
1538
1543
  * Compile an ES module, returning a Module that encapsulates
1539
1544
  * the compiled code.
1540
1545
  *
@@ -1554,21 +1559,41 @@ class V8_EXPORT ScriptCompiler {
1554
1559
  * It is possible to specify multiple context extensions (obj in the above
1555
1560
  * example).
1556
1561
  */
1557
- static V8_DEPRECATE_SOON("Use maybe version",
1558
- Local<Function> CompileFunctionInContext(
1559
- Isolate* isolate, Source* source,
1560
- Local<Context> context, size_t arguments_count,
1561
- Local<String> arguments[],
1562
- size_t context_extension_count,
1563
- Local<Object> context_extensions[]));
1562
+ static V8_DEPRECATED("Use maybe version",
1563
+ Local<Function> CompileFunctionInContext(
1564
+ Isolate* isolate, Source* source,
1565
+ Local<Context> context, size_t arguments_count,
1566
+ Local<String> arguments[],
1567
+ size_t context_extension_count,
1568
+ Local<Object> context_extensions[]));
1564
1569
  static V8_WARN_UNUSED_RESULT MaybeLocal<Function> CompileFunctionInContext(
1565
1570
  Local<Context> context, Source* source, size_t arguments_count,
1566
1571
  Local<String> arguments[], size_t context_extension_count,
1567
- Local<Object> context_extensions[]);
1572
+ Local<Object> context_extensions[],
1573
+ CompileOptions options = kNoCompileOptions,
1574
+ NoCacheReason no_cache_reason = kNoCacheNoReason);
1575
+
1576
+ /**
1577
+ * Creates and returns code cache for the specified unbound_script.
1578
+ * This will return nullptr if the script cannot be serialized. The
1579
+ * CachedData returned by this function should be owned by the caller.
1580
+ */
1581
+ static CachedData* CreateCodeCache(Local<UnboundScript> unbound_script,
1582
+ Local<String> source);
1583
+
1584
+ /**
1585
+ * Creates and returns code cache for the specified function that was
1586
+ * previously produced by CompileFunctionInContext.
1587
+ * This will return nullptr if the script cannot be serialized. The
1588
+ * CachedData returned by this function should be owned by the caller.
1589
+ */
1590
+ static CachedData* CreateCodeCacheForFunction(Local<Function> function,
1591
+ Local<String> source);
1568
1592
 
1569
1593
  private:
1570
1594
  static V8_WARN_UNUSED_RESULT MaybeLocal<UnboundScript> CompileUnboundInternal(
1571
- Isolate* isolate, Source* source, CompileOptions options);
1595
+ Isolate* isolate, Source* source, CompileOptions options,
1596
+ NoCacheReason no_cache_reason);
1572
1597
  };
1573
1598
 
1574
1599
 
@@ -1579,7 +1604,7 @@ class V8_EXPORT Message {
1579
1604
  public:
1580
1605
  Local<String> Get() const;
1581
1606
 
1582
- V8_DEPRECATE_SOON("Use maybe version", Local<String> GetSourceLine() const);
1607
+ V8_DEPRECATED("Use maybe version", Local<String> GetSourceLine() const);
1583
1608
  V8_WARN_UNUSED_RESULT MaybeLocal<String> GetSourceLine(
1584
1609
  Local<Context> context) const;
1585
1610
 
@@ -1605,7 +1630,7 @@ class V8_EXPORT Message {
1605
1630
  /**
1606
1631
  * Returns the number, 1-based, of the line where the error occurred.
1607
1632
  */
1608
- V8_DEPRECATE_SOON("Use maybe version", int GetLineNumber() const);
1633
+ V8_DEPRECATED("Use maybe version", int GetLineNumber() const);
1609
1634
  V8_WARN_UNUSED_RESULT Maybe<int> GetLineNumber(Local<Context> context) const;
1610
1635
 
1611
1636
  /**
@@ -1629,14 +1654,14 @@ class V8_EXPORT Message {
1629
1654
  * Returns the index within the line of the first character where
1630
1655
  * the error occurred.
1631
1656
  */
1632
- V8_DEPRECATE_SOON("Use maybe version", int GetStartColumn() const);
1657
+ int GetStartColumn() const;
1633
1658
  V8_WARN_UNUSED_RESULT Maybe<int> GetStartColumn(Local<Context> context) const;
1634
1659
 
1635
1660
  /**
1636
1661
  * Returns the index within the line of the last character where
1637
1662
  * the error occurred.
1638
1663
  */
1639
- V8_DEPRECATED("Use maybe version", int GetEndColumn() const);
1664
+ int GetEndColumn() const;
1640
1665
  V8_WARN_UNUSED_RESULT Maybe<int> GetEndColumn(Local<Context> context) const;
1641
1666
 
1642
1667
  /**
@@ -1692,11 +1717,6 @@ class V8_EXPORT StackTrace {
1692
1717
  */
1693
1718
  int GetFrameCount() const;
1694
1719
 
1695
- /**
1696
- * Returns StackTrace as a v8::Array that contains StackFrame objects.
1697
- */
1698
- V8_DEPRECATED("Use native API instead", Local<Array> AsArray());
1699
-
1700
1720
  /**
1701
1721
  * Grab a snapshot of the current JavaScript execution stack.
1702
1722
  *
@@ -1818,8 +1838,6 @@ class V8_EXPORT JSON {
1818
1838
  * \param json_string The string to parse.
1819
1839
  * \return The corresponding value if successfully parsed.
1820
1840
  */
1821
- static V8_DEPRECATED("Use the maybe version taking context",
1822
- Local<Value> Parse(Local<String> json_string));
1823
1841
  static V8_DEPRECATE_SOON("Use the maybe version taking context",
1824
1842
  MaybeLocal<Value> Parse(Isolate* isolate,
1825
1843
  Local<String> json_string));
@@ -1871,7 +1889,7 @@ class V8_EXPORT ValueSerializer {
1871
1889
  * SharedArrayBuffer object. The embedder must return an ID for the
1872
1890
  * object, using the same ID if this SharedArrayBuffer has already been
1873
1891
  * serialized in this buffer. When deserializing, this ID will be passed to
1874
- * ValueDeserializer::TransferSharedArrayBuffer as |transfer_id|.
1892
+ * ValueDeserializer::GetSharedArrayBufferFromId as |clone_id|.
1875
1893
  *
1876
1894
  * If the object cannot be serialized, an
1877
1895
  * exception should be thrown and Nothing<uint32_t>() returned.
@@ -1998,6 +2016,13 @@ class V8_EXPORT ValueDeserializer {
1998
2016
  */
1999
2017
  virtual MaybeLocal<WasmCompiledModule> GetWasmModuleFromId(
2000
2018
  Isolate* isolate, uint32_t transfer_id);
2019
+
2020
+ /**
2021
+ * Get a SharedArrayBuffer given a clone_id previously provided
2022
+ * by ValueSerializer::GetSharedArrayBufferId
2023
+ */
2024
+ virtual MaybeLocal<SharedArrayBuffer> GetSharedArrayBufferFromId(
2025
+ Isolate* isolate, uint32_t clone_id);
2001
2026
  };
2002
2027
 
2003
2028
  ValueDeserializer(Isolate* isolate, const uint8_t* data, size_t size);
@@ -2070,20 +2095,6 @@ class V8_EXPORT ValueDeserializer {
2070
2095
  PrivateData* private_;
2071
2096
  };
2072
2097
 
2073
- /**
2074
- * A map whose keys are referenced weakly. It is similar to JavaScript WeakMap
2075
- * but can be created without entering a v8::Context and hence shouldn't
2076
- * escape to JavaScript.
2077
- */
2078
- class V8_EXPORT NativeWeakMap : public Data {
2079
- public:
2080
- static Local<NativeWeakMap> New(Isolate* isolate);
2081
- void Set(Local<Value> key, Local<Value> value);
2082
- Local<Value> Get(Local<Value> key) const;
2083
- bool Has(Local<Value> key);
2084
- bool Delete(Local<Value> key);
2085
- };
2086
-
2087
2098
 
2088
2099
  // --- Value ---
2089
2100
 
@@ -2154,6 +2165,11 @@ class V8_EXPORT Value : public Data {
2154
2165
  */
2155
2166
  bool IsObject() const;
2156
2167
 
2168
+ /**
2169
+ * Returns true if this value is a bigint.
2170
+ */
2171
+ bool IsBigInt() const;
2172
+
2157
2173
  /**
2158
2174
  * Returns true if this value is boolean.
2159
2175
  */
@@ -2189,6 +2205,11 @@ class V8_EXPORT Value : public Data {
2189
2205
  */
2190
2206
  bool IsArgumentsObject() const;
2191
2207
 
2208
+ /**
2209
+ * Returns true if this value is a BigInt object.
2210
+ */
2211
+ bool IsBigIntObject() const;
2212
+
2192
2213
  /**
2193
2214
  * Returns true if this value is a Boolean object.
2194
2215
  */
@@ -2329,6 +2350,16 @@ class V8_EXPORT Value : public Data {
2329
2350
  */
2330
2351
  bool IsFloat64Array() const;
2331
2352
 
2353
+ /**
2354
+ * Returns true if this value is a BigInt64Array.
2355
+ */
2356
+ bool IsBigInt64Array() const;
2357
+
2358
+ /**
2359
+ * Returns true if this value is a BigUint64Array.
2360
+ */
2361
+ bool IsBigUint64Array() const;
2362
+
2332
2363
  /**
2333
2364
  * Returns true if this value is a DataView.
2334
2365
  */
@@ -2347,6 +2378,8 @@ class V8_EXPORT Value : public Data {
2347
2378
 
2348
2379
  bool IsWebAssemblyCompiledModule() const;
2349
2380
 
2381
+ V8_WARN_UNUSED_RESULT MaybeLocal<BigInt> ToBigInt(
2382
+ Local<Context> context) const;
2350
2383
  V8_WARN_UNUSED_RESULT MaybeLocal<Boolean> ToBoolean(
2351
2384
  Local<Context> context) const;
2352
2385
  V8_WARN_UNUSED_RESULT MaybeLocal<Number> ToNumber(
@@ -2369,34 +2402,24 @@ class V8_EXPORT Value : public Data {
2369
2402
  Local<Number> ToNumber(Isolate* isolate) const);
2370
2403
  V8_DEPRECATE_SOON("Use maybe version",
2371
2404
  Local<String> ToString(Isolate* isolate) const);
2372
- V8_DEPRECATED("Use maybe version",
2373
- Local<String> ToDetailString(Isolate* isolate) const);
2374
2405
  V8_DEPRECATE_SOON("Use maybe version",
2375
2406
  Local<Object> ToObject(Isolate* isolate) const);
2376
2407
  V8_DEPRECATE_SOON("Use maybe version",
2377
2408
  Local<Integer> ToInteger(Isolate* isolate) const);
2378
- V8_DEPRECATED("Use maybe version",
2379
- Local<Uint32> ToUint32(Isolate* isolate) const);
2380
2409
  V8_DEPRECATE_SOON("Use maybe version",
2381
2410
  Local<Int32> ToInt32(Isolate* isolate) const);
2382
2411
 
2383
2412
  inline V8_DEPRECATE_SOON("Use maybe version",
2384
2413
  Local<Boolean> ToBoolean() const);
2385
- inline V8_DEPRECATED("Use maybe version", Local<Number> ToNumber() const);
2386
2414
  inline V8_DEPRECATE_SOON("Use maybe version", Local<String> ToString() const);
2387
- inline V8_DEPRECATED("Use maybe version",
2388
- Local<String> ToDetailString() const);
2389
2415
  inline V8_DEPRECATE_SOON("Use maybe version", Local<Object> ToObject() const);
2390
2416
  inline V8_DEPRECATE_SOON("Use maybe version",
2391
2417
  Local<Integer> ToInteger() const);
2392
- inline V8_DEPRECATED("Use maybe version", Local<Uint32> ToUint32() const);
2393
- inline V8_DEPRECATED("Use maybe version", Local<Int32> ToInt32() const);
2394
2418
 
2395
2419
  /**
2396
2420
  * Attempts to convert a string to an array index.
2397
2421
  * Returns an empty handle if the conversion fails.
2398
2422
  */
2399
- V8_DEPRECATED("Use maybe version", Local<Uint32> ToArrayIndex() const);
2400
2423
  V8_WARN_UNUSED_RESULT MaybeLocal<Uint32> ToArrayIndex(
2401
2424
  Local<Context> context) const;
2402
2425
 
@@ -2727,13 +2750,6 @@ class V8_EXPORT String : public Name {
2727
2750
  Isolate* isolate, const char* data, v8::NewStringType type,
2728
2751
  int length = -1);
2729
2752
 
2730
- /** Allocates a new string from Latin-1 data.*/
2731
- static V8_DEPRECATED(
2732
- "Use maybe version",
2733
- Local<String> NewFromOneByte(Isolate* isolate, const uint8_t* data,
2734
- NewStringType type = kNormalString,
2735
- int length = -1));
2736
-
2737
2753
  /** Allocates a new string from Latin-1 data. Only returns an empty value
2738
2754
  * when length > kMaxLength. **/
2739
2755
  static V8_WARN_UNUSED_RESULT MaybeLocal<String> NewFromOneByte(
@@ -2767,9 +2783,6 @@ class V8_EXPORT String : public Name {
2767
2783
  * should the underlying buffer be deallocated or modified except through the
2768
2784
  * destructor of the external string resource.
2769
2785
  */
2770
- static V8_DEPRECATED("Use maybe version",
2771
- Local<String> NewExternal(
2772
- Isolate* isolate, ExternalStringResource* resource));
2773
2786
  static V8_WARN_UNUSED_RESULT MaybeLocal<String> NewExternalTwoByte(
2774
2787
  Isolate* isolate, ExternalStringResource* resource);
2775
2788
 
@@ -2824,8 +2837,8 @@ class V8_EXPORT String : public Name {
2824
2837
  */
2825
2838
  class V8_EXPORT Utf8Value {
2826
2839
  public:
2827
- V8_DEPRECATE_SOON("Use Isolate version",
2828
- explicit Utf8Value(Local<v8::Value> obj));
2840
+ V8_DEPRECATED("Use Isolate version",
2841
+ explicit Utf8Value(Local<v8::Value> obj));
2829
2842
  Utf8Value(Isolate* isolate, Local<v8::Value> obj);
2830
2843
  ~Utf8Value();
2831
2844
  char* operator*() { return str_; }
@@ -2849,8 +2862,7 @@ class V8_EXPORT String : public Name {
2849
2862
  */
2850
2863
  class V8_EXPORT Value {
2851
2864
  public:
2852
- V8_DEPRECATE_SOON("Use Isolate version",
2853
- explicit Value(Local<v8::Value> obj));
2865
+ V8_DEPRECATED("Use Isolate version", explicit Value(Local<v8::Value> obj));
2854
2866
  Value(Isolate* isolate, Local<v8::Value> obj);
2855
2867
  ~Value();
2856
2868
  uint16_t* operator*() { return str_; }
@@ -2954,8 +2966,12 @@ class V8_EXPORT Private : public Data {
2954
2966
  */
2955
2967
  static Local<Private> ForApi(Isolate* isolate, Local<String> name);
2956
2968
 
2969
+ V8_INLINE static Private* Cast(Data* data);
2970
+
2957
2971
  private:
2958
2972
  Private();
2973
+
2974
+ static void CheckCast(Data* that);
2959
2975
  };
2960
2976
 
2961
2977
 
@@ -3015,6 +3031,19 @@ class V8_EXPORT Uint32 : public Integer {
3015
3031
  static void CheckCast(v8::Value* obj);
3016
3032
  };
3017
3033
 
3034
+ /**
3035
+ * A JavaScript BigInt value (https://tc39.github.io/proposal-bigint)
3036
+ */
3037
+ class V8_EXPORT BigInt : public Primitive {
3038
+ public:
3039
+ static Local<BigInt> New(Isolate* isolate, int64_t value);
3040
+ V8_INLINE static BigInt* Cast(v8::Value* obj);
3041
+
3042
+ private:
3043
+ BigInt();
3044
+ static void CheckCast(v8::Value* obj);
3045
+ };
3046
+
3018
3047
  /**
3019
3048
  * PropertyAttribute.
3020
3049
  */
@@ -3080,6 +3109,15 @@ enum PropertyFilter {
3080
3109
  SKIP_SYMBOLS = 16
3081
3110
  };
3082
3111
 
3112
+ /**
3113
+ * Options for marking whether callbacks may trigger JS-observable side effects.
3114
+ * Side-effect-free callbacks are whitelisted during debug evaluation with
3115
+ * throwOnSideEffect. It applies when calling a Function, FunctionTemplate,
3116
+ * or an Accessor's getter callback. For Interceptors, please see
3117
+ * PropertyHandlerFlags's kHasNoSideEffect.
3118
+ */
3119
+ enum class SideEffectType { kHasSideEffect, kHasNoSideEffect };
3120
+
3083
3121
  /**
3084
3122
  * Keys/Properties filter enums:
3085
3123
  *
@@ -3091,10 +3129,16 @@ enum class KeyCollectionMode { kOwnOnly, kIncludePrototypes };
3091
3129
 
3092
3130
  /**
3093
3131
  * kIncludesIndices allows for integer indices to be collected, while
3094
- * kSkipIndices will exclude integer indicies from being collected.
3132
+ * kSkipIndices will exclude integer indices from being collected.
3095
3133
  */
3096
3134
  enum class IndexFilter { kIncludeIndices, kSkipIndices };
3097
3135
 
3136
+ /**
3137
+ * kConvertToString will convert integer indices to strings.
3138
+ * kKeepNumbers will return numbers for integer indices.
3139
+ */
3140
+ enum class KeyConversionMode { kConvertToString, kKeepNumbers };
3141
+
3098
3142
  /**
3099
3143
  * Integrity level for objects.
3100
3144
  */
@@ -3155,19 +3199,6 @@ class V8_EXPORT Object : public Value {
3155
3199
  V8_WARN_UNUSED_RESULT Maybe<bool> DefineProperty(
3156
3200
  Local<Context> context, Local<Name> key, PropertyDescriptor& descriptor);
3157
3201
 
3158
- // Sets an own property on this object bypassing interceptors and
3159
- // overriding accessors or read-only properties.
3160
- //
3161
- // Note that if the object has an interceptor the property will be set
3162
- // locally, but since the interceptor takes precedence the local property
3163
- // will only be returned if the interceptor doesn't return a value.
3164
- //
3165
- // Note also that this only works for named properties.
3166
- V8_DEPRECATED("Use CreateDataProperty / DefineOwnProperty",
3167
- Maybe<bool> ForceSet(Local<Context> context, Local<Value> key,
3168
- Local<Value> value,
3169
- PropertyAttribute attribs = None));
3170
-
3171
3202
  V8_DEPRECATE_SOON("Use maybe version", Local<Value> Get(Local<Value> key));
3172
3203
  V8_WARN_UNUSED_RESULT MaybeLocal<Value> Get(Local<Context> context,
3173
3204
  Local<Value> key);
@@ -3181,16 +3212,12 @@ class V8_EXPORT Object : public Value {
3181
3212
  * any combination of ReadOnly, DontEnum and DontDelete. Returns
3182
3213
  * None when the property doesn't exist.
3183
3214
  */
3184
- V8_DEPRECATED("Use maybe version",
3185
- PropertyAttribute GetPropertyAttributes(Local<Value> key));
3186
3215
  V8_WARN_UNUSED_RESULT Maybe<PropertyAttribute> GetPropertyAttributes(
3187
3216
  Local<Context> context, Local<Value> key);
3188
3217
 
3189
3218
  /**
3190
3219
  * Returns Object.getOwnPropertyDescriptor as per ES2016 section 19.1.2.6.
3191
3220
  */
3192
- V8_DEPRECATED("Use maybe version",
3193
- Local<Value> GetOwnPropertyDescriptor(Local<Name> key));
3194
3221
  V8_WARN_UNUSED_RESULT MaybeLocal<Value> GetOwnPropertyDescriptor(
3195
3222
  Local<Context> context, Local<Name> key);
3196
3223
 
@@ -3217,35 +3244,20 @@ class V8_EXPORT Object : public Value {
3217
3244
  V8_WARN_UNUSED_RESULT Maybe<bool> Delete(Local<Context> context,
3218
3245
  Local<Value> key);
3219
3246
 
3220
- V8_DEPRECATED("Use maybe version", bool Has(uint32_t index));
3221
- V8_WARN_UNUSED_RESULT Maybe<bool> Has(Local<Context> context,
3222
- uint32_t index);
3247
+ V8_WARN_UNUSED_RESULT Maybe<bool> Has(Local<Context> context, uint32_t index);
3223
3248
 
3224
- V8_DEPRECATED("Use maybe version", bool Delete(uint32_t index));
3225
3249
  V8_WARN_UNUSED_RESULT Maybe<bool> Delete(Local<Context> context,
3226
3250
  uint32_t index);
3227
3251
 
3228
- V8_DEPRECATED("Use maybe version",
3229
- bool SetAccessor(Local<String> name,
3230
- AccessorGetterCallback getter,
3231
- AccessorSetterCallback setter = 0,
3232
- Local<Value> data = Local<Value>(),
3233
- AccessControl settings = DEFAULT,
3234
- PropertyAttribute attribute = None));
3235
- V8_DEPRECATED("Use maybe version",
3236
- bool SetAccessor(Local<Name> name,
3237
- AccessorNameGetterCallback getter,
3238
- AccessorNameSetterCallback setter = 0,
3239
- Local<Value> data = Local<Value>(),
3240
- AccessControl settings = DEFAULT,
3241
- PropertyAttribute attribute = None));
3242
- V8_WARN_UNUSED_RESULT Maybe<bool> SetAccessor(Local<Context> context,
3243
- Local<Name> name,
3244
- AccessorNameGetterCallback getter,
3245
- AccessorNameSetterCallback setter = 0,
3246
- MaybeLocal<Value> data = MaybeLocal<Value>(),
3247
- AccessControl settings = DEFAULT,
3248
- PropertyAttribute attribute = None);
3252
+ /**
3253
+ * Note: SideEffectType affects the getter only, not the setter.
3254
+ */
3255
+ V8_WARN_UNUSED_RESULT Maybe<bool> SetAccessor(
3256
+ Local<Context> context, Local<Name> name,
3257
+ AccessorNameGetterCallback getter, AccessorNameSetterCallback setter = 0,
3258
+ MaybeLocal<Value> data = MaybeLocal<Value>(),
3259
+ AccessControl settings = DEFAULT, PropertyAttribute attribute = None,
3260
+ SideEffectType getter_side_effect_type = SideEffectType::kHasSideEffect);
3249
3261
 
3250
3262
  void SetAccessorProperty(Local<Name> name, Local<Function> getter,
3251
3263
  Local<Function> setter = Local<Function>(),
@@ -3260,7 +3272,22 @@ class V8_EXPORT Object : public Value {
3260
3272
  Local<Context> context, Local<Name> name,
3261
3273
  AccessorNameGetterCallback getter,
3262
3274
  AccessorNameSetterCallback setter = nullptr,
3263
- Local<Value> data = Local<Value>(), PropertyAttribute attributes = None);
3275
+ Local<Value> data = Local<Value>(), PropertyAttribute attributes = None,
3276
+ SideEffectType getter_side_effect_type = SideEffectType::kHasSideEffect);
3277
+
3278
+ /**
3279
+ * Attempts to create a property with the given name which behaves like a data
3280
+ * property, except that the provided getter is invoked (and provided with the
3281
+ * data value) to supply its value the first time it is read. After the
3282
+ * property is accessed once, it is replaced with an ordinary data property.
3283
+ *
3284
+ * Analogous to Template::SetLazyDataProperty.
3285
+ */
3286
+ V8_WARN_UNUSED_RESULT Maybe<bool> SetLazyDataProperty(
3287
+ Local<Context> context, Local<Name> name,
3288
+ AccessorNameGetterCallback getter, Local<Value> data = Local<Value>(),
3289
+ PropertyAttribute attributes = None,
3290
+ SideEffectType getter_side_effect_type = SideEffectType::kHasSideEffect);
3264
3291
 
3265
3292
  /**
3266
3293
  * Functionality for private properties.
@@ -3285,7 +3312,8 @@ class V8_EXPORT Object : public Value {
3285
3312
  Local<Context> context);
3286
3313
  V8_WARN_UNUSED_RESULT MaybeLocal<Array> GetPropertyNames(
3287
3314
  Local<Context> context, KeyCollectionMode mode,
3288
- PropertyFilter property_filter, IndexFilter index_filter);
3315
+ PropertyFilter property_filter, IndexFilter index_filter,
3316
+ KeyConversionMode key_conversion = KeyConversionMode::kKeepNumbers);
3289
3317
 
3290
3318
  /**
3291
3319
  * This function has the same functionality as GetPropertyNames but
@@ -3303,7 +3331,8 @@ class V8_EXPORT Object : public Value {
3303
3331
  * be enumerated by a for-in statement over this object.
3304
3332
  */
3305
3333
  V8_WARN_UNUSED_RESULT MaybeLocal<Array> GetOwnPropertyNames(
3306
- Local<Context> context, PropertyFilter filter);
3334
+ Local<Context> context, PropertyFilter filter,
3335
+ KeyConversionMode key_conversion = KeyConversionMode::kKeepNumbers);
3307
3336
 
3308
3337
  /**
3309
3338
  * Get the prototype object. This does not skip objects marked to
@@ -3317,7 +3346,6 @@ class V8_EXPORT Object : public Value {
3317
3346
  * be skipped by __proto__ and it does not consult the security
3318
3347
  * handler.
3319
3348
  */
3320
- V8_DEPRECATED("Use maybe version", bool SetPrototype(Local<Value> prototype));
3321
3349
  V8_WARN_UNUSED_RESULT Maybe<bool> SetPrototype(Local<Context> context,
3322
3350
  Local<Value> prototype);
3323
3351
 
@@ -3332,7 +3360,6 @@ class V8_EXPORT Object : public Value {
3332
3360
  * This is different from Value::ToString() that may call
3333
3361
  * user-defined toString function. This one does not.
3334
3362
  */
3335
- V8_DEPRECATED("Use maybe version", Local<String> ObjectProtoToString());
3336
3363
  V8_WARN_UNUSED_RESULT MaybeLocal<String> ObjectProtoToString(
3337
3364
  Local<Context> context);
3338
3365
 
@@ -3383,9 +3410,6 @@ class V8_EXPORT Object : public Value {
3383
3410
  void SetAlignedPointerInInternalFields(int argc, int indices[],
3384
3411
  void* values[]);
3385
3412
 
3386
- // Testers for local properties.
3387
- V8_DEPRECATED("Use maybe version", bool HasOwnProperty(Local<String> key));
3388
-
3389
3413
  /**
3390
3414
  * HasOwnProperty() is like JavaScript's Object.prototype.hasOwnProperty().
3391
3415
  *
@@ -3425,9 +3449,6 @@ class V8_EXPORT Object : public Value {
3425
3449
  * If result.IsEmpty() no real property was located in the prototype chain.
3426
3450
  * This means interceptors in the prototype chain are not called.
3427
3451
  */
3428
- V8_DEPRECATED(
3429
- "Use maybe version",
3430
- Local<Value> GetRealNamedPropertyInPrototypeChain(Local<String> key));
3431
3452
  V8_WARN_UNUSED_RESULT MaybeLocal<Value> GetRealNamedPropertyInPrototypeChain(
3432
3453
  Local<Context> context, Local<Name> key);
3433
3454
 
@@ -3436,10 +3457,6 @@ class V8_EXPORT Object : public Value {
3436
3457
  * which can be None or any combination of ReadOnly, DontEnum and DontDelete.
3437
3458
  * Interceptors in the prototype chain are not called.
3438
3459
  */
3439
- V8_DEPRECATED(
3440
- "Use maybe version",
3441
- Maybe<PropertyAttribute> GetRealNamedPropertyAttributesInPrototypeChain(
3442
- Local<String> key));
3443
3460
  V8_WARN_UNUSED_RESULT Maybe<PropertyAttribute>
3444
3461
  GetRealNamedPropertyAttributesInPrototypeChain(Local<Context> context,
3445
3462
  Local<Name> key);
@@ -3449,8 +3466,6 @@ class V8_EXPORT Object : public Value {
3449
3466
  * in the prototype chain.
3450
3467
  * This means interceptors in the prototype chain are not called.
3451
3468
  */
3452
- V8_DEPRECATED("Use maybe version",
3453
- Local<Value> GetRealNamedProperty(Local<String> key));
3454
3469
  V8_WARN_UNUSED_RESULT MaybeLocal<Value> GetRealNamedProperty(
3455
3470
  Local<Context> context, Local<Name> key);
3456
3471
 
@@ -3459,9 +3474,6 @@ class V8_EXPORT Object : public Value {
3459
3474
  * None or any combination of ReadOnly, DontEnum and DontDelete.
3460
3475
  * Interceptors in the prototype chain are not called.
3461
3476
  */
3462
- V8_DEPRECATED("Use maybe version",
3463
- Maybe<PropertyAttribute> GetRealNamedPropertyAttributes(
3464
- Local<String> key));
3465
3477
  V8_WARN_UNUSED_RESULT Maybe<PropertyAttribute> GetRealNamedPropertyAttributes(
3466
3478
  Local<Context> context, Local<Name> key);
3467
3479
 
@@ -3514,9 +3526,6 @@ class V8_EXPORT Object : public Value {
3514
3526
  * Call an Object as a function if a callback is set by the
3515
3527
  * ObjectTemplate::SetCallAsFunctionHandler method.
3516
3528
  */
3517
- V8_DEPRECATED("Use maybe version",
3518
- Local<Value> CallAsFunction(Local<Value> recv, int argc,
3519
- Local<Value> argv[]));
3520
3529
  V8_WARN_UNUSED_RESULT MaybeLocal<Value> CallAsFunction(Local<Context> context,
3521
3530
  Local<Value> recv,
3522
3531
  int argc,
@@ -3527,15 +3536,13 @@ class V8_EXPORT Object : public Value {
3527
3536
  * ObjectTemplate::SetCallAsFunctionHandler method.
3528
3537
  * Note: This method behaves like the Function::NewInstance method.
3529
3538
  */
3530
- V8_DEPRECATED("Use maybe version",
3531
- Local<Value> CallAsConstructor(int argc, Local<Value> argv[]));
3532
3539
  V8_WARN_UNUSED_RESULT MaybeLocal<Value> CallAsConstructor(
3533
3540
  Local<Context> context, int argc, Local<Value> argv[]);
3534
3541
 
3535
3542
  /**
3536
3543
  * Return the isolate to which the Object belongs to.
3537
3544
  */
3538
- V8_DEPRECATE_SOON("Keep track of isolate correctly", Isolate* GetIsolate());
3545
+ Isolate* GetIsolate();
3539
3546
 
3540
3547
  static Local<Object> New(Isolate* isolate);
3541
3548
 
@@ -3556,16 +3563,6 @@ class V8_EXPORT Array : public Object {
3556
3563
  public:
3557
3564
  uint32_t Length() const;
3558
3565
 
3559
- /**
3560
- * Clones an element at index |index|. Returns an empty
3561
- * handle if cloning fails (for any reason).
3562
- */
3563
- V8_DEPRECATED("Cloning is not supported.",
3564
- Local<Object> CloneElementAt(uint32_t index));
3565
- V8_DEPRECATED("Cloning is not supported.",
3566
- MaybeLocal<Object> CloneElementAt(Local<Context> context,
3567
- uint32_t index));
3568
-
3569
3566
  /**
3570
3567
  * Creates a JavaScript array with the given length. If the length
3571
3568
  * is negative the returned array will have length 0.
@@ -3709,8 +3706,6 @@ class FunctionCallbackInfo {
3709
3706
  V8_INLINE int Length() const;
3710
3707
  /** Accessor for the available arguments. */
3711
3708
  V8_INLINE Local<Value> operator[](int i) const;
3712
- V8_INLINE V8_DEPRECATED("Use Data() to explicitly pass Callee instead",
3713
- Local<Function> Callee() const);
3714
3709
  /** Returns the receiver. This corresponds to the "this" value. */
3715
3710
  V8_INLINE Local<Object> This() const;
3716
3711
  /**
@@ -3735,7 +3730,7 @@ class FunctionCallbackInfo {
3735
3730
  /** The ReturnValue for the call. */
3736
3731
  V8_INLINE ReturnValue<T> GetReturnValue() const;
3737
3732
  // This shouldn't be public, but the arm compiler needs it.
3738
- static const int kArgsLength = 8;
3733
+ static const int kArgsLength = 6;
3739
3734
 
3740
3735
  protected:
3741
3736
  friend class internal::FunctionCallbackArguments;
@@ -3746,9 +3741,7 @@ class FunctionCallbackInfo {
3746
3741
  static const int kReturnValueDefaultValueIndex = 2;
3747
3742
  static const int kReturnValueIndex = 3;
3748
3743
  static const int kDataIndex = 4;
3749
- static const int kCalleeIndex = 5;
3750
- static const int kContextSaveIndex = 6;
3751
- static const int kNewTargetIndex = 7;
3744
+ static const int kNewTargetIndex = 5;
3752
3745
 
3753
3746
  V8_INLINE FunctionCallbackInfo(internal::Object** implicit_args,
3754
3747
  internal::Object** values, int length);
@@ -3886,18 +3879,16 @@ class V8_EXPORT Function : public Object {
3886
3879
  static MaybeLocal<Function> New(
3887
3880
  Local<Context> context, FunctionCallback callback,
3888
3881
  Local<Value> data = Local<Value>(), int length = 0,
3889
- ConstructorBehavior behavior = ConstructorBehavior::kAllow);
3882
+ ConstructorBehavior behavior = ConstructorBehavior::kAllow,
3883
+ SideEffectType side_effect_type = SideEffectType::kHasSideEffect);
3890
3884
  static V8_DEPRECATE_SOON(
3891
3885
  "Use maybe version",
3892
3886
  Local<Function> New(Isolate* isolate, FunctionCallback callback,
3893
3887
  Local<Value> data = Local<Value>(), int length = 0));
3894
3888
 
3895
- V8_DEPRECATED("Use maybe version",
3896
- Local<Object> NewInstance(int argc, Local<Value> argv[]) const);
3897
3889
  V8_WARN_UNUSED_RESULT MaybeLocal<Object> NewInstance(
3898
3890
  Local<Context> context, int argc, Local<Value> argv[]) const;
3899
3891
 
3900
- V8_DEPRECATED("Use maybe version", Local<Object> NewInstance() const);
3901
3892
  V8_WARN_UNUSED_RESULT MaybeLocal<Object> NewInstance(
3902
3893
  Local<Context> context) const {
3903
3894
  return NewInstance(context, 0, nullptr);
@@ -3944,11 +3935,6 @@ class V8_EXPORT Function : public Object {
3944
3935
  */
3945
3936
  int GetScriptColumnNumber() const;
3946
3937
 
3947
- /**
3948
- * Tells whether this function is builtin.
3949
- */
3950
- V8_DEPRECATED("this should no longer be used.", bool IsBuiltin() const);
3951
-
3952
3938
  /**
3953
3939
  * Returns scriptId.
3954
3940
  */
@@ -3990,8 +3976,8 @@ class V8_EXPORT Promise : public Object {
3990
3976
  /**
3991
3977
  * Create a new resolver, along with an associated promise in pending state.
3992
3978
  */
3993
- static V8_DEPRECATE_SOON("Use maybe version",
3994
- Local<Resolver> New(Isolate* isolate));
3979
+ static V8_DEPRECATED("Use maybe version",
3980
+ Local<Resolver> New(Isolate* isolate));
3995
3981
  static V8_WARN_UNUSED_RESULT MaybeLocal<Resolver> New(
3996
3982
  Local<Context> context);
3997
3983
 
@@ -4004,11 +3990,11 @@ class V8_EXPORT Promise : public Object {
4004
3990
  * Resolve/reject the associated promise with a given value.
4005
3991
  * Ignored if the promise is no longer pending.
4006
3992
  */
4007
- V8_DEPRECATE_SOON("Use maybe version", void Resolve(Local<Value> value));
3993
+ V8_DEPRECATED("Use maybe version", void Resolve(Local<Value> value));
4008
3994
  V8_WARN_UNUSED_RESULT Maybe<bool> Resolve(Local<Context> context,
4009
3995
  Local<Value> value);
4010
3996
 
4011
- V8_DEPRECATE_SOON("Use maybe version", void Reject(Local<Value> value));
3997
+ V8_DEPRECATED("Use maybe version", void Reject(Local<Value> value));
4012
3998
  V8_WARN_UNUSED_RESULT Maybe<bool> Reject(Local<Context> context,
4013
3999
  Local<Value> value);
4014
4000
 
@@ -4025,13 +4011,9 @@ class V8_EXPORT Promise : public Object {
4025
4011
  * an argument. If the promise is already resolved/rejected, the handler is
4026
4012
  * invoked at the end of turn.
4027
4013
  */
4028
- V8_DEPRECATED("Use maybe version",
4029
- Local<Promise> Catch(Local<Function> handler));
4030
4014
  V8_WARN_UNUSED_RESULT MaybeLocal<Promise> Catch(Local<Context> context,
4031
4015
  Local<Function> handler);
4032
4016
 
4033
- V8_DEPRECATED("Use maybe version",
4034
- Local<Promise> Then(Local<Function> handler));
4035
4017
  V8_WARN_UNUSED_RESULT MaybeLocal<Promise> Then(Local<Context> context,
4036
4018
  Local<Function> handler);
4037
4019
 
@@ -4140,7 +4122,7 @@ class V8_EXPORT PropertyDescriptor {
4140
4122
  */
4141
4123
  class V8_EXPORT Proxy : public Object {
4142
4124
  public:
4143
- Local<Object> GetTarget();
4125
+ Local<Value> GetTarget();
4144
4126
  Local<Value> GetHandler();
4145
4127
  bool IsRevoked();
4146
4128
  void Revoke();
@@ -4164,11 +4146,15 @@ class V8_EXPORT Proxy : public Object {
4164
4146
  class V8_EXPORT WasmCompiledModule : public Object {
4165
4147
  public:
4166
4148
  typedef std::pair<std::unique_ptr<const uint8_t[]>, size_t> SerializedModule;
4167
- // A buffer that is owned by the caller.
4149
+ /**
4150
+ * A buffer that is owned by the caller.
4151
+ */
4168
4152
  typedef std::pair<const uint8_t*, size_t> CallerOwnedBuffer;
4169
4153
 
4170
- // An opaque, native heap object for transferring wasm modules. It
4171
- // supports move semantics, and does not support copy semantics.
4154
+ /**
4155
+ * An opaque, native heap object for transferring wasm modules. It
4156
+ * supports move semantics, and does not support copy semantics.
4157
+ */
4172
4158
  class TransferrableModule final {
4173
4159
  public:
4174
4160
  TransferrableModule(TransferrableModule&& src) = default;
@@ -4187,35 +4173,41 @@ class V8_EXPORT WasmCompiledModule : public Object {
4187
4173
  OwnedBuffer wire_bytes = {nullptr, 0};
4188
4174
  };
4189
4175
 
4190
- // Get an in-memory, non-persistable, and context-independent (meaning,
4191
- // suitable for transfer to another Isolate and Context) representation
4192
- // of this wasm compiled module.
4176
+ /**
4177
+ * Get an in-memory, non-persistable, and context-independent (meaning,
4178
+ * suitable for transfer to another Isolate and Context) representation
4179
+ * of this wasm compiled module.
4180
+ */
4193
4181
  TransferrableModule GetTransferrableModule();
4194
4182
 
4195
- // Efficiently re-create a WasmCompiledModule, without recompiling, from
4196
- // a TransferrableModule.
4183
+ /**
4184
+ * Efficiently re-create a WasmCompiledModule, without recompiling, from
4185
+ * a TransferrableModule.
4186
+ */
4197
4187
  static MaybeLocal<WasmCompiledModule> FromTransferrableModule(
4198
4188
  Isolate* isolate, const TransferrableModule&);
4199
4189
 
4200
- // Get the wasm-encoded bytes that were used to compile this module.
4190
+ /**
4191
+ * Get the wasm-encoded bytes that were used to compile this module.
4192
+ */
4201
4193
  Local<String> GetWasmWireBytes();
4202
4194
 
4203
- // Serialize the compiled module. The serialized data does not include the
4204
- // uncompiled bytes.
4195
+ /**
4196
+ * Serialize the compiled module. The serialized data does not include the
4197
+ * uncompiled bytes.
4198
+ */
4205
4199
  SerializedModule Serialize();
4206
4200
 
4207
- // If possible, deserialize the module, otherwise compile it from the provided
4208
- // uncompiled bytes.
4201
+ /**
4202
+ * If possible, deserialize the module, otherwise compile it from the provided
4203
+ * uncompiled bytes.
4204
+ */
4209
4205
  static MaybeLocal<WasmCompiledModule> DeserializeOrCompile(
4210
4206
  Isolate* isolate, const CallerOwnedBuffer& serialized_module,
4211
4207
  const CallerOwnedBuffer& wire_bytes);
4212
4208
  V8_INLINE static WasmCompiledModule* Cast(Value* obj);
4213
4209
 
4214
4210
  private:
4215
- // TODO(ahaas): please remove the friend once streamed compilation is
4216
- // implemented
4217
- friend class WasmModuleObjectBuilder;
4218
-
4219
4211
  static MaybeLocal<WasmCompiledModule> Deserialize(
4220
4212
  Isolate* isolate, const CallerOwnedBuffer& serialized_module,
4221
4213
  const CallerOwnedBuffer& wire_bytes);
@@ -4235,11 +4227,18 @@ class V8_EXPORT WasmCompiledModule : public Object {
4235
4227
  // to simply WasmModuleObjectBuilder
4236
4228
  class V8_EXPORT WasmModuleObjectBuilderStreaming final {
4237
4229
  public:
4238
- WasmModuleObjectBuilderStreaming(Isolate* isolate);
4239
- // The buffer passed into OnBytesReceived is owned by the caller.
4230
+ explicit WasmModuleObjectBuilderStreaming(Isolate* isolate);
4231
+ /**
4232
+ * The buffer passed into OnBytesReceived is owned by the caller.
4233
+ */
4240
4234
  void OnBytesReceived(const uint8_t*, size_t size);
4241
4235
  void Finish();
4242
- void Abort(Local<Value> exception);
4236
+ /**
4237
+ * Abort streaming compilation. If {exception} has a value, then the promise
4238
+ * associated with streaming compilation is rejected with that value. If
4239
+ * {exception} does not have value, the promise does not get rejected.
4240
+ */
4241
+ void Abort(MaybeLocal<Value> exception);
4243
4242
  Local<Promise> GetPromise();
4244
4243
 
4245
4244
  ~WasmModuleObjectBuilderStreaming();
@@ -4258,11 +4257,13 @@ class V8_EXPORT WasmModuleObjectBuilderStreaming final {
4258
4257
  Isolate* isolate_ = nullptr;
4259
4258
 
4260
4259
  #if V8_CC_MSVC
4261
- // We don't need the static Copy API, so the default
4262
- // NonCopyablePersistentTraits would be sufficient, however,
4263
- // MSVC eagerly instantiates the Copy.
4264
- // We ensure we don't use Copy, however, by compiling with the
4265
- // defaults everywhere else.
4260
+ /**
4261
+ * We don't need the static Copy API, so the default
4262
+ * NonCopyablePersistentTraits would be sufficient, however,
4263
+ * MSVC eagerly instantiates the Copy.
4264
+ * We ensure we don't use Copy, however, by compiling with the
4265
+ * defaults everywhere else.
4266
+ */
4266
4267
  Persistent<Promise, CopyablePersistentTraits<Promise>> promise_;
4267
4268
  #else
4268
4269
  Persistent<Promise> promise_;
@@ -4272,30 +4273,6 @@ class V8_EXPORT WasmModuleObjectBuilderStreaming final {
4272
4273
  std::shared_ptr<internal::wasm::StreamingDecoder> streaming_decoder_;
4273
4274
  };
4274
4275
 
4275
- class V8_EXPORT WasmModuleObjectBuilder final {
4276
- public:
4277
- WasmModuleObjectBuilder(Isolate* isolate) : isolate_(isolate) {}
4278
- // The buffer passed into OnBytesReceived is owned by the caller.
4279
- void OnBytesReceived(const uint8_t*, size_t size);
4280
- MaybeLocal<WasmCompiledModule> Finish();
4281
-
4282
- private:
4283
- Isolate* isolate_ = nullptr;
4284
- // TODO(ahaas): We probably need none of this below here once streamed
4285
- // compilation is implemented.
4286
- typedef std::pair<std::unique_ptr<const uint8_t[]>, size_t> Buffer;
4287
-
4288
- // Disable copy semantics *in this implementation*. We can choose to
4289
- // relax this, albeit it's not clear why.
4290
- WasmModuleObjectBuilder(const WasmModuleObjectBuilder&) = delete;
4291
- WasmModuleObjectBuilder(WasmModuleObjectBuilder&&) = default;
4292
- WasmModuleObjectBuilder& operator=(const WasmModuleObjectBuilder&) = delete;
4293
- WasmModuleObjectBuilder& operator=(WasmModuleObjectBuilder&&) = default;
4294
-
4295
- std::vector<Buffer> received_buffers_;
4296
- size_t total_size_ = 0;
4297
- };
4298
-
4299
4276
  #ifndef V8_ARRAY_BUFFER_INTERNAL_FIELD_COUNT
4300
4277
  // The number of required internal fields can be defined by embedder.
4301
4278
  #define V8_ARRAY_BUFFER_INTERNAL_FIELD_COUNT 2
@@ -4341,41 +4318,18 @@ class V8_EXPORT ArrayBuffer : public Object {
4341
4318
  */
4342
4319
  virtual void* AllocateUninitialized(size_t length) = 0;
4343
4320
 
4344
- /**
4345
- * Reserved |length| bytes, but do not commit the memory. Must call
4346
- * |SetProtection| to make memory accessible.
4347
- */
4348
- // TODO(eholk): make this pure virtual once blink implements this.
4349
- virtual void* Reserve(size_t length);
4350
-
4351
4321
  /**
4352
4322
  * Free the memory block of size |length|, pointed to by |data|.
4353
4323
  * That memory is guaranteed to be previously allocated by |Allocate|.
4354
4324
  */
4355
4325
  virtual void Free(void* data, size_t length) = 0;
4356
4326
 
4357
- enum class AllocationMode { kNormal, kReservation };
4358
-
4359
4327
  /**
4360
- * Free the memory block of size |length|, pointed to by |data|.
4361
- * That memory is guaranteed to be previously allocated by |Allocate| or
4362
- * |Reserve|, depending on |mode|.
4328
+ * ArrayBuffer allocation mode. kNormal is a malloc/free style allocation,
4329
+ * while kReservation is for larger allocations with the ability to set
4330
+ * access permissions.
4363
4331
  */
4364
- // TODO(eholk): make this pure virtual once blink implements this.
4365
- virtual void Free(void* data, size_t length, AllocationMode mode);
4366
-
4367
- enum class Protection { kNoAccess, kReadWrite };
4368
-
4369
- /**
4370
- * Change the protection on a region of memory.
4371
- *
4372
- * On platforms that make a distinction between reserving and committing
4373
- * memory, changing the protection to kReadWrite must also ensure the memory
4374
- * is committed.
4375
- */
4376
- // TODO(eholk): make this pure virtual once blink implements this.
4377
- virtual void SetProtection(void* data, size_t length,
4378
- Protection protection);
4332
+ enum class AllocationMode { kNormal, kReservation };
4379
4333
 
4380
4334
  /**
4381
4335
  * malloc/free based convenience allocator.
@@ -4735,6 +4689,37 @@ class V8_EXPORT Float64Array : public TypedArray {
4735
4689
  static void CheckCast(Value* obj);
4736
4690
  };
4737
4691
 
4692
+ /**
4693
+ * An instance of BigInt64Array constructor.
4694
+ */
4695
+ class V8_EXPORT BigInt64Array : public TypedArray {
4696
+ public:
4697
+ static Local<BigInt64Array> New(Local<ArrayBuffer> array_buffer,
4698
+ size_t byte_offset, size_t length);
4699
+ static Local<BigInt64Array> New(Local<SharedArrayBuffer> shared_array_buffer,
4700
+ size_t byte_offset, size_t length);
4701
+ V8_INLINE static BigInt64Array* Cast(Value* obj);
4702
+
4703
+ private:
4704
+ BigInt64Array();
4705
+ static void CheckCast(Value* obj);
4706
+ };
4707
+
4708
+ /**
4709
+ * An instance of BigUint64Array constructor.
4710
+ */
4711
+ class V8_EXPORT BigUint64Array : public TypedArray {
4712
+ public:
4713
+ static Local<BigUint64Array> New(Local<ArrayBuffer> array_buffer,
4714
+ size_t byte_offset, size_t length);
4715
+ static Local<BigUint64Array> New(Local<SharedArrayBuffer> shared_array_buffer,
4716
+ size_t byte_offset, size_t length);
4717
+ V8_INLINE static BigUint64Array* Cast(Value* obj);
4718
+
4719
+ private:
4720
+ BigUint64Array();
4721
+ static void CheckCast(Value* obj);
4722
+ };
4738
4723
 
4739
4724
  /**
4740
4725
  * An instance of DataView constructor (ES6 draft 15.13.7).
@@ -4918,6 +4903,20 @@ class V8_EXPORT NumberObject : public Object {
4918
4903
  static void CheckCast(Value* obj);
4919
4904
  };
4920
4905
 
4906
+ /**
4907
+ * A BigInt object (https://tc39.github.io/proposal-bigint)
4908
+ */
4909
+ class V8_EXPORT BigIntObject : public Object {
4910
+ public:
4911
+ static Local<Value> New(Isolate* isolate, int64_t value);
4912
+
4913
+ Local<BigInt> ValueOf() const;
4914
+
4915
+ V8_INLINE static BigIntObject* Cast(Value* obj);
4916
+
4917
+ private:
4918
+ static void CheckCast(Value* obj);
4919
+ };
4921
4920
 
4922
4921
  /**
4923
4922
  * A Boolean object (ECMA-262, 4.3.15).
@@ -4925,7 +4924,6 @@ class V8_EXPORT NumberObject : public Object {
4925
4924
  class V8_EXPORT BooleanObject : public Object {
4926
4925
  public:
4927
4926
  static Local<Value> New(Isolate* isolate, bool value);
4928
- V8_DEPRECATED("Pass an isolate", static Local<Value> New(bool value));
4929
4927
 
4930
4928
  bool ValueOf() const;
4931
4929
 
@@ -4997,9 +4995,8 @@ class V8_EXPORT RegExp : public Object {
4997
4995
  * static_cast<RegExp::Flags>(kGlobal | kMultiline))
4998
4996
  * is equivalent to evaluating "/foo/gm".
4999
4997
  */
5000
- static V8_DEPRECATE_SOON("Use maybe version",
5001
- Local<RegExp> New(Local<String> pattern,
5002
- Flags flags));
4998
+ static V8_DEPRECATED("Use maybe version",
4999
+ Local<RegExp> New(Local<String> pattern, Flags flags));
5003
5000
  static V8_WARN_UNUSED_RESULT MaybeLocal<RegExp> New(Local<Context> context,
5004
5001
  Local<String> pattern,
5005
5002
  Flags flags);
@@ -5262,7 +5259,7 @@ typedef void (*GenericNamedPropertySetterCallback)(
5262
5259
  * defineProperty().
5263
5260
  *
5264
5261
  * Use `info.GetReturnValue().Set(value)` to set the property attributes. The
5265
- * value is an interger encoding a `v8::PropertyAttribute`.
5262
+ * value is an integer encoding a `v8::PropertyAttribute`.
5266
5263
  *
5267
5264
  * \param property The name of the property for which the request was
5268
5265
  * intercepted.
@@ -5467,7 +5464,8 @@ typedef bool (*AccessCheckCallback)(Local<Context> accessing_context,
5467
5464
  * v8::Local<v8::ObjectTemplate> instance_t = t->InstanceTemplate();
5468
5465
  * instance_t->SetAccessor(String::NewFromUtf8(isolate, "instance_accessor"),
5469
5466
  * InstanceAccessorCallback);
5470
- * instance_t->SetNamedPropertyHandler(PropertyHandlerCallback);
5467
+ * instance_t->SetHandler(
5468
+ * NamedPropertyHandlerConfiguration(PropertyHandlerCallback));
5471
5469
  * instance_t->Set(String::NewFromUtf8(isolate, "instance_property"),
5472
5470
  * Number::New(isolate, 3));
5473
5471
  *
@@ -5536,7 +5534,8 @@ class V8_EXPORT FunctionTemplate : public Template {
5536
5534
  Isolate* isolate, FunctionCallback callback = 0,
5537
5535
  Local<Value> data = Local<Value>(),
5538
5536
  Local<Signature> signature = Local<Signature>(), int length = 0,
5539
- ConstructorBehavior behavior = ConstructorBehavior::kAllow);
5537
+ ConstructorBehavior behavior = ConstructorBehavior::kAllow,
5538
+ SideEffectType side_effect_type = SideEffectType::kHasSideEffect);
5540
5539
 
5541
5540
  /** Get a template included in the snapshot by index. */
5542
5541
  static MaybeLocal<FunctionTemplate> FromSnapshot(Isolate* isolate,
@@ -5548,7 +5547,8 @@ class V8_EXPORT FunctionTemplate : public Template {
5548
5547
  static Local<FunctionTemplate> NewWithCache(
5549
5548
  Isolate* isolate, FunctionCallback callback,
5550
5549
  Local<Private> cache_property, Local<Value> data = Local<Value>(),
5551
- Local<Signature> signature = Local<Signature>(), int length = 0);
5550
+ Local<Signature> signature = Local<Signature>(), int length = 0,
5551
+ SideEffectType side_effect_type = SideEffectType::kHasSideEffect);
5552
5552
 
5553
5553
  /** Returns the unique function instance in the current execution context.*/
5554
5554
  V8_DEPRECATE_SOON("Use maybe version", Local<Function> GetFunction());
@@ -5569,8 +5569,9 @@ class V8_EXPORT FunctionTemplate : public Template {
5569
5569
  * callback is called whenever the function created from this
5570
5570
  * FunctionTemplate is called.
5571
5571
  */
5572
- void SetCallHandler(FunctionCallback callback,
5573
- Local<Value> data = Local<Value>());
5572
+ void SetCallHandler(
5573
+ FunctionCallback callback, Local<Value> data = Local<Value>(),
5574
+ SideEffectType side_effect_type = SideEffectType::kHasSideEffect);
5574
5575
 
5575
5576
  /** Set the predefined length property for the FunctionTemplate. */
5576
5577
  void SetLength(int length);
@@ -5580,7 +5581,7 @@ class V8_EXPORT FunctionTemplate : public Template {
5580
5581
 
5581
5582
  /**
5582
5583
  * Causes the function template to inherit from a parent function template.
5583
- * This means the the function's prototype.__proto__ is set to the parent
5584
+ * This means the function's prototype.__proto__ is set to the parent
5584
5585
  * function's prototype.
5585
5586
  **/
5586
5587
  void Inherit(Local<FunctionTemplate> parent);
@@ -5645,8 +5646,12 @@ class V8_EXPORT FunctionTemplate : public Template {
5645
5646
  */
5646
5647
  bool HasInstance(Local<Value> object);
5647
5648
 
5649
+ V8_INLINE static FunctionTemplate* Cast(Data* data);
5650
+
5648
5651
  private:
5649
5652
  FunctionTemplate();
5653
+
5654
+ static void CheckCast(Data* that);
5650
5655
  friend class Context;
5651
5656
  friend class ObjectTemplate;
5652
5657
  };
@@ -5677,6 +5682,11 @@ enum class PropertyHandlerFlags {
5677
5682
  * named interceptors.
5678
5683
  */
5679
5684
  kOnlyInterceptStrings = 1 << 2,
5685
+
5686
+ /**
5687
+ * The getter, query, enumerator callbacks do not produce side effects.
5688
+ */
5689
+ kHasNoSideEffect = 1 << 3,
5680
5690
  };
5681
5691
 
5682
5692
  struct NamedPropertyHandlerConfiguration {
@@ -5793,7 +5803,6 @@ class V8_EXPORT ObjectTemplate : public Template {
5793
5803
  static Local<ObjectTemplate> New(
5794
5804
  Isolate* isolate,
5795
5805
  Local<FunctionTemplate> constructor = Local<FunctionTemplate>());
5796
- static V8_DEPRECATED("Use isolate version", Local<ObjectTemplate> New());
5797
5806
 
5798
5807
  /** Get a template included in the snapshot by index. */
5799
5808
  static MaybeLocal<ObjectTemplate> FromSnapshot(Isolate* isolate,
@@ -5865,13 +5874,16 @@ class V8_EXPORT ObjectTemplate : public Template {
5865
5874
  * \param data A piece of data that will be passed to the callbacks
5866
5875
  * whenever they are invoked.
5867
5876
  */
5868
- // TODO(dcarney): deprecate
5869
- void SetNamedPropertyHandler(NamedPropertyGetterCallback getter,
5870
- NamedPropertySetterCallback setter = 0,
5871
- NamedPropertyQueryCallback query = 0,
5872
- NamedPropertyDeleterCallback deleter = 0,
5873
- NamedPropertyEnumeratorCallback enumerator = 0,
5874
- Local<Value> data = Local<Value>());
5877
+ V8_DEPRECATED(
5878
+ "Use SetHandler(const NamedPropertyHandlerConfiguration) "
5879
+ "with the kOnlyInterceptStrings flag set.",
5880
+ void SetNamedPropertyHandler(
5881
+ NamedPropertyGetterCallback getter,
5882
+ NamedPropertySetterCallback setter = 0,
5883
+ NamedPropertyQueryCallback query = 0,
5884
+ NamedPropertyDeleterCallback deleter = 0,
5885
+ NamedPropertyEnumeratorCallback enumerator = 0,
5886
+ Local<Value> data = Local<Value>()));
5875
5887
 
5876
5888
  /**
5877
5889
  * Sets a named property handler on the object template.
@@ -5986,15 +5998,18 @@ class V8_EXPORT ObjectTemplate : public Template {
5986
5998
  bool IsImmutableProto();
5987
5999
 
5988
6000
  /**
5989
- * Makes the ObjectTempate for an immutable prototype exotic object, with an
6001
+ * Makes the ObjectTemplate for an immutable prototype exotic object, with an
5990
6002
  * immutable __proto__.
5991
6003
  */
5992
6004
  void SetImmutableProto();
5993
6005
 
6006
+ V8_INLINE static ObjectTemplate* Cast(Data* data);
6007
+
5994
6008
  private:
5995
6009
  ObjectTemplate();
5996
6010
  static Local<ObjectTemplate> New(internal::Isolate* isolate,
5997
6011
  Local<FunctionTemplate> constructor);
6012
+ static void CheckCast(Data* that);
5998
6013
  friend class FunctionTemplate;
5999
6014
  };
6000
6015
 
@@ -6012,8 +6027,12 @@ class V8_EXPORT Signature : public Data {
6012
6027
  Isolate* isolate,
6013
6028
  Local<FunctionTemplate> receiver = Local<FunctionTemplate>());
6014
6029
 
6030
+ V8_INLINE static Signature* Cast(Data* data);
6031
+
6015
6032
  private:
6016
6033
  Signature();
6034
+
6035
+ static void CheckCast(Data* that);
6017
6036
  };
6018
6037
 
6019
6038
 
@@ -6027,8 +6046,12 @@ class V8_EXPORT AccessorSignature : public Data {
6027
6046
  Isolate* isolate,
6028
6047
  Local<FunctionTemplate> receiver = Local<FunctionTemplate>());
6029
6048
 
6049
+ V8_INLINE static AccessorSignature* Cast(Data* data);
6050
+
6030
6051
  private:
6031
6052
  AccessorSignature();
6053
+
6054
+ static void CheckCast(Data* that);
6032
6055
  };
6033
6056
 
6034
6057
 
@@ -6131,13 +6154,13 @@ class V8_EXPORT ResourceConstraints {
6131
6154
 
6132
6155
  // Returns the max semi-space size in MB.
6133
6156
  V8_DEPRECATE_SOON("Use max_semi_space_size_in_kb()",
6134
- int max_semi_space_size()) {
6135
- return static_cast<int>(max_semi_space_size_in_kb_ / 1024);
6157
+ size_t max_semi_space_size()) {
6158
+ return max_semi_space_size_in_kb_ / 1024;
6136
6159
  }
6137
6160
 
6138
6161
  // Sets the max semi-space size in MB.
6139
6162
  V8_DEPRECATE_SOON("Use set_max_semi_space_size_in_kb(size_t limit_in_kb)",
6140
- void set_max_semi_space_size(int limit_in_mb)) {
6163
+ void set_max_semi_space_size(size_t limit_in_mb)) {
6141
6164
  max_semi_space_size_in_kb_ = limit_in_mb * 1024;
6142
6165
  }
6143
6166
 
@@ -6151,16 +6174,16 @@ class V8_EXPORT ResourceConstraints {
6151
6174
  max_semi_space_size_in_kb_ = limit_in_kb;
6152
6175
  }
6153
6176
 
6154
- int max_old_space_size() const { return max_old_space_size_; }
6155
- void set_max_old_space_size(int limit_in_mb) {
6177
+ size_t max_old_space_size() const { return max_old_space_size_; }
6178
+ void set_max_old_space_size(size_t limit_in_mb) {
6156
6179
  max_old_space_size_ = limit_in_mb;
6157
6180
  }
6158
6181
  V8_DEPRECATE_SOON("max_executable_size_ is subsumed by max_old_space_size_",
6159
- int max_executable_size() const) {
6182
+ size_t max_executable_size() const) {
6160
6183
  return max_executable_size_;
6161
6184
  }
6162
6185
  V8_DEPRECATE_SOON("max_executable_size_ is subsumed by max_old_space_size_",
6163
- void set_max_executable_size(int limit_in_mb)) {
6186
+ void set_max_executable_size(size_t limit_in_mb)) {
6164
6187
  max_executable_size_ = limit_in_mb;
6165
6188
  }
6166
6189
  uint32_t* stack_limit() const { return stack_limit_; }
@@ -6171,17 +6194,15 @@ class V8_EXPORT ResourceConstraints {
6171
6194
  code_range_size_ = limit_in_mb;
6172
6195
  }
6173
6196
  size_t max_zone_pool_size() const { return max_zone_pool_size_; }
6174
- void set_max_zone_pool_size(const size_t bytes) {
6175
- max_zone_pool_size_ = bytes;
6176
- }
6197
+ void set_max_zone_pool_size(size_t bytes) { max_zone_pool_size_ = bytes; }
6177
6198
 
6178
6199
  private:
6179
6200
  // max_semi_space_size_ is in KB
6180
6201
  size_t max_semi_space_size_in_kb_;
6181
6202
 
6182
6203
  // The remaining limits are in MB
6183
- int max_old_space_size_;
6184
- int max_executable_size_;
6204
+ size_t max_old_space_size_;
6205
+ size_t max_executable_size_;
6185
6206
  uint32_t* stack_limit_;
6186
6207
  size_t code_range_size_;
6187
6208
  size_t max_zone_pool_size_;
@@ -6222,8 +6243,6 @@ class V8_EXPORT Exception {
6222
6243
  * or capture the current stack trace if not available.
6223
6244
  */
6224
6245
  static Local<Message> CreateMessage(Isolate* isolate, Local<Value> exception);
6225
- V8_DEPRECATED("Use version with an Isolate*",
6226
- static Local<Message> CreateMessage(Local<Value> exception));
6227
6246
 
6228
6247
  /**
6229
6248
  * Returns the original stack trace that was captured at the creation time
@@ -6244,24 +6263,6 @@ typedef void* (*CreateHistogramCallback)(const char* name,
6244
6263
 
6245
6264
  typedef void (*AddHistogramSampleCallback)(void* histogram, int sample);
6246
6265
 
6247
- // --- Memory Allocation Callback ---
6248
- enum ObjectSpace {
6249
- kObjectSpaceNewSpace = 1 << 0,
6250
- kObjectSpaceOldSpace = 1 << 1,
6251
- kObjectSpaceCodeSpace = 1 << 2,
6252
- kObjectSpaceMapSpace = 1 << 3,
6253
- kObjectSpaceLoSpace = 1 << 4,
6254
- kObjectSpaceAll = kObjectSpaceNewSpace | kObjectSpaceOldSpace |
6255
- kObjectSpaceCodeSpace | kObjectSpaceMapSpace |
6256
- kObjectSpaceLoSpace
6257
- };
6258
-
6259
- enum AllocationAction {
6260
- kAllocationActionAllocate = 1 << 0,
6261
- kAllocationActionFree = 1 << 1,
6262
- kAllocationActionAll = kAllocationActionAllocate | kAllocationActionFree
6263
- };
6264
-
6265
6266
  // --- Enter/Leave Script Callback ---
6266
6267
  typedef void (*BeforeCallEnteredCallback)(Isolate*);
6267
6268
  typedef void (*CallCompletedCallback)(Isolate*);
@@ -6291,6 +6292,20 @@ typedef MaybeLocal<Promise> (*HostImportModuleDynamicallyCallback)(
6291
6292
  Local<Context> context, Local<ScriptOrModule> referrer,
6292
6293
  Local<String> specifier);
6293
6294
 
6295
+ /**
6296
+ * HostInitializeImportMetaObjectCallback is called the first time import.meta
6297
+ * is accessed for a module. Subsequent access will reuse the same value.
6298
+ *
6299
+ * The method combines two implementation-defined abstract operations into one:
6300
+ * HostGetImportMetaProperties and HostFinalizeImportMeta.
6301
+ *
6302
+ * The embedder should use v8::Object::CreateDataProperty to add properties on
6303
+ * the meta object.
6304
+ */
6305
+ typedef void (*HostInitializeImportMetaObjectCallback)(Local<Context> context,
6306
+ Local<Module> module,
6307
+ Local<Object> meta);
6308
+
6294
6309
  /**
6295
6310
  * PromiseHook with type kInit is called when a new promise is
6296
6311
  * created. When a new promise is created as part of the chain in the
@@ -6331,11 +6346,6 @@ class PromiseRejectMessage {
6331
6346
  V8_INLINE PromiseRejectEvent GetEvent() const { return event_; }
6332
6347
  V8_INLINE Local<Value> GetValue() const { return value_; }
6333
6348
 
6334
- V8_DEPRECATED("Use v8::Exception::CreateMessage(GetValue())->GetStackTrace()",
6335
- V8_INLINE Local<StackTrace> GetStackTrace() const) {
6336
- return stack_trace_;
6337
- }
6338
-
6339
6349
  private:
6340
6350
  Local<Promise> promise_;
6341
6351
  PromiseRejectEvent event_;
@@ -6418,6 +6428,9 @@ typedef bool (*AllowCodeGenerationFromStringsCallback)(Local<Context> context,
6418
6428
  // --- WebAssembly compilation callbacks ---
6419
6429
  typedef bool (*ExtensionCallback)(const FunctionCallbackInfo<Value>&);
6420
6430
 
6431
+ typedef bool (*AllowWasmCodeGenerationCallback)(Local<Context> context,
6432
+ Local<String> source);
6433
+
6421
6434
  // --- Callback for APIs defined on v8-supported objects, but implemented
6422
6435
  // by the embedder. Example: WebAssembly.{compile|instantiate}Streaming ---
6423
6436
  typedef void (*ApiImplementationCallback)(const FunctionCallbackInfo<Value>&);
@@ -6468,6 +6481,15 @@ typedef void (*GCCallback)(GCType type, GCCallbackFlags flags);
6468
6481
 
6469
6482
  typedef void (*InterruptCallback)(Isolate* isolate, void* data);
6470
6483
 
6484
+ /**
6485
+ * This callback is invoked when the heap size is close to the heap limit and
6486
+ * V8 is likely to abort with out-of-memory error.
6487
+ * The callback can extend the heap limit by returning a value that is greater
6488
+ * than the current_heap_limit. The initial heap limit is the limit that was
6489
+ * set after heap setup.
6490
+ */
6491
+ typedef size_t (*NearHeapLimitCallback)(void* data, size_t current_heap_limit,
6492
+ size_t initial_heap_limit);
6471
6493
 
6472
6494
  /**
6473
6495
  * Collection of V8 heap information.
@@ -6486,6 +6508,8 @@ class V8_EXPORT HeapStatistics {
6486
6508
  size_t heap_size_limit() { return heap_size_limit_; }
6487
6509
  size_t malloced_memory() { return malloced_memory_; }
6488
6510
  size_t peak_malloced_memory() { return peak_malloced_memory_; }
6511
+ size_t number_of_native_contexts() { return number_of_native_contexts_; }
6512
+ size_t number_of_detached_contexts() { return number_of_detached_contexts_; }
6489
6513
 
6490
6514
  /**
6491
6515
  * Returns a 0/1 boolean, which signifies whether the V8 overwrite heap
@@ -6503,6 +6527,8 @@ class V8_EXPORT HeapStatistics {
6503
6527
  size_t malloced_memory_;
6504
6528
  size_t peak_malloced_memory_;
6505
6529
  bool does_zap_garbage_;
6530
+ size_t number_of_native_contexts_;
6531
+ size_t number_of_detached_contexts_;
6506
6532
 
6507
6533
  friend class V8;
6508
6534
  friend class Isolate;
@@ -6597,8 +6623,17 @@ struct JitCodeEvent {
6597
6623
  // statement, and is used to indicate possible break locations.
6598
6624
  enum PositionType { POSITION, STATEMENT_POSITION };
6599
6625
 
6626
+ // There are two different kinds of JitCodeEvents, one for JIT code generated
6627
+ // by the optimizing compiler, and one for byte code generated for the
6628
+ // interpreter. For JIT_CODE events, the |code_start| member of the event
6629
+ // points to the beginning of jitted assembly code, while for BYTE_CODE
6630
+ // events, |code_start| points to the first bytecode of the interpreted
6631
+ // function.
6632
+ enum CodeType { BYTE_CODE, JIT_CODE };
6633
+
6600
6634
  // Type of event.
6601
6635
  EventType type;
6636
+ CodeType code_type;
6602
6637
  // Start of the instructions.
6603
6638
  void* code_start;
6604
6639
  // Size of the instructions.
@@ -7049,9 +7084,16 @@ class V8_EXPORT Isolate {
7049
7084
  kConstructorNonUndefinedPrimitiveReturn = 39,
7050
7085
  kLabeledExpressionStatement = 40,
7051
7086
  kLineOrParagraphSeparatorAsLineTerminator = 41,
7087
+ kIndexAccessor = 42,
7088
+ kErrorCaptureStackTrace = 43,
7089
+ kErrorPrepareStackTrace = 44,
7090
+ kErrorStackTraceLimit = 45,
7091
+ kWebAssemblyInstantiation = 46,
7092
+ kDeoptimizerDisableSpeculation = 47,
7052
7093
 
7053
7094
  // If you add new values here, you'll also need to update Chromium's:
7054
- // UseCounter.h, V8PerIsolateData.cpp, histograms.xml
7095
+ // web_feature.mojom, UseCounterCallback.cpp, and enums.xml. V8 changes to
7096
+ // this list need to be landed first, then changes on the Chromium side.
7055
7097
  kUseCounterFeatureCount // This enum value must be last.
7056
7098
  };
7057
7099
 
@@ -7102,15 +7144,19 @@ class V8_EXPORT Isolate {
7102
7144
  AbortOnUncaughtExceptionCallback callback);
7103
7145
 
7104
7146
  /**
7105
- * This is an unfinished experimental feature, and is only exposed
7106
- * here for internal testing purposes. DO NOT USE.
7107
- *
7108
7147
  * This specifies the callback called by the upcoming dynamic
7109
7148
  * import() language feature to load modules.
7110
7149
  */
7111
7150
  void SetHostImportModuleDynamicallyCallback(
7112
7151
  HostImportModuleDynamicallyCallback callback);
7113
7152
 
7153
+ /**
7154
+ * This specifies the callback called by the upcoming importa.meta
7155
+ * language feature to retrieve host-defined meta data for a module.
7156
+ */
7157
+ void SetHostInitializeImportMetaObjectCallback(
7158
+ HostInitializeImportMetaObjectCallback callback);
7159
+
7114
7160
  /**
7115
7161
  * Optional notification that the system is running low on memory.
7116
7162
  * V8 uses these notifications to guide heuristics.
@@ -7179,6 +7225,14 @@ class V8_EXPORT Isolate {
7179
7225
  */
7180
7226
  V8_INLINE static uint32_t GetNumberOfDataSlots();
7181
7227
 
7228
+ /**
7229
+ * Return data that was previously attached to the isolate snapshot via
7230
+ * SnapshotCreator, and removes the reference to it.
7231
+ * Repeated call with the same index returns an empty MaybeLocal.
7232
+ */
7233
+ template <class T>
7234
+ V8_INLINE MaybeLocal<T> GetDataFromSnapshotOnce(size_t index);
7235
+
7182
7236
  /**
7183
7237
  * Get statistics about the heap memory usage.
7184
7238
  */
@@ -7275,8 +7329,13 @@ class V8_EXPORT Isolate {
7275
7329
  * is initialized. It is the embedder's responsibility to stop all CPU
7276
7330
  * profiling activities if it has started any.
7277
7331
  */
7278
- V8_DEPRECATE_SOON("CpuProfiler should be created with CpuProfiler::New call.",
7279
- CpuProfiler* GetCpuProfiler());
7332
+ V8_DEPRECATED("CpuProfiler should be created with CpuProfiler::New call.",
7333
+ CpuProfiler* GetCpuProfiler());
7334
+
7335
+ /**
7336
+ * Tells the CPU profiler whether the embedder is idle.
7337
+ */
7338
+ void SetIdle(bool is_idle);
7280
7339
 
7281
7340
  /** Returns true if this isolate has a current context. */
7282
7341
  bool InContext();
@@ -7292,7 +7351,7 @@ class V8_EXPORT Isolate {
7292
7351
  * context of the top-most JavaScript frame. If there are no
7293
7352
  * JavaScript frames an empty handle is returned.
7294
7353
  */
7295
- V8_DEPRECATE_SOON(
7354
+ V8_DEPRECATED(
7296
7355
  "Calling context concept is not compatible with tail calls, and will be "
7297
7356
  "removed.",
7298
7357
  Local<Context> GetCallingContext());
@@ -7469,7 +7528,7 @@ class V8_EXPORT Isolate {
7469
7528
  * further callbacks.
7470
7529
  */
7471
7530
  void AddCallCompletedCallback(CallCompletedCallback callback);
7472
- V8_DEPRECATE_SOON(
7531
+ V8_DEPRECATED(
7473
7532
  "Use callback with parameter",
7474
7533
  void AddCallCompletedCallback(DeprecatedCallCompletedCallback callback));
7475
7534
 
@@ -7477,10 +7536,9 @@ class V8_EXPORT Isolate {
7477
7536
  * Removes callback that was installed by AddCallCompletedCallback.
7478
7537
  */
7479
7538
  void RemoveCallCompletedCallback(CallCompletedCallback callback);
7480
- V8_DEPRECATE_SOON(
7481
- "Use callback with parameter",
7482
- void RemoveCallCompletedCallback(
7483
- DeprecatedCallCompletedCallback callback));
7539
+ V8_DEPRECATED("Use callback with parameter",
7540
+ void RemoveCallCompletedCallback(
7541
+ DeprecatedCallCompletedCallback callback));
7484
7542
 
7485
7543
  /**
7486
7544
  * Set the PromiseHook callback for various promise lifecycle
@@ -7495,38 +7553,36 @@ class V8_EXPORT Isolate {
7495
7553
  void SetPromiseRejectCallback(PromiseRejectCallback callback);
7496
7554
 
7497
7555
  /**
7498
- * Experimental: Runs the Microtask Work Queue until empty
7556
+ * Runs the Microtask Work Queue until empty
7499
7557
  * Any exceptions thrown by microtask callbacks are swallowed.
7500
7558
  */
7501
7559
  void RunMicrotasks();
7502
7560
 
7503
7561
  /**
7504
- * Experimental: Enqueues the callback to the Microtask Work Queue
7562
+ * Enqueues the callback to the Microtask Work Queue
7505
7563
  */
7506
7564
  void EnqueueMicrotask(Local<Function> microtask);
7507
7565
 
7508
7566
  /**
7509
- * Experimental: Enqueues the callback to the Microtask Work Queue
7567
+ * Enqueues the callback to the Microtask Work Queue
7510
7568
  */
7511
- void EnqueueMicrotask(MicrotaskCallback microtask, void* data = NULL);
7569
+ void EnqueueMicrotask(MicrotaskCallback callback, void* data = nullptr);
7512
7570
 
7513
7571
  /**
7514
- * Experimental: Controls how Microtasks are invoked. See MicrotasksPolicy
7515
- * for details.
7572
+ * Controls how Microtasks are invoked. See MicrotasksPolicy for details.
7516
7573
  */
7517
7574
  void SetMicrotasksPolicy(MicrotasksPolicy policy);
7518
- V8_DEPRECATE_SOON("Use SetMicrotasksPolicy",
7519
- void SetAutorunMicrotasks(bool autorun));
7575
+ V8_DEPRECATED("Use SetMicrotasksPolicy",
7576
+ void SetAutorunMicrotasks(bool autorun));
7520
7577
 
7521
7578
  /**
7522
- * Experimental: Returns the policy controlling how Microtasks are invoked.
7579
+ * Returns the policy controlling how Microtasks are invoked.
7523
7580
  */
7524
7581
  MicrotasksPolicy GetMicrotasksPolicy() const;
7525
- V8_DEPRECATE_SOON("Use GetMicrotasksPolicy",
7526
- bool WillAutorunMicrotasks() const);
7582
+ V8_DEPRECATED("Use GetMicrotasksPolicy", bool WillAutorunMicrotasks() const);
7527
7583
 
7528
7584
  /**
7529
- * Experimental: adds a callback to notify the host application after
7585
+ * Adds a callback to notify the host application after
7530
7586
  * microtasks were run. The callback is triggered by explicit RunMicrotasks
7531
7587
  * call or automatic microtasks execution (see SetAutorunMicrotasks).
7532
7588
  *
@@ -7580,9 +7636,6 @@ class V8_EXPORT Isolate {
7580
7636
  */
7581
7637
  bool IdleNotificationDeadline(double deadline_in_seconds);
7582
7638
 
7583
- V8_DEPRECATED("use IdleNotificationDeadline()",
7584
- bool IdleNotification(int idle_time_in_ms));
7585
-
7586
7639
  /**
7587
7640
  * Optional notification that the system is running low on memory.
7588
7641
  * V8 uses these notifications to attempt to free memory.
@@ -7695,6 +7748,23 @@ class V8_EXPORT Isolate {
7695
7748
  /** Set the callback to invoke in case of OOM errors. */
7696
7749
  void SetOOMErrorHandler(OOMErrorCallback that);
7697
7750
 
7751
+ /**
7752
+ * Add a callback to invoke in case the heap size is close to the heap limit.
7753
+ * If multiple callbacks are added, only the most recently added callback is
7754
+ * invoked.
7755
+ */
7756
+ void AddNearHeapLimitCallback(NearHeapLimitCallback callback, void* data);
7757
+
7758
+ /**
7759
+ * Remove the given callback and restore the heap limit to the
7760
+ * given limit. If the given limit is zero, then it is ignored.
7761
+ * If the current heap size is greater than the given limit,
7762
+ * then the heap limit is restored to the minimal limit that
7763
+ * is possible for the current heap size.
7764
+ */
7765
+ void RemoveNearHeapLimitCallback(NearHeapLimitCallback callback,
7766
+ size_t heap_limit);
7767
+
7698
7768
  /**
7699
7769
  * Set the callback to invoke to check if code generation from
7700
7770
  * strings should be allowed.
@@ -7702,6 +7772,13 @@ class V8_EXPORT Isolate {
7702
7772
  void SetAllowCodeGenerationFromStringsCallback(
7703
7773
  AllowCodeGenerationFromStringsCallback callback);
7704
7774
 
7775
+ /**
7776
+ * Set the callback to invoke to check if wasm code generation should
7777
+ * be allowed.
7778
+ */
7779
+ void SetAllowWasmCodeGenerationCallback(
7780
+ AllowWasmCodeGenerationCallback callback);
7781
+
7705
7782
  /**
7706
7783
  * Embedder over{ride|load} injection points for wasm APIs. The expectation
7707
7784
  * is that the embedder sets them at most once.
@@ -7817,6 +7894,7 @@ class V8_EXPORT Isolate {
7817
7894
  template <class K, class V, class Traits>
7818
7895
  friend class PersistentValueMapBase;
7819
7896
 
7897
+ internal::Object** GetDataFromSnapshotOnce(size_t index);
7820
7898
  void ReportExternalAllocationLimitReached();
7821
7899
  void CheckMemoryPressure();
7822
7900
  };
@@ -7856,17 +7934,6 @@ typedef uintptr_t (*ReturnAddressLocationResolver)(
7856
7934
  */
7857
7935
  class V8_EXPORT V8 {
7858
7936
  public:
7859
- /** Set the callback to invoke in case of fatal errors. */
7860
- V8_INLINE static V8_DEPRECATED(
7861
- "Use isolate version",
7862
- void SetFatalErrorHandler(FatalErrorCallback that));
7863
-
7864
- /**
7865
- * Check if V8 is dead and therefore unusable. This is the case after
7866
- * fatal errors such as out-of-memory situations.
7867
- */
7868
- V8_INLINE static V8_DEPRECATED("Use isolate version", bool IsDead());
7869
-
7870
7937
  /**
7871
7938
  * Hand startup data to V8, in case the embedder has chosen to build
7872
7939
  * V8 with external startup data.
@@ -7907,35 +7974,6 @@ class V8_EXPORT V8 {
7907
7974
  /** Set the callback to invoke in case of Dcheck failures. */
7908
7975
  static void SetDcheckErrorHandler(DcheckErrorCallback that);
7909
7976
 
7910
- /**
7911
- * Adds a message listener.
7912
- *
7913
- * The same message listener can be added more than once and in that
7914
- * case it will be called more than once for each message.
7915
- *
7916
- * If data is specified, it will be passed to the callback when it is called.
7917
- * Otherwise, the exception object will be passed to the callback instead.
7918
- */
7919
- V8_INLINE static V8_DEPRECATED(
7920
- "Use isolate version",
7921
- bool AddMessageListener(MessageCallback that,
7922
- Local<Value> data = Local<Value>()));
7923
-
7924
- /**
7925
- * Remove all message listeners from the specified callback function.
7926
- */
7927
- V8_INLINE static V8_DEPRECATED(
7928
- "Use isolate version", void RemoveMessageListeners(MessageCallback that));
7929
-
7930
- /**
7931
- * Tells V8 to capture current stack trace when uncaught exception occurs
7932
- * and report it to the message listeners. The option is off by default.
7933
- */
7934
- V8_INLINE static V8_DEPRECATED(
7935
- "Use isolate version",
7936
- void SetCaptureStackTraceForUncaughtExceptions(
7937
- bool capture, int frame_limit = 10,
7938
- StackTrace::StackTraceOptions options = StackTrace::kOverview));
7939
7977
 
7940
7978
  /**
7941
7979
  * Sets V8 flags from a string.
@@ -7952,55 +7990,6 @@ class V8_EXPORT V8 {
7952
7990
  /** Get the version string. */
7953
7991
  static const char* GetVersion();
7954
7992
 
7955
- /** Callback function for reporting failed access checks.*/
7956
- V8_INLINE static V8_DEPRECATED(
7957
- "Use isolate version",
7958
- void SetFailedAccessCheckCallbackFunction(FailedAccessCheckCallback));
7959
-
7960
- /**
7961
- * Enables the host application to receive a notification before a
7962
- * garbage collection. Allocations are not allowed in the
7963
- * callback function, you therefore cannot manipulate objects (set
7964
- * or delete properties for example) since it is possible such
7965
- * operations will result in the allocation of objects. It is possible
7966
- * to specify the GCType filter for your callback. But it is not possible to
7967
- * register the same callback function two times with different
7968
- * GCType filters.
7969
- */
7970
- static V8_DEPRECATED(
7971
- "Use isolate version",
7972
- void AddGCPrologueCallback(GCCallback callback,
7973
- GCType gc_type_filter = kGCTypeAll));
7974
-
7975
- /**
7976
- * This function removes callback which was installed by
7977
- * AddGCPrologueCallback function.
7978
- */
7979
- static V8_DEPRECATED("Use isolate version",
7980
- void RemoveGCPrologueCallback(GCCallback callback));
7981
-
7982
- /**
7983
- * Enables the host application to receive a notification after a
7984
- * garbage collection. Allocations are not allowed in the
7985
- * callback function, you therefore cannot manipulate objects (set
7986
- * or delete properties for example) since it is possible such
7987
- * operations will result in the allocation of objects. It is possible
7988
- * to specify the GCType filter for your callback. But it is not possible to
7989
- * register the same callback function two times with different
7990
- * GCType filters.
7991
- */
7992
- static V8_DEPRECATED(
7993
- "Use isolate version",
7994
- void AddGCEpilogueCallback(GCCallback callback,
7995
- GCType gc_type_filter = kGCTypeAll));
7996
-
7997
- /**
7998
- * This function removes callback which was installed by
7999
- * AddGCEpilogueCallback function.
8000
- */
8001
- static V8_DEPRECATED("Use isolate version",
8002
- void RemoveGCEpilogueCallback(GCCallback callback));
8003
-
8004
7993
  /**
8005
7994
  * Initializes V8. This function needs to be called before the first Isolate
8006
7995
  * is created. It always returns true.
@@ -8020,51 +8009,6 @@ class V8_EXPORT V8 {
8020
8009
  static void SetReturnAddressLocationResolver(
8021
8010
  ReturnAddressLocationResolver return_address_resolver);
8022
8011
 
8023
- /**
8024
- * Forcefully terminate the current thread of JavaScript execution
8025
- * in the given isolate.
8026
- *
8027
- * This method can be used by any thread even if that thread has not
8028
- * acquired the V8 lock with a Locker object.
8029
- *
8030
- * \param isolate The isolate in which to terminate the current JS execution.
8031
- */
8032
- V8_INLINE static V8_DEPRECATED("Use isolate version",
8033
- void TerminateExecution(Isolate* isolate));
8034
-
8035
- /**
8036
- * Is V8 terminating JavaScript execution.
8037
- *
8038
- * Returns true if JavaScript execution is currently terminating
8039
- * because of a call to TerminateExecution. In that case there are
8040
- * still JavaScript frames on the stack and the termination
8041
- * exception is still active.
8042
- *
8043
- * \param isolate The isolate in which to check.
8044
- */
8045
- V8_INLINE static V8_DEPRECATED(
8046
- "Use isolate version",
8047
- bool IsExecutionTerminating(Isolate* isolate = NULL));
8048
-
8049
- /**
8050
- * Resume execution capability in the given isolate, whose execution
8051
- * was previously forcefully terminated using TerminateExecution().
8052
- *
8053
- * When execution is forcefully terminated using TerminateExecution(),
8054
- * the isolate can not resume execution until all JavaScript frames
8055
- * have propagated the uncatchable exception which is generated. This
8056
- * method allows the program embedding the engine to handle the
8057
- * termination event and resume execution capability, even if
8058
- * JavaScript frames remain on the stack.
8059
- *
8060
- * This method can be used by any thread even if that thread has not
8061
- * acquired the V8 lock with a Locker object.
8062
- *
8063
- * \param isolate The isolate in which to resume execution capability.
8064
- */
8065
- V8_INLINE static V8_DEPRECATED(
8066
- "Use isolate version", void CancelTerminateExecution(Isolate* isolate));
8067
-
8068
8012
  /**
8069
8013
  * Releases any resources used by v8 and stops any utility threads
8070
8014
  * that may be running. Note that disposing v8 is permanent, it
@@ -8076,44 +8020,6 @@ class V8_EXPORT V8 {
8076
8020
  */
8077
8021
  static bool Dispose();
8078
8022
 
8079
- /**
8080
- * Iterates through all external resources referenced from current isolate
8081
- * heap. GC is not invoked prior to iterating, therefore there is no
8082
- * guarantee that visited objects are still alive.
8083
- */
8084
- V8_INLINE static V8_DEPRECATED(
8085
- "Use isolate version",
8086
- void VisitExternalResources(ExternalResourceVisitor* visitor));
8087
-
8088
- /**
8089
- * Iterates through all the persistent handles in the current isolate's heap
8090
- * that have class_ids.
8091
- */
8092
- V8_INLINE static V8_DEPRECATED(
8093
- "Use isolate version",
8094
- void VisitHandlesWithClassIds(PersistentHandleVisitor* visitor));
8095
-
8096
- /**
8097
- * Iterates through all the persistent handles in isolate's heap that have
8098
- * class_ids.
8099
- */
8100
- V8_INLINE static V8_DEPRECATED(
8101
- "Use isolate version",
8102
- void VisitHandlesWithClassIds(Isolate* isolate,
8103
- PersistentHandleVisitor* visitor));
8104
-
8105
- /**
8106
- * Iterates through all the persistent handles in the current isolate's heap
8107
- * that have class_ids and are candidates to be marked as partially dependent
8108
- * handles. This will visit handles to young objects created since the last
8109
- * garbage collection but is free to visit an arbitrary superset of these
8110
- * objects.
8111
- */
8112
- V8_INLINE static V8_DEPRECATED(
8113
- "Use isolate version",
8114
- void VisitHandlesForPartialDependence(Isolate* isolate,
8115
- PersistentHandleVisitor* visitor));
8116
-
8117
8023
  /**
8118
8024
  * Initialize the ICU library bundled with V8. The embedder should only
8119
8025
  * invoke this method when using the bundled ICU. Returns true on success.
@@ -8121,9 +8027,7 @@ class V8_EXPORT V8 {
8121
8027
  * If V8 was compiled with the ICU data in an external file, the location
8122
8028
  * of the data file has to be provided.
8123
8029
  */
8124
- V8_DEPRECATE_SOON(
8125
- "Use version with default location.",
8126
- static bool InitializeICU(const char* icu_data_file = nullptr));
8030
+ static bool InitializeICU(const char* icu_data_file = nullptr);
8127
8031
 
8128
8032
  /**
8129
8033
  * Initialize the ICU library bundled with V8. The embedder should only
@@ -8198,7 +8102,16 @@ class V8_EXPORT V8 {
8198
8102
  * Enable the default signal handler rather than using one provided by the
8199
8103
  * embedder.
8200
8104
  */
8201
- static bool RegisterDefaultSignalHandler();
8105
+ V8_DEPRECATE_SOON("Use EnableWebAssemblyTrapHandler",
8106
+ static bool RegisterDefaultSignalHandler());
8107
+
8108
+ /**
8109
+ * Activate trap-based bounds checking for WebAssembly.
8110
+ *
8111
+ * \param use_v8_signal_handler Whether V8 should install its own signal
8112
+ * handler or rely on the embedder's.
8113
+ */
8114
+ static bool EnableWebAssemblyTrapHandler(bool use_v8_signal_handler);
8202
8115
 
8203
8116
  private:
8204
8117
  V8();
@@ -8218,6 +8131,8 @@ class V8_EXPORT V8 {
8218
8131
  WeakCallbackInfo<void>::Callback weak_callback);
8219
8132
  static void MakeWeak(internal::Object*** location_addr);
8220
8133
  static void* ClearWeak(internal::Object** location);
8134
+ static void AnnotateStrongRetainer(internal::Object** location,
8135
+ const char* label);
8221
8136
  static Value* Eternalize(Isolate* isolate, Value* handle);
8222
8137
 
8223
8138
  static void RegisterExternallyReferencedObject(internal::Object** object,
@@ -8296,6 +8211,24 @@ class V8_EXPORT SnapshotCreator {
8296
8211
  */
8297
8212
  size_t AddTemplate(Local<Template> template_obj);
8298
8213
 
8214
+ /**
8215
+ * Attach arbitrary V8::Data to the context snapshot, which can be retrieved
8216
+ * via Context::GetDataFromSnapshot after deserialization. This data does not
8217
+ * survive when a new snapshot is created from an existing snapshot.
8218
+ * \returns the index for retrieval.
8219
+ */
8220
+ template <class T>
8221
+ V8_INLINE size_t AddData(Local<Context> context, Local<T> object);
8222
+
8223
+ /**
8224
+ * Attach arbitrary V8::Data to the isolate snapshot, which can be retrieved
8225
+ * via Isolate::GetDataFromSnapshot after deserialization. This data does not
8226
+ * survive when a new snapshot is created from an existing snapshot.
8227
+ * \returns the index for retrieval.
8228
+ */
8229
+ template <class T>
8230
+ V8_INLINE size_t AddData(Local<T> object);
8231
+
8299
8232
  /**
8300
8233
  * Created a snapshot data blob.
8301
8234
  * This must not be called from within a handle scope.
@@ -8311,6 +8244,9 @@ class V8_EXPORT SnapshotCreator {
8311
8244
  void operator=(const SnapshotCreator&) = delete;
8312
8245
 
8313
8246
  private:
8247
+ size_t AddData(Local<Context> context, internal::Object* object);
8248
+ size_t AddData(internal::Object* object);
8249
+
8314
8250
  void* data_;
8315
8251
  };
8316
8252
 
@@ -8383,18 +8319,45 @@ class Maybe {
8383
8319
  friend Maybe<U> Just(const U& u);
8384
8320
  };
8385
8321
 
8386
-
8387
8322
  template <class T>
8388
8323
  inline Maybe<T> Nothing() {
8389
8324
  return Maybe<T>();
8390
8325
  }
8391
8326
 
8392
-
8393
8327
  template <class T>
8394
8328
  inline Maybe<T> Just(const T& t) {
8395
8329
  return Maybe<T>(t);
8396
8330
  }
8397
8331
 
8332
+ // A template specialization of Maybe<T> for the case of T = void.
8333
+ template <>
8334
+ class Maybe<void> {
8335
+ public:
8336
+ V8_INLINE bool IsNothing() const { return !is_valid_; }
8337
+ V8_INLINE bool IsJust() const { return is_valid_; }
8338
+
8339
+ V8_INLINE bool operator==(const Maybe& other) const {
8340
+ return IsJust() == other.IsJust();
8341
+ }
8342
+
8343
+ V8_INLINE bool operator!=(const Maybe& other) const {
8344
+ return !operator==(other);
8345
+ }
8346
+
8347
+ private:
8348
+ struct JustTag {};
8349
+
8350
+ Maybe() : is_valid_(false) {}
8351
+ explicit Maybe(JustTag) : is_valid_(true) {}
8352
+
8353
+ bool is_valid_;
8354
+
8355
+ template <class U>
8356
+ friend Maybe<U> Nothing();
8357
+ friend Maybe<void> JustVoid();
8358
+ };
8359
+
8360
+ inline Maybe<void> JustVoid() { return Maybe<void>(Maybe<void>::JustTag()); }
8398
8361
 
8399
8362
  /**
8400
8363
  * An external exception handler.
@@ -8406,14 +8369,7 @@ class V8_EXPORT TryCatch {
8406
8369
  * all TryCatch blocks should be stack allocated because the memory
8407
8370
  * location itself is compared against JavaScript try/catch blocks.
8408
8371
  */
8409
- V8_DEPRECATED("Use isolate version", TryCatch());
8410
-
8411
- /**
8412
- * Creates a new try/catch block and registers it with v8. Note that
8413
- * all TryCatch blocks should be stack allocated because the memory
8414
- * location itself is compared against JavaScript try/catch blocks.
8415
- */
8416
- TryCatch(Isolate* isolate);
8372
+ explicit TryCatch(Isolate* isolate);
8417
8373
 
8418
8374
  /**
8419
8375
  * Unregisters and deletes this try/catch block.
@@ -8470,7 +8426,7 @@ class V8_EXPORT TryCatch {
8470
8426
  * Returns the .stack property of the thrown object. If no .stack
8471
8427
  * property is present an empty handle is returned.
8472
8428
  */
8473
- V8_DEPRECATE_SOON("Use maybe version.", Local<Value> StackTrace() const);
8429
+ V8_DEPRECATED("Use maybe version.", Local<Value> StackTrace() const);
8474
8430
  V8_WARN_UNUSED_RESULT MaybeLocal<Value> StackTrace(
8475
8431
  Local<Context> context) const;
8476
8432
 
@@ -8714,6 +8670,11 @@ class V8_EXPORT Context {
8714
8670
  */
8715
8671
  enum EmbedderDataFields { kDebugIdIndex = 0 };
8716
8672
 
8673
+ /**
8674
+ * Return the number of fields allocated for embedder data.
8675
+ */
8676
+ uint32_t GetNumberOfEmbedderDataFields();
8677
+
8717
8678
  /**
8718
8679
  * Gets the embedder data with the given index, which must have been set by a
8719
8680
  * previous call to SetEmbedderData with the same index.
@@ -8779,9 +8740,12 @@ class V8_EXPORT Context {
8779
8740
  void SetErrorMessageForCodeGenerationFromStrings(Local<String> message);
8780
8741
 
8781
8742
  /**
8782
- * Estimate the memory in bytes retained by this context.
8743
+ * Return data that was previously attached to the context snapshot via
8744
+ * SnapshotCreator, and removes the reference to it.
8745
+ * Repeated call with the same index returns an empty MaybeLocal.
8783
8746
  */
8784
- V8_DEPRECATED("no longer supported", size_t EstimatedSize());
8747
+ template <class T>
8748
+ V8_INLINE MaybeLocal<T> GetDataFromSnapshotOnce(size_t index);
8785
8749
 
8786
8750
  /**
8787
8751
  * Stack-allocated class which sets the execution context for all
@@ -8803,7 +8767,7 @@ class V8_EXPORT Context {
8803
8767
  * stack.
8804
8768
  * https://html.spec.whatwg.org/multipage/webappapis.html#backup-incumbent-settings-object-stack
8805
8769
  */
8806
- class BackupIncumbentScope {
8770
+ class V8_EXPORT BackupIncumbentScope {
8807
8771
  public:
8808
8772
  /**
8809
8773
  * |backup_incumbent_context| is pushed onto the backup incumbent settings
@@ -8825,6 +8789,7 @@ class V8_EXPORT Context {
8825
8789
  friend class Object;
8826
8790
  friend class Function;
8827
8791
 
8792
+ internal::Object** GetDataFromSnapshotOnce(size_t index);
8828
8793
  Local<Value> SlowGetEmbedderData(int index);
8829
8794
  void* SlowGetAlignedPointerFromEmbedderData(int index);
8830
8795
  };
@@ -8965,6 +8930,7 @@ const int kApiInt64Size = sizeof(int64_t); // NOLINT
8965
8930
 
8966
8931
  // Tag information for HeapObject.
8967
8932
  const int kHeapObjectTag = 1;
8933
+ const int kWeakHeapObjectTag = 3;
8968
8934
  const int kHeapObjectTagSize = 2;
8969
8935
  const intptr_t kHeapObjectTagMask = (1 << kHeapObjectTagSize) - 1;
8970
8936
 
@@ -9047,8 +9013,7 @@ class Internals {
9047
9013
  // These values match non-compiler-dependent values defined within
9048
9014
  // the implementation of v8.
9049
9015
  static const int kHeapObjectMapOffset = 0;
9050
- static const int kMapInstanceTypeAndBitFieldOffset =
9051
- 1 * kApiPointerSize + kApiIntSize;
9016
+ static const int kMapInstanceTypeOffset = 1 * kApiPointerSize + kApiIntSize;
9052
9017
  static const int kStringResourceOffset = 3 * kApiPointerSize;
9053
9018
 
9054
9019
  static const int kOddballKindOffset = 4 * kApiPointerSize + sizeof(double);
@@ -9090,8 +9055,9 @@ class Internals {
9090
9055
  static const int kFirstNonstringType = 0x80;
9091
9056
  static const int kOddballType = 0x83;
9092
9057
  static const int kForeignType = 0x87;
9093
- static const int kJSApiObjectType = 0xbf;
9094
- static const int kJSObjectType = 0xc0;
9058
+ static const int kJSSpecialApiObjectType = 0x410;
9059
+ static const int kJSApiObjectType = 0x420;
9060
+ static const int kJSObjectType = 0x421;
9095
9061
 
9096
9062
  static const int kUndefinedOddballKind = 5;
9097
9063
  static const int kNullOddballKind = 3;
@@ -9125,9 +9091,7 @@ class Internals {
9125
9091
  V8_INLINE static int GetInstanceType(const internal::Object* obj) {
9126
9092
  typedef internal::Object O;
9127
9093
  O* map = ReadField<O*>(obj, kHeapObjectMapOffset);
9128
- // Map::InstanceType is defined so that it will always be loaded into
9129
- // the LS 8 bits of one 16-bit word, regardless of endianess.
9130
- return ReadField<uint16_t>(map, kMapInstanceTypeAndBitFieldOffset) & 0xff;
9094
+ return ReadField<uint16_t>(map, kMapInstanceTypeOffset);
9131
9095
  }
9132
9096
 
9133
9097
  V8_INLINE static int GetOddballKind(const internal::Object* obj) {
@@ -9205,6 +9169,29 @@ class Internals {
9205
9169
  }
9206
9170
  };
9207
9171
 
9172
+ // Only perform cast check for types derived from v8::Data since
9173
+ // other types do not implement the Cast method.
9174
+ template <bool PerformCheck>
9175
+ struct CastCheck {
9176
+ template <class T>
9177
+ static void Perform(T* data);
9178
+ };
9179
+
9180
+ template <>
9181
+ template <class T>
9182
+ void CastCheck<true>::Perform(T* data) {
9183
+ T::Cast(data);
9184
+ }
9185
+
9186
+ template <>
9187
+ template <class T>
9188
+ void CastCheck<false>::Perform(T* data) {}
9189
+
9190
+ template <class T>
9191
+ V8_INLINE void PerformCastCheck(T* data) {
9192
+ CastCheck<std::is_base_of<Data, T>::value>::Perform(data);
9193
+ }
9194
+
9208
9195
  } // namespace internal
9209
9196
 
9210
9197
 
@@ -9284,7 +9271,6 @@ void Persistent<T, M>::Copy(const Persistent<S, M2>& that) {
9284
9271
  M::Copy(that, this);
9285
9272
  }
9286
9273
 
9287
-
9288
9274
  template <class T>
9289
9275
  bool PersistentBase<T>::IsIndependent() const {
9290
9276
  typedef internal::Internals I;
@@ -9293,7 +9279,6 @@ bool PersistentBase<T>::IsIndependent() const {
9293
9279
  I::kNodeIsIndependentShift);
9294
9280
  }
9295
9281
 
9296
-
9297
9282
  template <class T>
9298
9283
  bool PersistentBase<T>::IsNearDeath() const {
9299
9284
  typedef internal::Internals I;
@@ -9365,6 +9350,12 @@ P* PersistentBase<T>::ClearWeak() {
9365
9350
  V8::ClearWeak(reinterpret_cast<internal::Object**>(this->val_)));
9366
9351
  }
9367
9352
 
9353
+ template <class T>
9354
+ void PersistentBase<T>::AnnotateStrongRetainer(const char* label) {
9355
+ V8::AnnotateStrongRetainer(reinterpret_cast<internal::Object**>(this->val_),
9356
+ label);
9357
+ }
9358
+
9368
9359
  template <class T>
9369
9360
  void PersistentBase<T>::RegisterExternalReference(Isolate* isolate) const {
9370
9361
  if (IsEmpty()) return;
@@ -9377,8 +9368,7 @@ template <class T>
9377
9368
  void PersistentBase<T>::MarkIndependent() {
9378
9369
  typedef internal::Internals I;
9379
9370
  if (this->IsEmpty()) return;
9380
- I::UpdateNodeFlag(reinterpret_cast<internal::Object**>(this->val_),
9381
- true,
9371
+ I::UpdateNodeFlag(reinterpret_cast<internal::Object**>(this->val_), true,
9382
9372
  I::kNodeIsIndependentShift);
9383
9373
  }
9384
9374
 
@@ -9550,13 +9540,6 @@ Local<Value> FunctionCallbackInfo<T>::operator[](int i) const {
9550
9540
  }
9551
9541
 
9552
9542
 
9553
- template<typename T>
9554
- Local<Function> FunctionCallbackInfo<T>::Callee() const {
9555
- return Local<Function>(reinterpret_cast<Function*>(
9556
- &implicit_args_[kCalleeIndex]));
9557
- }
9558
-
9559
-
9560
9543
  template<typename T>
9561
9544
  Local<Object> FunctionCallbackInfo<T>::This() const {
9562
9545
  return Local<Object>(reinterpret_cast<Object*>(values_ + 1));
@@ -9686,6 +9669,33 @@ void Template::Set(Isolate* isolate, const char* name, Local<Data> value) {
9686
9669
  value);
9687
9670
  }
9688
9671
 
9672
+ FunctionTemplate* FunctionTemplate::Cast(Data* data) {
9673
+ #ifdef V8_ENABLE_CHECKS
9674
+ CheckCast(data);
9675
+ #endif
9676
+ return reinterpret_cast<FunctionTemplate*>(data);
9677
+ }
9678
+
9679
+ ObjectTemplate* ObjectTemplate::Cast(Data* data) {
9680
+ #ifdef V8_ENABLE_CHECKS
9681
+ CheckCast(data);
9682
+ #endif
9683
+ return reinterpret_cast<ObjectTemplate*>(data);
9684
+ }
9685
+
9686
+ Signature* Signature::Cast(Data* data) {
9687
+ #ifdef V8_ENABLE_CHECKS
9688
+ CheckCast(data);
9689
+ #endif
9690
+ return reinterpret_cast<Signature*>(data);
9691
+ }
9692
+
9693
+ AccessorSignature* AccessorSignature::Cast(Data* data) {
9694
+ #ifdef V8_ENABLE_CHECKS
9695
+ CheckCast(data);
9696
+ #endif
9697
+ return reinterpret_cast<AccessorSignature*>(data);
9698
+ }
9689
9699
 
9690
9700
  Local<Value> Object::GetInternalField(int index) {
9691
9701
  #ifndef V8_ENABLE_CHECKS
@@ -9697,7 +9707,8 @@ Local<Value> Object::GetInternalField(int index) {
9697
9707
  // know where to find the internal fields and can return the value directly.
9698
9708
  auto instance_type = I::GetInstanceType(obj);
9699
9709
  if (instance_type == I::kJSObjectType ||
9700
- instance_type == I::kJSApiObjectType) {
9710
+ instance_type == I::kJSApiObjectType ||
9711
+ instance_type == I::kJSSpecialApiObjectType) {
9701
9712
  int offset = I::kJSObjectHeaderSize + (internal::kApiPointerSize * index);
9702
9713
  O* value = I::ReadField<O*>(obj, offset);
9703
9714
  O** result = HandleScope::CreateHandle(reinterpret_cast<HO*>(obj), value);
@@ -9717,7 +9728,8 @@ void* Object::GetAlignedPointerFromInternalField(int index) {
9717
9728
  // know where to find the internal fields and can return the value directly.
9718
9729
  auto instance_type = I::GetInstanceType(obj);
9719
9730
  if (V8_LIKELY(instance_type == I::kJSObjectType ||
9720
- instance_type == I::kJSApiObjectType)) {
9731
+ instance_type == I::kJSApiObjectType ||
9732
+ instance_type == I::kJSSpecialApiObjectType)) {
9721
9733
  int offset = I::kJSObjectHeaderSize + (internal::kApiPointerSize * index);
9722
9734
  return I::ReadField<void*>(obj, offset);
9723
9735
  }
@@ -9861,24 +9873,12 @@ Local<Boolean> Value::ToBoolean() const {
9861
9873
  }
9862
9874
 
9863
9875
 
9864
- Local<Number> Value::ToNumber() const {
9865
- return ToNumber(Isolate::GetCurrent()->GetCurrentContext())
9866
- .FromMaybe(Local<Number>());
9867
- }
9868
-
9869
-
9870
9876
  Local<String> Value::ToString() const {
9871
9877
  return ToString(Isolate::GetCurrent()->GetCurrentContext())
9872
9878
  .FromMaybe(Local<String>());
9873
9879
  }
9874
9880
 
9875
9881
 
9876
- Local<String> Value::ToDetailString() const {
9877
- return ToDetailString(Isolate::GetCurrent()->GetCurrentContext())
9878
- .FromMaybe(Local<String>());
9879
- }
9880
-
9881
-
9882
9882
  Local<Object> Value::ToObject() const {
9883
9883
  return ToObject(Isolate::GetCurrent()->GetCurrentContext())
9884
9884
  .FromMaybe(Local<Object>());
@@ -9891,18 +9891,6 @@ Local<Integer> Value::ToInteger() const {
9891
9891
  }
9892
9892
 
9893
9893
 
9894
- Local<Uint32> Value::ToUint32() const {
9895
- return ToUint32(Isolate::GetCurrent()->GetCurrentContext())
9896
- .FromMaybe(Local<Uint32>());
9897
- }
9898
-
9899
-
9900
- Local<Int32> Value::ToInt32() const {
9901
- return ToInt32(Isolate::GetCurrent()->GetCurrentContext())
9902
- .FromMaybe(Local<Int32>());
9903
- }
9904
-
9905
-
9906
9894
  Boolean* Boolean::Cast(v8::Value* value) {
9907
9895
  #ifdef V8_ENABLE_CHECKS
9908
9896
  CheckCast(value);
@@ -9927,6 +9915,14 @@ Symbol* Symbol::Cast(v8::Value* value) {
9927
9915
  }
9928
9916
 
9929
9917
 
9918
+ Private* Private::Cast(Data* data) {
9919
+ #ifdef V8_ENABLE_CHECKS
9920
+ CheckCast(data);
9921
+ #endif
9922
+ return reinterpret_cast<Private*>(data);
9923
+ }
9924
+
9925
+
9930
9926
  Number* Number::Cast(v8::Value* value) {
9931
9927
  #ifdef V8_ENABLE_CHECKS
9932
9928
  CheckCast(value);
@@ -9958,6 +9954,12 @@ Uint32* Uint32::Cast(v8::Value* value) {
9958
9954
  return static_cast<Uint32*>(value);
9959
9955
  }
9960
9956
 
9957
+ BigInt* BigInt::Cast(v8::Value* value) {
9958
+ #ifdef V8_ENABLE_CHECKS
9959
+ CheckCast(value);
9960
+ #endif
9961
+ return static_cast<BigInt*>(value);
9962
+ }
9961
9963
 
9962
9964
  Date* Date::Cast(v8::Value* value) {
9963
9965
  #ifdef V8_ENABLE_CHECKS
@@ -9990,6 +9992,12 @@ NumberObject* NumberObject::Cast(v8::Value* value) {
9990
9992
  return static_cast<NumberObject*>(value);
9991
9993
  }
9992
9994
 
9995
+ BigIntObject* BigIntObject::Cast(v8::Value* value) {
9996
+ #ifdef V8_ENABLE_CHECKS
9997
+ CheckCast(value);
9998
+ #endif
9999
+ return static_cast<BigIntObject*>(value);
10000
+ }
9993
10001
 
9994
10002
  BooleanObject* BooleanObject::Cast(v8::Value* value) {
9995
10003
  #ifdef V8_ENABLE_CHECKS
@@ -10156,6 +10164,19 @@ Float64Array* Float64Array::Cast(v8::Value* value) {
10156
10164
  return static_cast<Float64Array*>(value);
10157
10165
  }
10158
10166
 
10167
+ BigInt64Array* BigInt64Array::Cast(v8::Value* value) {
10168
+ #ifdef V8_ENABLE_CHECKS
10169
+ CheckCast(value);
10170
+ #endif
10171
+ return static_cast<BigInt64Array*>(value);
10172
+ }
10173
+
10174
+ BigUint64Array* BigUint64Array::Cast(v8::Value* value) {
10175
+ #ifdef V8_ENABLE_CHECKS
10176
+ CheckCast(value);
10177
+ #endif
10178
+ return static_cast<BigUint64Array*>(value);
10179
+ }
10159
10180
 
10160
10181
  Uint8ClampedArray* Uint8ClampedArray::Cast(v8::Value* value) {
10161
10182
  #ifdef V8_ENABLE_CHECKS
@@ -10286,6 +10307,12 @@ uint32_t Isolate::GetNumberOfDataSlots() {
10286
10307
  return I::kNumIsolateDataSlots;
10287
10308
  }
10288
10309
 
10310
+ template <class T>
10311
+ MaybeLocal<T> Isolate::GetDataFromSnapshotOnce(size_t index) {
10312
+ T* data = reinterpret_cast<T*>(GetDataFromSnapshotOnce(index));
10313
+ if (data) internal::PerformCastCheck(data);
10314
+ return Local<T>(data);
10315
+ }
10289
10316
 
10290
10317
  int64_t Isolate::AdjustAmountOfExternalAllocatedMemory(
10291
10318
  int64_t change_in_bytes) {
@@ -10345,81 +10372,25 @@ void* Context::GetAlignedPointerFromEmbedderData(int index) {
10345
10372
  #endif
10346
10373
  }
10347
10374
 
10348
- bool V8::IsDead() {
10349
- Isolate* isolate = Isolate::GetCurrent();
10350
- return isolate->IsDead();
10351
- }
10352
-
10353
-
10354
- bool V8::AddMessageListener(MessageCallback that, Local<Value> data) {
10355
- Isolate* isolate = Isolate::GetCurrent();
10356
- return isolate->AddMessageListener(that, data);
10357
- }
10358
-
10359
-
10360
- void V8::RemoveMessageListeners(MessageCallback that) {
10361
- Isolate* isolate = Isolate::GetCurrent();
10362
- isolate->RemoveMessageListeners(that);
10363
- }
10364
-
10365
-
10366
- void V8::SetFailedAccessCheckCallbackFunction(
10367
- FailedAccessCheckCallback callback) {
10368
- Isolate* isolate = Isolate::GetCurrent();
10369
- isolate->SetFailedAccessCheckCallbackFunction(callback);
10370
- }
10371
-
10372
-
10373
- void V8::SetCaptureStackTraceForUncaughtExceptions(
10374
- bool capture, int frame_limit, StackTrace::StackTraceOptions options) {
10375
- Isolate* isolate = Isolate::GetCurrent();
10376
- isolate->SetCaptureStackTraceForUncaughtExceptions(capture, frame_limit,
10377
- options);
10378
- }
10379
-
10380
-
10381
- void V8::SetFatalErrorHandler(FatalErrorCallback callback) {
10382
- Isolate* isolate = Isolate::GetCurrent();
10383
- isolate->SetFatalErrorHandler(callback);
10384
- }
10385
-
10386
- void V8::TerminateExecution(Isolate* isolate) { isolate->TerminateExecution(); }
10387
-
10388
-
10389
- bool V8::IsExecutionTerminating(Isolate* isolate) {
10390
- if (isolate == NULL) {
10391
- isolate = Isolate::GetCurrent();
10392
- }
10393
- return isolate->IsExecutionTerminating();
10394
- }
10395
-
10396
-
10397
- void V8::CancelTerminateExecution(Isolate* isolate) {
10398
- isolate->CancelTerminateExecution();
10399
- }
10400
-
10401
-
10402
- void V8::VisitExternalResources(ExternalResourceVisitor* visitor) {
10403
- Isolate* isolate = Isolate::GetCurrent();
10404
- isolate->VisitExternalResources(visitor);
10405
- }
10406
-
10407
-
10408
- void V8::VisitHandlesWithClassIds(PersistentHandleVisitor* visitor) {
10409
- Isolate* isolate = Isolate::GetCurrent();
10410
- isolate->VisitHandlesWithClassIds(visitor);
10375
+ template <class T>
10376
+ MaybeLocal<T> Context::GetDataFromSnapshotOnce(size_t index) {
10377
+ T* data = reinterpret_cast<T*>(GetDataFromSnapshotOnce(index));
10378
+ if (data) internal::PerformCastCheck(data);
10379
+ return Local<T>(data);
10411
10380
  }
10412
10381
 
10413
-
10414
- void V8::VisitHandlesWithClassIds(Isolate* isolate,
10415
- PersistentHandleVisitor* visitor) {
10416
- isolate->VisitHandlesWithClassIds(visitor);
10382
+ template <class T>
10383
+ size_t SnapshotCreator::AddData(Local<Context> context, Local<T> object) {
10384
+ T* object_ptr = *object;
10385
+ internal::Object** p = reinterpret_cast<internal::Object**>(object_ptr);
10386
+ return AddData(context, *p);
10417
10387
  }
10418
10388
 
10419
-
10420
- void V8::VisitHandlesForPartialDependence(Isolate* isolate,
10421
- PersistentHandleVisitor* visitor) {
10422
- isolate->VisitHandlesForPartialDependence(visitor);
10389
+ template <class T>
10390
+ size_t SnapshotCreator::AddData(Local<T> object) {
10391
+ T* object_ptr = *object;
10392
+ internal::Object** p = reinterpret_cast<internal::Object**>(object_ptr);
10393
+ return AddData(*p);
10423
10394
  }
10424
10395
 
10425
10396
  /**