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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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
  /**