node-aix-ppc64 19.8.1 → 20.1.0

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.
Files changed (94) hide show
  1. package/CHANGELOG.md +376 -1512
  2. package/LICENSE +538 -514
  3. package/README.md +33 -28
  4. package/bin/node +0 -0
  5. package/include/node/common.gypi +1 -1
  6. package/include/node/config.gypi +15 -8
  7. package/include/node/libplatform/v8-tracing.h +2 -2
  8. package/include/node/node.exp +20910 -17130
  9. package/include/node/node.h +24 -36
  10. package/include/node/node_api.h +17 -59
  11. package/include/node/node_version.h +4 -4
  12. package/include/node/openssl/archs/BSD-x86/asm/crypto/buildinf.h +1 -1
  13. package/include/node/openssl/archs/BSD-x86/asm_avx2/crypto/buildinf.h +1 -1
  14. package/include/node/openssl/archs/BSD-x86/no-asm/crypto/buildinf.h +1 -1
  15. package/include/node/openssl/archs/BSD-x86_64/asm/crypto/buildinf.h +1 -1
  16. package/include/node/openssl/archs/BSD-x86_64/asm_avx2/crypto/buildinf.h +1 -1
  17. package/include/node/openssl/archs/BSD-x86_64/no-asm/crypto/buildinf.h +1 -1
  18. package/include/node/openssl/archs/VC-WIN32/asm/crypto/buildinf.h +1 -1
  19. package/include/node/openssl/archs/VC-WIN32/asm_avx2/crypto/buildinf.h +1 -1
  20. package/include/node/openssl/archs/VC-WIN32/no-asm/crypto/buildinf.h +1 -1
  21. package/include/node/openssl/archs/VC-WIN64-ARM/no-asm/crypto/buildinf.h +1 -1
  22. package/include/node/openssl/archs/VC-WIN64A/asm/crypto/buildinf.h +1 -1
  23. package/include/node/openssl/archs/VC-WIN64A/asm_avx2/crypto/buildinf.h +1 -1
  24. package/include/node/openssl/archs/VC-WIN64A/no-asm/crypto/buildinf.h +1 -1
  25. package/include/node/openssl/archs/aix64-gcc-as/asm/crypto/buildinf.h +1 -1
  26. package/include/node/openssl/archs/aix64-gcc-as/asm_avx2/crypto/buildinf.h +1 -1
  27. package/include/node/openssl/archs/aix64-gcc-as/no-asm/crypto/buildinf.h +1 -1
  28. package/include/node/openssl/archs/darwin-i386-cc/asm/crypto/buildinf.h +1 -1
  29. package/include/node/openssl/archs/darwin-i386-cc/asm_avx2/crypto/buildinf.h +1 -1
  30. package/include/node/openssl/archs/darwin-i386-cc/no-asm/crypto/buildinf.h +1 -1
  31. package/include/node/openssl/archs/darwin64-arm64-cc/asm/crypto/buildinf.h +1 -1
  32. package/include/node/openssl/archs/darwin64-arm64-cc/asm_avx2/crypto/buildinf.h +1 -1
  33. package/include/node/openssl/archs/darwin64-arm64-cc/no-asm/crypto/buildinf.h +1 -1
  34. package/include/node/openssl/archs/darwin64-x86_64-cc/asm/crypto/buildinf.h +1 -1
  35. package/include/node/openssl/archs/darwin64-x86_64-cc/asm_avx2/crypto/buildinf.h +1 -1
  36. package/include/node/openssl/archs/darwin64-x86_64-cc/no-asm/crypto/buildinf.h +1 -1
  37. package/include/node/openssl/archs/linux-aarch64/asm/crypto/buildinf.h +1 -1
  38. package/include/node/openssl/archs/linux-aarch64/asm_avx2/crypto/buildinf.h +1 -1
  39. package/include/node/openssl/archs/linux-aarch64/no-asm/crypto/buildinf.h +1 -1
  40. package/include/node/openssl/archs/linux-armv4/asm/crypto/buildinf.h +1 -1
  41. package/include/node/openssl/archs/linux-armv4/asm_avx2/crypto/buildinf.h +1 -1
  42. package/include/node/openssl/archs/linux-armv4/no-asm/crypto/buildinf.h +1 -1
  43. package/include/node/openssl/archs/linux-elf/asm/crypto/buildinf.h +1 -1
  44. package/include/node/openssl/archs/linux-elf/asm_avx2/crypto/buildinf.h +1 -1
  45. package/include/node/openssl/archs/linux-elf/no-asm/crypto/buildinf.h +1 -1
  46. package/include/node/openssl/archs/linux-ppc64le/asm/crypto/buildinf.h +1 -1
  47. package/include/node/openssl/archs/linux-ppc64le/asm_avx2/crypto/buildinf.h +1 -1
  48. package/include/node/openssl/archs/linux-ppc64le/no-asm/crypto/buildinf.h +1 -1
  49. package/include/node/openssl/archs/linux-x86_64/asm/crypto/buildinf.h +1 -1
  50. package/include/node/openssl/archs/linux-x86_64/asm_avx2/crypto/buildinf.h +1 -1
  51. package/include/node/openssl/archs/linux-x86_64/no-asm/crypto/buildinf.h +1 -1
  52. package/include/node/openssl/archs/linux32-s390x/asm/crypto/buildinf.h +1 -1
  53. package/include/node/openssl/archs/linux32-s390x/asm_avx2/crypto/buildinf.h +1 -1
  54. package/include/node/openssl/archs/linux32-s390x/no-asm/crypto/buildinf.h +1 -1
  55. package/include/node/openssl/archs/linux64-mips64/asm/crypto/buildinf.h +1 -1
  56. package/include/node/openssl/archs/linux64-mips64/asm_avx2/crypto/buildinf.h +1 -1
  57. package/include/node/openssl/archs/linux64-mips64/no-asm/crypto/buildinf.h +1 -1
  58. package/include/node/openssl/archs/linux64-riscv64/no-asm/crypto/buildinf.h +1 -1
  59. package/include/node/openssl/archs/linux64-s390x/asm/crypto/buildinf.h +1 -1
  60. package/include/node/openssl/archs/linux64-s390x/asm_avx2/crypto/buildinf.h +1 -1
  61. package/include/node/openssl/archs/linux64-s390x/no-asm/crypto/buildinf.h +1 -1
  62. package/include/node/openssl/archs/solaris-x86-gcc/asm/crypto/buildinf.h +1 -1
  63. package/include/node/openssl/archs/solaris-x86-gcc/asm_avx2/crypto/buildinf.h +1 -1
  64. package/include/node/openssl/archs/solaris-x86-gcc/no-asm/crypto/buildinf.h +1 -1
  65. package/include/node/openssl/archs/solaris64-x86_64-gcc/asm/crypto/buildinf.h +1 -1
  66. package/include/node/openssl/archs/solaris64-x86_64-gcc/asm_avx2/crypto/buildinf.h +1 -1
  67. package/include/node/openssl/archs/solaris64-x86_64-gcc/no-asm/crypto/buildinf.h +1 -1
  68. package/include/node/v8-array-buffer.h +59 -0
  69. package/include/node/v8-callbacks.h +14 -1
  70. package/include/node/v8-context.h +50 -3
  71. package/include/node/v8-data.h +1 -1
  72. package/include/node/v8-embedder-heap.h +0 -169
  73. package/include/node/v8-function-callback.h +69 -42
  74. package/include/node/v8-function.h +1 -0
  75. package/include/node/v8-internal.h +242 -150
  76. package/include/node/v8-isolate.h +30 -40
  77. package/include/node/v8-local-handle.h +81 -48
  78. package/include/node/v8-microtask-queue.h +5 -0
  79. package/include/node/v8-object.h +21 -3
  80. package/include/node/v8-persistent-handle.h +25 -16
  81. package/include/node/v8-platform.h +79 -10
  82. package/include/node/v8-primitive.h +19 -12
  83. package/include/node/v8-profiler.h +49 -31
  84. package/include/node/v8-script.h +29 -1
  85. package/include/node/v8-snapshot.h +4 -8
  86. package/include/node/v8-template.h +3 -1
  87. package/include/node/v8-traced-handle.h +22 -28
  88. package/include/node/v8-value.h +31 -4
  89. package/include/node/v8-version.h +4 -4
  90. package/include/node/v8-wasm.h +2 -1
  91. package/include/node/v8config.h +73 -2
  92. package/package.json +1 -1
  93. package/share/doc/node/gdbinit +4 -3
  94. package/share/man/man1/node.1 +17 -1
@@ -11,7 +11,7 @@
11
11
  */
12
12
 
13
13
  #define PLATFORM "platform: linux-ppc64le"
14
- #define DATE "built on: Sun Feb 12 18:18:57 2023 UTC"
14
+ #define DATE "built on: Mon Feb 13 14:09:34 2023 UTC"
15
15
 
16
16
  /*
17
17
  * Generate compiler_flags as an array of individual characters. This is a
@@ -11,7 +11,7 @@
11
11
  */
12
12
 
13
13
  #define PLATFORM "platform: linux-ppc64le"
14
- #define DATE "built on: Sun Feb 12 18:19:09 2023 UTC"
14
+ #define DATE "built on: Mon Feb 13 14:09:45 2023 UTC"
15
15
 
16
16
  /*
17
17
  * Generate compiler_flags as an array of individual characters. This is a
@@ -11,7 +11,7 @@
11
11
  */
12
12
 
13
13
  #define PLATFORM "platform: linux-x86_64"
14
- #define DATE "built on: Sun Feb 12 18:18:07 2023 UTC"
14
+ #define DATE "built on: Mon Feb 13 14:08:44 2023 UTC"
15
15
 
16
16
  /*
17
17
  * Generate compiler_flags as an array of individual characters. This is a
@@ -11,7 +11,7 @@
11
11
  */
12
12
 
13
13
  #define PLATFORM "platform: linux-x86_64"
14
- #define DATE "built on: Sun Feb 12 18:18:21 2023 UTC"
14
+ #define DATE "built on: Mon Feb 13 14:08:58 2023 UTC"
15
15
 
16
16
  /*
17
17
  * Generate compiler_flags as an array of individual characters. This is a
@@ -11,7 +11,7 @@
11
11
  */
12
12
 
13
13
  #define PLATFORM "platform: linux-x86_64"
14
- #define DATE "built on: Sun Feb 12 18:18:35 2023 UTC"
14
+ #define DATE "built on: Mon Feb 13 14:09:12 2023 UTC"
15
15
 
16
16
  /*
17
17
  * Generate compiler_flags as an array of individual characters. This is a
@@ -11,7 +11,7 @@
11
11
  */
12
12
 
13
13
  #define PLATFORM "platform: linux32-s390x"
14
- #define DATE "built on: Sun Feb 12 18:19:19 2023 UTC"
14
+ #define DATE "built on: Mon Feb 13 14:09:56 2023 UTC"
15
15
 
16
16
  /*
17
17
  * Generate compiler_flags as an array of individual characters. This is a
@@ -11,7 +11,7 @@
11
11
  */
12
12
 
13
13
  #define PLATFORM "platform: linux32-s390x"
14
- #define DATE "built on: Sun Feb 12 18:19:31 2023 UTC"
14
+ #define DATE "built on: Mon Feb 13 14:10:07 2023 UTC"
15
15
 
16
16
  /*
17
17
  * Generate compiler_flags as an array of individual characters. This is a
@@ -11,7 +11,7 @@
11
11
  */
12
12
 
13
13
  #define PLATFORM "platform: linux32-s390x"
14
- #define DATE "built on: Sun Feb 12 18:19:42 2023 UTC"
14
+ #define DATE "built on: Mon Feb 13 14:10:18 2023 UTC"
15
15
 
16
16
  /*
17
17
  * Generate compiler_flags as an array of individual characters. This is a
@@ -11,7 +11,7 @@
11
11
  */
12
12
 
13
13
  #define PLATFORM "platform: linux64-mips64"
14
- #define DATE "built on: Sun Feb 12 18:20:26 2023 UTC"
14
+ #define DATE "built on: Mon Feb 13 14:11:02 2023 UTC"
15
15
 
16
16
  /*
17
17
  * Generate compiler_flags as an array of individual characters. This is a
@@ -11,7 +11,7 @@
11
11
  */
12
12
 
13
13
  #define PLATFORM "platform: linux64-mips64"
14
- #define DATE "built on: Sun Feb 12 18:20:37 2023 UTC"
14
+ #define DATE "built on: Mon Feb 13 14:11:13 2023 UTC"
15
15
 
16
16
  /*
17
17
  * Generate compiler_flags as an array of individual characters. This is a
@@ -11,7 +11,7 @@
11
11
  */
12
12
 
13
13
  #define PLATFORM "platform: linux64-mips64"
14
- #define DATE "built on: Sun Feb 12 18:20:48 2023 UTC"
14
+ #define DATE "built on: Mon Feb 13 14:11:23 2023 UTC"
15
15
 
16
16
  /*
17
17
  * Generate compiler_flags as an array of individual characters. This is a
@@ -11,7 +11,7 @@
11
11
  */
12
12
 
13
13
  #define PLATFORM "platform: linux64-riscv64"
14
- #define DATE "built on: Sun Feb 12 18:23:30 2023 UTC"
14
+ #define DATE "built on: Mon Feb 13 14:14:06 2023 UTC"
15
15
 
16
16
  /*
17
17
  * Generate compiler_flags as an array of individual characters. This is a
@@ -11,7 +11,7 @@
11
11
  */
12
12
 
13
13
  #define PLATFORM "platform: linux64-s390x"
14
- #define DATE "built on: Sun Feb 12 18:19:53 2023 UTC"
14
+ #define DATE "built on: Mon Feb 13 14:10:29 2023 UTC"
15
15
 
16
16
  /*
17
17
  * Generate compiler_flags as an array of individual characters. This is a
@@ -11,7 +11,7 @@
11
11
  */
12
12
 
13
13
  #define PLATFORM "platform: linux64-s390x"
14
- #define DATE "built on: Sun Feb 12 18:20:04 2023 UTC"
14
+ #define DATE "built on: Mon Feb 13 14:10:40 2023 UTC"
15
15
 
16
16
  /*
17
17
  * Generate compiler_flags as an array of individual characters. This is a
@@ -11,7 +11,7 @@
11
11
  */
12
12
 
13
13
  #define PLATFORM "platform: linux64-s390x"
14
- #define DATE "built on: Sun Feb 12 18:20:16 2023 UTC"
14
+ #define DATE "built on: Mon Feb 13 14:10:52 2023 UTC"
15
15
 
16
16
  /*
17
17
  * Generate compiler_flags as an array of individual characters. This is a
@@ -11,7 +11,7 @@
11
11
  */
12
12
 
13
13
  #define PLATFORM "platform: solaris-x86-gcc"
14
- #define DATE "built on: Sun Feb 12 18:20:58 2023 UTC"
14
+ #define DATE "built on: Mon Feb 13 14:11:34 2023 UTC"
15
15
 
16
16
  /*
17
17
  * Generate compiler_flags as an array of individual characters. This is a
@@ -11,7 +11,7 @@
11
11
  */
12
12
 
13
13
  #define PLATFORM "platform: solaris-x86-gcc"
14
- #define DATE "built on: Sun Feb 12 18:21:10 2023 UTC"
14
+ #define DATE "built on: Mon Feb 13 14:11:45 2023 UTC"
15
15
 
16
16
  /*
17
17
  * Generate compiler_flags as an array of individual characters. This is a
@@ -11,7 +11,7 @@
11
11
  */
12
12
 
13
13
  #define PLATFORM "platform: solaris-x86-gcc"
14
- #define DATE "built on: Sun Feb 12 18:21:22 2023 UTC"
14
+ #define DATE "built on: Mon Feb 13 14:11:57 2023 UTC"
15
15
 
16
16
  /*
17
17
  * Generate compiler_flags as an array of individual characters. This is a
@@ -11,7 +11,7 @@
11
11
  */
12
12
 
13
13
  #define PLATFORM "platform: solaris64-x86_64-gcc"
14
- #define DATE "built on: Sun Feb 12 18:21:32 2023 UTC"
14
+ #define DATE "built on: Mon Feb 13 14:12:08 2023 UTC"
15
15
 
16
16
  /*
17
17
  * Generate compiler_flags as an array of individual characters. This is a
@@ -11,7 +11,7 @@
11
11
  */
12
12
 
13
13
  #define PLATFORM "platform: solaris64-x86_64-gcc"
14
- #define DATE "built on: Sun Feb 12 18:21:46 2023 UTC"
14
+ #define DATE "built on: Mon Feb 13 14:12:22 2023 UTC"
15
15
 
16
16
  /*
17
17
  * Generate compiler_flags as an array of individual characters. This is a
@@ -11,7 +11,7 @@
11
11
  */
12
12
 
13
13
  #define PLATFORM "platform: solaris64-x86_64-gcc"
14
- #define DATE "built on: Sun Feb 12 18:22:00 2023 UTC"
14
+ #define DATE "built on: Mon Feb 13 14:12:36 2023 UTC"
15
15
 
16
16
  /*
17
17
  * Generate compiler_flags as an array of individual characters. This is a
@@ -53,12 +53,28 @@ class V8_EXPORT BackingStore : public v8::internal::BackingStoreBase {
53
53
  */
54
54
  size_t ByteLength() const;
55
55
 
56
+ /**
57
+ * The maximum length (in bytes) that this backing store may grow to.
58
+ *
59
+ * If this backing store was created for a resizable ArrayBuffer or a growable
60
+ * SharedArrayBuffer, it is >= ByteLength(). Otherwise it is ==
61
+ * ByteLength().
62
+ */
63
+ size_t MaxByteLength() const;
64
+
56
65
  /**
57
66
  * Indicates whether the backing store was created for an ArrayBuffer or
58
67
  * a SharedArrayBuffer.
59
68
  */
60
69
  bool IsShared() const;
61
70
 
71
+ /**
72
+ * Indicates whether the backing store was created for a resizable ArrayBuffer
73
+ * or a growable SharedArrayBuffer, and thus may be resized by user JavaScript
74
+ * code.
75
+ */
76
+ bool IsResizableByUserJavaScript() const;
77
+
62
78
  /**
63
79
  * Prevent implicit instantiation of operator delete with size_t argument.
64
80
  * The size_t argument would be incorrect because ptr points to the
@@ -189,6 +205,11 @@ class V8_EXPORT ArrayBuffer : public Object {
189
205
  */
190
206
  size_t ByteLength() const;
191
207
 
208
+ /**
209
+ * Maximum length in bytes.
210
+ */
211
+ size_t MaxByteLength() const;
212
+
192
213
  /**
193
214
  * Create a new ArrayBuffer. Allocate |byte_length| bytes.
194
215
  * Allocated memory will be owned by a created ArrayBuffer and
@@ -235,6 +256,21 @@ class V8_EXPORT ArrayBuffer : public Object {
235
256
  void* data, size_t byte_length, v8::BackingStore::DeleterCallback deleter,
236
257
  void* deleter_data);
237
258
 
259
+ /**
260
+ * Returns a new resizable standalone BackingStore that is allocated using the
261
+ * array buffer allocator of the isolate. The result can be later passed to
262
+ * ArrayBuffer::New.
263
+ *
264
+ * |byte_length| must be <= |max_byte_length|.
265
+ *
266
+ * This function is usable without an isolate. Unlike |NewBackingStore| calls
267
+ * with an isolate, GCs cannot be triggered, and there are no
268
+ * retries. Allocation failure will cause the function to crash with an
269
+ * out-of-memory error.
270
+ */
271
+ static std::unique_ptr<BackingStore> NewResizableBackingStore(
272
+ size_t byte_length, size_t max_byte_length);
273
+
238
274
  /**
239
275
  * Returns true if this ArrayBuffer may be detached.
240
276
  */
@@ -251,8 +287,26 @@ class V8_EXPORT ArrayBuffer : public Object {
251
287
  * preventing JavaScript from ever accessing underlying backing store.
252
288
  * ArrayBuffer should have been externalized and must be detachable.
253
289
  */
290
+ V8_DEPRECATE_SOON(
291
+ "Use the version which takes a key parameter (passing a null handle is "
292
+ "ok).")
254
293
  void Detach();
255
294
 
295
+ /**
296
+ * Detaches this ArrayBuffer and all its views (typed arrays).
297
+ * Detaching sets the byte length of the buffer and all typed arrays to zero,
298
+ * preventing JavaScript from ever accessing underlying backing store.
299
+ * ArrayBuffer should have been externalized and must be detachable. Returns
300
+ * Nothing if the key didn't pass the [[ArrayBufferDetachKey]] check,
301
+ * Just(true) otherwise.
302
+ */
303
+ V8_WARN_UNUSED_RESULT Maybe<bool> Detach(v8::Local<v8::Value> key);
304
+
305
+ /**
306
+ * Sets the ArrayBufferDetachKey.
307
+ */
308
+ void SetDetachKey(v8::Local<v8::Value> key);
309
+
256
310
  /**
257
311
  * Get a shared pointer to the backing store of this array buffer. This
258
312
  * pointer coordinates the lifetime management of the internal storage
@@ -374,6 +428,11 @@ class V8_EXPORT SharedArrayBuffer : public Object {
374
428
  */
375
429
  size_t ByteLength() const;
376
430
 
431
+ /**
432
+ * Maximum length in bytes.
433
+ */
434
+ size_t MaxByteLength() const;
435
+
377
436
  /**
378
437
  * Create a new SharedArrayBuffer. Allocate |byte_length| bytes.
379
438
  * Allocated memory will be owned by a created SharedArrayBuffer and
@@ -7,6 +7,7 @@
7
7
 
8
8
  #include <stddef.h>
9
9
 
10
+ #include <functional>
10
11
  #include <string>
11
12
 
12
13
  #include "cppgc/common.h"
@@ -237,7 +238,8 @@ using LogEventCallback = void (*)(const char* name,
237
238
  enum class CrashKeyId {
238
239
  kIsolateAddress,
239
240
  kReadonlySpaceFirstPageAddress,
240
- kMapSpaceFirstPageAddress,
241
+ kMapSpaceFirstPageAddress V8_ENUM_DEPRECATE_SOON("Map space got removed"),
242
+ kOldSpaceFirstPageAddress,
241
243
  kCodeRangeBaseAddress,
242
244
  kCodeSpaceFirstPageAddress,
243
245
  kDumpType,
@@ -327,6 +329,10 @@ using WasmSimdEnabledCallback = bool (*)(Local<Context> context);
327
329
  // --- Callback for checking if WebAssembly exceptions are enabled ---
328
330
  using WasmExceptionsEnabledCallback = bool (*)(Local<Context> context);
329
331
 
332
+ // --- Callback for checking if WebAssembly GC is enabled ---
333
+ // If the callback returns true, it will also enable Wasm stringrefs.
334
+ using WasmGCEnabledCallback = bool (*)(Local<Context> context);
335
+
330
336
  // --- Callback for checking if the SharedArrayBuffer constructor is enabled ---
331
337
  using SharedArrayBufferConstructorEnabledCallback =
332
338
  bool (*)(Local<Context> context);
@@ -367,6 +373,13 @@ using HostImportModuleDynamicallyCallback = MaybeLocal<Promise> (*)(
367
373
  Local<Value> resource_name, Local<String> specifier,
368
374
  Local<FixedArray> import_assertions);
369
375
 
376
+ /**
377
+ * Callback for requesting a compile hint for a function from the embedder. The
378
+ * first parameter is the position of the function in source code and the second
379
+ * parameter is embedder data to be passed back.
380
+ */
381
+ using CompileHintCallback = bool (*)(int, void*);
382
+
370
383
  /**
371
384
  * HostInitializeImportMetaObjectCallback is called the first time import.meta
372
385
  * is accessed for a module. Subsequent access will reuse the same value.
@@ -7,8 +7,11 @@
7
7
 
8
8
  #include <stdint.h>
9
9
 
10
+ #include <vector>
11
+
10
12
  #include "v8-data.h" // NOLINT(build/include_directory)
11
13
  #include "v8-local-handle.h" // NOLINT(build/include_directory)
14
+ #include "v8-maybe.h" // NOLINT(build/include_directory)
12
15
  #include "v8-snapshot.h" // NOLINT(build/include_directory)
13
16
  #include "v8config.h" // NOLINT(build/include_directory)
14
17
 
@@ -163,12 +166,51 @@ class V8_EXPORT Context : public Data {
163
166
  */
164
167
  void Exit();
165
168
 
169
+ /**
170
+ * Delegate to help with Deep freezing embedder-specific objects (such as
171
+ * JSApiObjects) that can not be frozen natively.
172
+ */
173
+ class DeepFreezeDelegate {
174
+ public:
175
+ /**
176
+ * Performs embedder-specific operations to freeze the provided embedder
177
+ * object. The provided object *will* be frozen by DeepFreeze after this
178
+ * function returns, so only embedder-specific objects need to be frozen.
179
+ * This function *may not* create new JS objects or perform JS allocations.
180
+ * Any v8 objects reachable from the provided embedder object that should
181
+ * also be considered for freezing should be added to the children_out
182
+ * parameter. Returns true if the operation completed successfully.
183
+ */
184
+ virtual bool FreezeEmbedderObjectAndGetChildren(
185
+ Local<Object> obj, std::vector<Local<Object>>& children_out) = 0;
186
+ };
187
+
188
+ /**
189
+ * Attempts to recursively freeze all objects reachable from this context.
190
+ * Some objects (generators, iterators, non-const closures) can not be frozen
191
+ * and will cause this method to throw an error. An optional delegate can be
192
+ * provided to help freeze embedder-specific objects.
193
+ *
194
+ * Freezing occurs in two steps:
195
+ * 1. "Marking" where we iterate through all objects reachable by this
196
+ * context, accumulating a list of objects that need to be frozen and
197
+ * looking for objects that can't be frozen. This step is separated because
198
+ * it is more efficient when we can assume there is no garbage collection.
199
+ * 2. "Freezing" where we go through the list of objects and freezing them.
200
+ * This effectively requires copying them so it may trigger garbage
201
+ * collection.
202
+ */
203
+ Maybe<void> DeepFreeze(DeepFreezeDelegate* delegate = nullptr);
204
+
166
205
  /** Returns the isolate associated with a current context. */
167
206
  Isolate* GetIsolate();
168
207
 
169
208
  /** Returns the microtask queue associated with a current context. */
170
209
  MicrotaskQueue* GetMicrotaskQueue();
171
210
 
211
+ /** Sets the microtask queue associated with the current context. */
212
+ void SetMicrotaskQueue(MicrotaskQueue* queue);
213
+
172
214
  /**
173
215
  * The field at kDebugIdIndex used to be reserved for the inspector.
174
216
  * It now serves no purpose.
@@ -362,13 +404,18 @@ Local<Value> Context::GetEmbedderData(int index) {
362
404
  #ifdef V8_COMPRESS_POINTERS
363
405
  // We read the full pointer value and then decompress it in order to avoid
364
406
  // dealing with potential endiannes issues.
365
- value =
366
- I::DecompressTaggedAnyField(embedder_data, static_cast<uint32_t>(value));
407
+ value = I::DecompressTaggedField(embedder_data, static_cast<uint32_t>(value));
367
408
  #endif
409
+
410
+ #ifdef V8_ENABLE_CONSERVATIVE_STACK_SCANNING
411
+ return Local<Value>(reinterpret_cast<Value*>(value));
412
+ #else
368
413
  internal::Isolate* isolate = internal::IsolateFromNeverReadOnlySpaceObject(
369
414
  *reinterpret_cast<A*>(this));
370
415
  A* result = HandleScope::CreateHandle(isolate, value);
371
416
  return Local<Value>(reinterpret_cast<Value*>(result));
417
+ #endif
418
+
372
419
  #else
373
420
  return SlowGetEmbedderData(index);
374
421
  #endif
@@ -378,7 +425,7 @@ void* Context::GetAlignedPointerFromEmbedderData(int index) {
378
425
  #if !defined(V8_ENABLE_CHECKS)
379
426
  using A = internal::Address;
380
427
  using I = internal::Internals;
381
- A ctx = *reinterpret_cast<const A*>(this);
428
+ A ctx = internal::ValueHelper::ValueAsAddress(this);
382
429
  A embedder_data =
383
430
  I::ReadTaggedPointerField(ctx, I::kNativeContextEmbedderDataOffset);
384
431
  int value_offset = I::kEmbedderDataArrayHeaderSize +
@@ -53,7 +53,7 @@ class V8_EXPORT Data {
53
53
  bool IsContext() const;
54
54
 
55
55
  private:
56
- Data();
56
+ Data() = delete;
57
57
  };
58
58
 
59
59
  /**
@@ -5,27 +5,14 @@
5
5
  #ifndef INCLUDE_V8_EMBEDDER_HEAP_H_
6
6
  #define INCLUDE_V8_EMBEDDER_HEAP_H_
7
7
 
8
- #include <stddef.h>
9
- #include <stdint.h>
10
-
11
- #include <utility>
12
- #include <vector>
13
-
14
- #include "cppgc/common.h"
15
- #include "v8-local-handle.h" // NOLINT(build/include_directory)
16
8
  #include "v8-traced-handle.h" // NOLINT(build/include_directory)
17
9
  #include "v8config.h" // NOLINT(build/include_directory)
18
10
 
19
11
  namespace v8 {
20
12
 
21
- class Data;
22
13
  class Isolate;
23
14
  class Value;
24
15
 
25
- namespace internal {
26
- class LocalEmbedderHeapTracer;
27
- } // namespace internal
28
-
29
16
  /**
30
17
  * Handler for embedder roots on non-unified heap garbage collections.
31
18
  */
@@ -62,162 +49,6 @@ class V8_EXPORT EmbedderRootsHandler {
62
49
  virtual void ResetRoot(const v8::TracedReference<v8::Value>& handle) = 0;
63
50
  };
64
51
 
65
- /**
66
- * Interface for tracing through the embedder heap. During a V8 garbage
67
- * collection, V8 collects hidden fields of all potential wrappers, and at the
68
- * end of its marking phase iterates the collection and asks the embedder to
69
- * trace through its heap and use reporter to report each JavaScript object
70
- * reachable from any of the given wrappers.
71
- */
72
- class V8_EXPORT
73
- // GCC doesn't like combining __attribute__(()) with [[deprecated]].
74
- #ifdef __clang__
75
- V8_DEPRECATE_SOON("Use CppHeap when working with v8::TracedReference.")
76
- #endif // __clang__
77
- EmbedderHeapTracer {
78
- public:
79
- using EmbedderStackState = cppgc::EmbedderStackState;
80
-
81
- enum TraceFlags : uint64_t {
82
- kNoFlags = 0,
83
- kReduceMemory = 1 << 0,
84
- kForced = 1 << 2,
85
- };
86
-
87
- /**
88
- * Interface for iterating through |TracedReference| handles.
89
- */
90
- class V8_EXPORT TracedGlobalHandleVisitor {
91
- public:
92
- virtual ~TracedGlobalHandleVisitor() = default;
93
- virtual void VisitTracedReference(const TracedReference<Value>& handle) {}
94
- };
95
-
96
- /**
97
- * Summary of a garbage collection cycle. See |TraceEpilogue| on how the
98
- * summary is reported.
99
- */
100
- struct TraceSummary {
101
- /**
102
- * Time spent managing the retained memory in milliseconds. This can e.g.
103
- * include the time tracing through objects in the embedder.
104
- */
105
- double time = 0.0;
106
-
107
- /**
108
- * Memory retained by the embedder through the |EmbedderHeapTracer|
109
- * mechanism in bytes.
110
- */
111
- size_t allocated_size = 0;
112
- };
113
-
114
- virtual ~EmbedderHeapTracer() = default;
115
-
116
- /**
117
- * Iterates all |TracedReference| handles created for the |v8::Isolate| the
118
- * tracer is attached to.
119
- */
120
- void IterateTracedGlobalHandles(TracedGlobalHandleVisitor* visitor);
121
-
122
- /**
123
- * Called by the embedder to set the start of the stack which is e.g. used by
124
- * V8 to determine whether handles are used from stack or heap.
125
- */
126
- void SetStackStart(void* stack_start);
127
-
128
- /**
129
- * Called by v8 to register internal fields of found wrappers.
130
- *
131
- * The embedder is expected to store them somewhere and trace reachable
132
- * wrappers from them when called through |AdvanceTracing|.
133
- */
134
- virtual void RegisterV8References(
135
- const std::vector<std::pair<void*, void*>>& embedder_fields) = 0;
136
-
137
- void RegisterEmbedderReference(const BasicTracedReference<v8::Data>& ref);
138
-
139
- /**
140
- * Called at the beginning of a GC cycle.
141
- */
142
- virtual void TracePrologue(TraceFlags flags) {}
143
-
144
- /**
145
- * Called to advance tracing in the embedder.
146
- *
147
- * The embedder is expected to trace its heap starting from wrappers reported
148
- * by RegisterV8References method, and report back all reachable wrappers.
149
- * Furthermore, the embedder is expected to stop tracing by the given
150
- * deadline. A deadline of infinity means that tracing should be finished.
151
- *
152
- * Returns |true| if tracing is done, and false otherwise.
153
- */
154
- virtual bool AdvanceTracing(double deadline_in_ms) = 0;
155
-
156
- /*
157
- * Returns true if there no more tracing work to be done (see AdvanceTracing)
158
- * and false otherwise.
159
- */
160
- virtual bool IsTracingDone() = 0;
161
-
162
- /**
163
- * Called at the end of a GC cycle.
164
- *
165
- * Note that allocation is *not* allowed within |TraceEpilogue|. Can be
166
- * overriden to fill a |TraceSummary| that is used by V8 to schedule future
167
- * garbage collections.
168
- */
169
- virtual void TraceEpilogue(TraceSummary* trace_summary) {}
170
-
171
- /**
172
- * Called upon entering the final marking pause. No more incremental marking
173
- * steps will follow this call.
174
- */
175
- virtual void EnterFinalPause(EmbedderStackState stack_state) = 0;
176
-
177
- /*
178
- * Called by the embedder to request immediate finalization of the currently
179
- * running tracing phase that has been started with TracePrologue and not
180
- * yet finished with TraceEpilogue.
181
- *
182
- * Will be a noop when currently not in tracing.
183
- *
184
- * This is an experimental feature.
185
- */
186
- void FinalizeTracing();
187
-
188
- /**
189
- * See documentation on EmbedderRootsHandler.
190
- */
191
- virtual bool IsRootForNonTracingGC(
192
- const v8::TracedReference<v8::Value>& handle);
193
-
194
- /**
195
- * See documentation on EmbedderRootsHandler.
196
- */
197
- virtual void ResetHandleInNonTracingGC(
198
- const v8::TracedReference<v8::Value>& handle);
199
-
200
- /*
201
- * Called by the embedder to signal newly allocated or freed memory. Not bound
202
- * to tracing phases. Embedders should trade off when increments are reported
203
- * as V8 may consult global heuristics on whether to trigger garbage
204
- * collection on this change.
205
- */
206
- void IncreaseAllocatedSize(size_t bytes);
207
- void DecreaseAllocatedSize(size_t bytes);
208
-
209
- /*
210
- * Returns the v8::Isolate this tracer is attached too and |nullptr| if it
211
- * is not attached to any v8::Isolate.
212
- */
213
- v8::Isolate* isolate() const { return v8_isolate_; }
214
-
215
- protected:
216
- v8::Isolate* v8_isolate_ = nullptr;
217
-
218
- friend class internal::LocalEmbedderHeapTracer;
219
- };
220
-
221
52
  } // namespace v8
222
53
 
223
54
  #endif // INCLUDE_V8_EMBEDDER_HEAP_H_