node-linux-arm64 17.0.0 → 17.3.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 (161) hide show
  1. package/CHANGELOG.md +622 -178
  2. package/LICENSE +192 -94
  3. package/README.md +263 -255
  4. package/bin/node +0 -0
  5. package/include/node/common.gypi +5 -0
  6. package/include/node/config.gypi +6 -2
  7. package/include/node/js_native_api.h +11 -0
  8. package/include/node/node_version.h +1 -1
  9. package/include/node/openssl/archs/BSD-x86/asm/crypto/buildinf.h +1 -1
  10. package/include/node/openssl/archs/BSD-x86/asm/include/openssl/opensslv.h +5 -5
  11. package/include/node/openssl/archs/BSD-x86/asm_avx2/crypto/buildinf.h +1 -1
  12. package/include/node/openssl/archs/BSD-x86/asm_avx2/include/openssl/opensslv.h +5 -5
  13. package/include/node/openssl/archs/BSD-x86/no-asm/crypto/buildinf.h +1 -1
  14. package/include/node/openssl/archs/BSD-x86/no-asm/include/openssl/opensslv.h +5 -5
  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/include/openssl/opensslv.h +5 -5
  17. package/include/node/openssl/archs/BSD-x86_64/asm_avx2/crypto/buildinf.h +1 -1
  18. package/include/node/openssl/archs/BSD-x86_64/asm_avx2/include/openssl/opensslv.h +5 -5
  19. package/include/node/openssl/archs/BSD-x86_64/no-asm/crypto/buildinf.h +1 -1
  20. package/include/node/openssl/archs/BSD-x86_64/no-asm/include/openssl/opensslv.h +5 -5
  21. package/include/node/openssl/archs/VC-WIN32/asm/crypto/buildinf.h +1 -1
  22. package/include/node/openssl/archs/VC-WIN32/asm/include/openssl/opensslv.h +5 -5
  23. package/include/node/openssl/archs/VC-WIN32/asm_avx2/crypto/buildinf.h +1 -1
  24. package/include/node/openssl/archs/VC-WIN32/asm_avx2/include/openssl/opensslv.h +5 -5
  25. package/include/node/openssl/archs/VC-WIN32/no-asm/crypto/buildinf.h +1 -1
  26. package/include/node/openssl/archs/VC-WIN32/no-asm/include/openssl/opensslv.h +5 -5
  27. package/include/node/openssl/archs/VC-WIN64-ARM/no-asm/crypto/buildinf.h +1 -1
  28. package/include/node/openssl/archs/VC-WIN64-ARM/no-asm/include/openssl/opensslv.h +5 -5
  29. package/include/node/openssl/archs/VC-WIN64A/asm/crypto/buildinf.h +1 -1
  30. package/include/node/openssl/archs/VC-WIN64A/asm/include/openssl/opensslv.h +5 -5
  31. package/include/node/openssl/archs/VC-WIN64A/asm_avx2/crypto/buildinf.h +1 -1
  32. package/include/node/openssl/archs/VC-WIN64A/asm_avx2/include/openssl/opensslv.h +5 -5
  33. package/include/node/openssl/archs/VC-WIN64A/no-asm/crypto/buildinf.h +1 -1
  34. package/include/node/openssl/archs/VC-WIN64A/no-asm/include/openssl/opensslv.h +5 -5
  35. package/include/node/openssl/archs/aix-gcc/asm/crypto/buildinf.h +1 -1
  36. package/include/node/openssl/archs/aix-gcc/asm/include/openssl/opensslv.h +5 -5
  37. package/include/node/openssl/archs/aix-gcc/asm_avx2/crypto/buildinf.h +1 -1
  38. package/include/node/openssl/archs/aix-gcc/asm_avx2/include/openssl/opensslv.h +5 -5
  39. package/include/node/openssl/archs/aix-gcc/no-asm/crypto/buildinf.h +1 -1
  40. package/include/node/openssl/archs/aix-gcc/no-asm/include/openssl/opensslv.h +5 -5
  41. package/include/node/openssl/archs/aix64-gcc-as/asm/crypto/buildinf.h +1 -1
  42. package/include/node/openssl/archs/aix64-gcc-as/asm/include/openssl/opensslv.h +5 -5
  43. package/include/node/openssl/archs/aix64-gcc-as/asm_avx2/crypto/buildinf.h +1 -1
  44. package/include/node/openssl/archs/aix64-gcc-as/asm_avx2/include/openssl/opensslv.h +5 -5
  45. package/include/node/openssl/archs/aix64-gcc-as/no-asm/crypto/buildinf.h +1 -1
  46. package/include/node/openssl/archs/aix64-gcc-as/no-asm/include/openssl/opensslv.h +5 -5
  47. package/include/node/openssl/archs/darwin-i386-cc/asm/crypto/buildinf.h +1 -1
  48. package/include/node/openssl/archs/darwin-i386-cc/asm/include/openssl/opensslv.h +5 -5
  49. package/include/node/openssl/archs/darwin-i386-cc/asm_avx2/crypto/buildinf.h +1 -1
  50. package/include/node/openssl/archs/darwin-i386-cc/asm_avx2/include/openssl/opensslv.h +5 -5
  51. package/include/node/openssl/archs/darwin-i386-cc/no-asm/crypto/buildinf.h +1 -1
  52. package/include/node/openssl/archs/darwin-i386-cc/no-asm/include/openssl/opensslv.h +5 -5
  53. package/include/node/openssl/archs/darwin64-arm64-cc/asm/crypto/buildinf.h +1 -1
  54. package/include/node/openssl/archs/darwin64-arm64-cc/asm/include/openssl/opensslv.h +5 -5
  55. package/include/node/openssl/archs/darwin64-arm64-cc/asm_avx2/crypto/buildinf.h +1 -1
  56. package/include/node/openssl/archs/darwin64-arm64-cc/asm_avx2/include/openssl/opensslv.h +5 -5
  57. package/include/node/openssl/archs/darwin64-arm64-cc/no-asm/crypto/buildinf.h +1 -1
  58. package/include/node/openssl/archs/darwin64-arm64-cc/no-asm/include/openssl/opensslv.h +5 -5
  59. package/include/node/openssl/archs/darwin64-x86_64-cc/asm/crypto/buildinf.h +1 -1
  60. package/include/node/openssl/archs/darwin64-x86_64-cc/asm/include/openssl/opensslv.h +5 -5
  61. package/include/node/openssl/archs/darwin64-x86_64-cc/asm_avx2/crypto/buildinf.h +1 -1
  62. package/include/node/openssl/archs/darwin64-x86_64-cc/asm_avx2/include/openssl/opensslv.h +5 -5
  63. package/include/node/openssl/archs/darwin64-x86_64-cc/no-asm/crypto/buildinf.h +1 -1
  64. package/include/node/openssl/archs/darwin64-x86_64-cc/no-asm/include/openssl/opensslv.h +5 -5
  65. package/include/node/openssl/archs/linux-aarch64/asm/crypto/buildinf.h +1 -1
  66. package/include/node/openssl/archs/linux-aarch64/asm/include/openssl/opensslv.h +5 -5
  67. package/include/node/openssl/archs/linux-aarch64/asm_avx2/crypto/buildinf.h +1 -1
  68. package/include/node/openssl/archs/linux-aarch64/asm_avx2/include/openssl/opensslv.h +5 -5
  69. package/include/node/openssl/archs/linux-aarch64/no-asm/crypto/buildinf.h +1 -1
  70. package/include/node/openssl/archs/linux-aarch64/no-asm/include/openssl/opensslv.h +5 -5
  71. package/include/node/openssl/archs/linux-armv4/asm/crypto/buildinf.h +1 -1
  72. package/include/node/openssl/archs/linux-armv4/asm/include/openssl/opensslv.h +5 -5
  73. package/include/node/openssl/archs/linux-armv4/asm_avx2/crypto/buildinf.h +1 -1
  74. package/include/node/openssl/archs/linux-armv4/asm_avx2/include/openssl/opensslv.h +5 -5
  75. package/include/node/openssl/archs/linux-armv4/no-asm/crypto/buildinf.h +1 -1
  76. package/include/node/openssl/archs/linux-armv4/no-asm/include/openssl/opensslv.h +5 -5
  77. package/include/node/openssl/archs/linux-elf/asm/crypto/buildinf.h +1 -1
  78. package/include/node/openssl/archs/linux-elf/asm/include/openssl/opensslv.h +5 -5
  79. package/include/node/openssl/archs/linux-elf/asm_avx2/crypto/buildinf.h +1 -1
  80. package/include/node/openssl/archs/linux-elf/asm_avx2/include/openssl/opensslv.h +5 -5
  81. package/include/node/openssl/archs/linux-elf/no-asm/crypto/buildinf.h +1 -1
  82. package/include/node/openssl/archs/linux-elf/no-asm/include/openssl/opensslv.h +5 -5
  83. package/include/node/openssl/archs/linux-ppc/asm/crypto/buildinf.h +1 -1
  84. package/include/node/openssl/archs/linux-ppc/asm/include/openssl/opensslv.h +5 -5
  85. package/include/node/openssl/archs/linux-ppc/asm_avx2/crypto/buildinf.h +1 -1
  86. package/include/node/openssl/archs/linux-ppc/asm_avx2/include/openssl/opensslv.h +5 -5
  87. package/include/node/openssl/archs/linux-ppc/no-asm/crypto/buildinf.h +1 -1
  88. package/include/node/openssl/archs/linux-ppc/no-asm/include/openssl/opensslv.h +5 -5
  89. package/include/node/openssl/archs/linux-ppc64/asm/crypto/buildinf.h +1 -1
  90. package/include/node/openssl/archs/linux-ppc64/asm/include/openssl/opensslv.h +5 -5
  91. package/include/node/openssl/archs/linux-ppc64/asm_avx2/crypto/buildinf.h +1 -1
  92. package/include/node/openssl/archs/linux-ppc64/asm_avx2/include/openssl/opensslv.h +5 -5
  93. package/include/node/openssl/archs/linux-ppc64/no-asm/crypto/buildinf.h +1 -1
  94. package/include/node/openssl/archs/linux-ppc64/no-asm/include/openssl/opensslv.h +5 -5
  95. package/include/node/openssl/archs/linux-ppc64le/asm/crypto/buildinf.h +1 -1
  96. package/include/node/openssl/archs/linux-ppc64le/asm/include/openssl/opensslv.h +5 -5
  97. package/include/node/openssl/archs/linux-ppc64le/asm_avx2/crypto/buildinf.h +1 -1
  98. package/include/node/openssl/archs/linux-ppc64le/asm_avx2/include/openssl/opensslv.h +5 -5
  99. package/include/node/openssl/archs/linux-ppc64le/no-asm/crypto/buildinf.h +1 -1
  100. package/include/node/openssl/archs/linux-ppc64le/no-asm/include/openssl/opensslv.h +5 -5
  101. package/include/node/openssl/archs/linux-x32/asm/crypto/buildinf.h +1 -1
  102. package/include/node/openssl/archs/linux-x32/asm/include/openssl/opensslv.h +5 -5
  103. package/include/node/openssl/archs/linux-x32/asm_avx2/crypto/buildinf.h +1 -1
  104. package/include/node/openssl/archs/linux-x32/asm_avx2/include/openssl/opensslv.h +5 -5
  105. package/include/node/openssl/archs/linux-x32/no-asm/crypto/buildinf.h +1 -1
  106. package/include/node/openssl/archs/linux-x32/no-asm/include/openssl/opensslv.h +5 -5
  107. package/include/node/openssl/archs/linux-x86_64/asm/crypto/buildinf.h +1 -1
  108. package/include/node/openssl/archs/linux-x86_64/asm/include/openssl/opensslv.h +5 -5
  109. package/include/node/openssl/archs/linux-x86_64/asm_avx2/crypto/buildinf.h +1 -1
  110. package/include/node/openssl/archs/linux-x86_64/asm_avx2/include/openssl/opensslv.h +5 -5
  111. package/include/node/openssl/archs/linux-x86_64/no-asm/crypto/buildinf.h +1 -1
  112. package/include/node/openssl/archs/linux-x86_64/no-asm/include/openssl/opensslv.h +5 -5
  113. package/include/node/openssl/archs/linux32-s390x/asm/crypto/buildinf.h +1 -1
  114. package/include/node/openssl/archs/linux32-s390x/asm/include/openssl/opensslv.h +5 -5
  115. package/include/node/openssl/archs/linux32-s390x/asm_avx2/crypto/buildinf.h +1 -1
  116. package/include/node/openssl/archs/linux32-s390x/asm_avx2/include/openssl/opensslv.h +5 -5
  117. package/include/node/openssl/archs/linux32-s390x/no-asm/crypto/buildinf.h +1 -1
  118. package/include/node/openssl/archs/linux32-s390x/no-asm/include/openssl/opensslv.h +5 -5
  119. package/include/node/openssl/archs/linux64-mips64/asm/crypto/buildinf.h +1 -1
  120. package/include/node/openssl/archs/linux64-mips64/asm/include/openssl/opensslv.h +5 -5
  121. package/include/node/openssl/archs/linux64-mips64/asm_avx2/crypto/buildinf.h +1 -1
  122. package/include/node/openssl/archs/linux64-mips64/asm_avx2/include/openssl/opensslv.h +5 -5
  123. package/include/node/openssl/archs/linux64-mips64/no-asm/crypto/buildinf.h +1 -1
  124. package/include/node/openssl/archs/linux64-mips64/no-asm/include/openssl/opensslv.h +5 -5
  125. package/include/node/openssl/archs/linux64-riscv64/no-asm/crypto/buildinf.h +1 -1
  126. package/include/node/openssl/archs/linux64-riscv64/no-asm/include/openssl/opensslv.h +5 -5
  127. package/include/node/openssl/archs/linux64-s390x/asm/crypto/buildinf.h +1 -1
  128. package/include/node/openssl/archs/linux64-s390x/asm/include/openssl/opensslv.h +5 -5
  129. package/include/node/openssl/archs/linux64-s390x/asm_avx2/crypto/buildinf.h +1 -1
  130. package/include/node/openssl/archs/linux64-s390x/asm_avx2/include/openssl/opensslv.h +5 -5
  131. package/include/node/openssl/archs/linux64-s390x/no-asm/crypto/buildinf.h +1 -1
  132. package/include/node/openssl/archs/linux64-s390x/no-asm/include/openssl/opensslv.h +5 -5
  133. package/include/node/openssl/archs/solaris-x86-gcc/asm/crypto/buildinf.h +1 -1
  134. package/include/node/openssl/archs/solaris-x86-gcc/asm/include/openssl/opensslv.h +5 -5
  135. package/include/node/openssl/archs/solaris-x86-gcc/asm_avx2/crypto/buildinf.h +1 -1
  136. package/include/node/openssl/archs/solaris-x86-gcc/asm_avx2/include/openssl/opensslv.h +5 -5
  137. package/include/node/openssl/archs/solaris-x86-gcc/no-asm/crypto/buildinf.h +1 -1
  138. package/include/node/openssl/archs/solaris-x86-gcc/no-asm/include/openssl/opensslv.h +5 -5
  139. package/include/node/openssl/archs/solaris64-x86_64-gcc/asm/crypto/buildinf.h +1 -1
  140. package/include/node/openssl/archs/solaris64-x86_64-gcc/asm/include/openssl/opensslv.h +5 -5
  141. package/include/node/openssl/archs/solaris64-x86_64-gcc/asm_avx2/crypto/buildinf.h +1 -1
  142. package/include/node/openssl/archs/solaris64-x86_64-gcc/asm_avx2/include/openssl/opensslv.h +5 -5
  143. package/include/node/openssl/archs/solaris64-x86_64-gcc/no-asm/crypto/buildinf.h +1 -1
  144. package/include/node/openssl/archs/solaris64-x86_64-gcc/no-asm/include/openssl/opensslv.h +5 -5
  145. package/include/node/openssl/core.h +1 -1
  146. package/include/node/openssl/cryptoerr.h +1 -0
  147. package/include/node/openssl/httperr.h +1 -0
  148. package/include/node/openssl/macros.h +1 -1
  149. package/include/node/v8-callbacks.h +377 -0
  150. package/include/node/v8-embedder-heap.h +238 -0
  151. package/include/node/v8-forward.h +81 -0
  152. package/include/node/v8-function-callback.h +475 -0
  153. package/include/node/v8-initialization.h +25 -9
  154. package/include/node/v8-internal.h +9 -20
  155. package/include/node/v8-isolate.h +3 -0
  156. package/include/node/v8-locker.h +7 -2
  157. package/include/node/v8-message.h +4 -1
  158. package/include/node/v8-template.h +1 -0
  159. package/include/node/v8-version.h +3 -3
  160. package/include/node/v8-weak-callback-info.h +73 -0
  161. package/package.json +1 -1
@@ -0,0 +1,475 @@
1
+ // Copyright 2021 the V8 project authors. All rights reserved.
2
+ // Use of this source code is governed by a BSD-style license that can be
3
+ // found in the LICENSE file.
4
+
5
+ #ifndef INCLUDE_V8_FUNCTION_CALLBACK_H_
6
+ #define INCLUDE_V8_FUNCTION_CALLBACK_H_
7
+
8
+ #include "v8-local-handle.h" // NOLINT(build/include_directory)
9
+ #include "v8-primitive.h" // NOLINT(build/include_directory)
10
+ #include "v8config.h" // NOLINT(build/include_directory)
11
+
12
+ namespace v8 {
13
+
14
+ template <typename T>
15
+ class BasicTracedReference;
16
+ template <typename T>
17
+ class Global;
18
+ class Object;
19
+ class Value;
20
+
21
+ namespace internal {
22
+ class FunctionCallbackArguments;
23
+ class PropertyCallbackArguments;
24
+ } // namespace internal
25
+
26
+ namespace debug {
27
+ class ConsoleCallArguments;
28
+ } // namespace debug
29
+
30
+ template <typename T>
31
+ class ReturnValue {
32
+ public:
33
+ template <class S>
34
+ V8_INLINE ReturnValue(const ReturnValue<S>& that) : value_(that.value_) {
35
+ static_assert(std::is_base_of<T, S>::value, "type check");
36
+ }
37
+ // Local setters
38
+ template <typename S>
39
+ V8_INLINE void Set(const Global<S>& handle);
40
+ template <typename S>
41
+ V8_INLINE void Set(const BasicTracedReference<S>& handle);
42
+ template <typename S>
43
+ V8_INLINE void Set(const Local<S> handle);
44
+ // Fast primitive setters
45
+ V8_INLINE void Set(bool value);
46
+ V8_INLINE void Set(double i);
47
+ V8_INLINE void Set(int32_t i);
48
+ V8_INLINE void Set(uint32_t i);
49
+ // Fast JS primitive setters
50
+ V8_INLINE void SetNull();
51
+ V8_INLINE void SetUndefined();
52
+ V8_INLINE void SetEmptyString();
53
+ // Convenience getter for Isolate
54
+ V8_INLINE Isolate* GetIsolate() const;
55
+
56
+ // Pointer setter: Uncompilable to prevent inadvertent misuse.
57
+ template <typename S>
58
+ V8_INLINE void Set(S* whatever);
59
+
60
+ // Getter. Creates a new Local<> so it comes with a certain performance
61
+ // hit. If the ReturnValue was not yet set, this will return the undefined
62
+ // value.
63
+ V8_INLINE Local<Value> Get() const;
64
+
65
+ private:
66
+ template <class F>
67
+ friend class ReturnValue;
68
+ template <class F>
69
+ friend class FunctionCallbackInfo;
70
+ template <class F>
71
+ friend class PropertyCallbackInfo;
72
+ template <class F, class G, class H>
73
+ friend class PersistentValueMapBase;
74
+ V8_INLINE void SetInternal(internal::Address value) { *value_ = value; }
75
+ V8_INLINE internal::Address GetDefaultValue();
76
+ V8_INLINE explicit ReturnValue(internal::Address* slot);
77
+ internal::Address* value_;
78
+ };
79
+
80
+ /**
81
+ * The argument information given to function call callbacks. This
82
+ * class provides access to information about the context of the call,
83
+ * including the receiver, the number and values of arguments, and
84
+ * the holder of the function.
85
+ */
86
+ template <typename T>
87
+ class FunctionCallbackInfo {
88
+ public:
89
+ /** The number of available arguments. */
90
+ V8_INLINE int Length() const;
91
+ /**
92
+ * Accessor for the available arguments. Returns `undefined` if the index
93
+ * is out of bounds.
94
+ */
95
+ V8_INLINE Local<Value> operator[](int i) const;
96
+ /** Returns the receiver. This corresponds to the "this" value. */
97
+ V8_INLINE Local<Object> This() const;
98
+ /**
99
+ * If the callback was created without a Signature, this is the same
100
+ * value as This(). If there is a signature, and the signature didn't match
101
+ * This() but one of its hidden prototypes, this will be the respective
102
+ * hidden prototype.
103
+ *
104
+ * Note that this is not the prototype of This() on which the accessor
105
+ * referencing this callback was found (which in V8 internally is often
106
+ * referred to as holder [sic]).
107
+ */
108
+ V8_INLINE Local<Object> Holder() const;
109
+ /** For construct calls, this returns the "new.target" value. */
110
+ V8_INLINE Local<Value> NewTarget() const;
111
+ /** Indicates whether this is a regular call or a construct call. */
112
+ V8_INLINE bool IsConstructCall() const;
113
+ /** The data argument specified when creating the callback. */
114
+ V8_INLINE Local<Value> Data() const;
115
+ /** The current Isolate. */
116
+ V8_INLINE Isolate* GetIsolate() const;
117
+ /** The ReturnValue for the call. */
118
+ V8_INLINE ReturnValue<T> GetReturnValue() const;
119
+ // This shouldn't be public, but the arm compiler needs it.
120
+ static const int kArgsLength = 6;
121
+
122
+ protected:
123
+ friend class internal::FunctionCallbackArguments;
124
+ friend class internal::CustomArguments<FunctionCallbackInfo>;
125
+ friend class debug::ConsoleCallArguments;
126
+ static const int kHolderIndex = 0;
127
+ static const int kIsolateIndex = 1;
128
+ static const int kReturnValueDefaultValueIndex = 2;
129
+ static const int kReturnValueIndex = 3;
130
+ static const int kDataIndex = 4;
131
+ static const int kNewTargetIndex = 5;
132
+
133
+ V8_INLINE FunctionCallbackInfo(internal::Address* implicit_args,
134
+ internal::Address* values, int length);
135
+ internal::Address* implicit_args_;
136
+ internal::Address* values_;
137
+ int length_;
138
+ };
139
+
140
+ /**
141
+ * The information passed to a property callback about the context
142
+ * of the property access.
143
+ */
144
+ template <typename T>
145
+ class PropertyCallbackInfo {
146
+ public:
147
+ /**
148
+ * \return The isolate of the property access.
149
+ */
150
+ V8_INLINE Isolate* GetIsolate() const;
151
+
152
+ /**
153
+ * \return The data set in the configuration, i.e., in
154
+ * `NamedPropertyHandlerConfiguration` or
155
+ * `IndexedPropertyHandlerConfiguration.`
156
+ */
157
+ V8_INLINE Local<Value> Data() const;
158
+
159
+ /**
160
+ * \return The receiver. In many cases, this is the object on which the
161
+ * property access was intercepted. When using
162
+ * `Reflect.get`, `Function.prototype.call`, or similar functions, it is the
163
+ * object passed in as receiver or thisArg.
164
+ *
165
+ * \code
166
+ * void GetterCallback(Local<Name> name,
167
+ * const v8::PropertyCallbackInfo<v8::Value>& info) {
168
+ * auto context = info.GetIsolate()->GetCurrentContext();
169
+ *
170
+ * v8::Local<v8::Value> a_this =
171
+ * info.This()
172
+ * ->GetRealNamedProperty(context, v8_str("a"))
173
+ * .ToLocalChecked();
174
+ * v8::Local<v8::Value> a_holder =
175
+ * info.Holder()
176
+ * ->GetRealNamedProperty(context, v8_str("a"))
177
+ * .ToLocalChecked();
178
+ *
179
+ * CHECK(v8_str("r")->Equals(context, a_this).FromJust());
180
+ * CHECK(v8_str("obj")->Equals(context, a_holder).FromJust());
181
+ *
182
+ * info.GetReturnValue().Set(name);
183
+ * }
184
+ *
185
+ * v8::Local<v8::FunctionTemplate> templ =
186
+ * v8::FunctionTemplate::New(isolate);
187
+ * templ->InstanceTemplate()->SetHandler(
188
+ * v8::NamedPropertyHandlerConfiguration(GetterCallback));
189
+ * LocalContext env;
190
+ * env->Global()
191
+ * ->Set(env.local(), v8_str("obj"), templ->GetFunction(env.local())
192
+ * .ToLocalChecked()
193
+ * ->NewInstance(env.local())
194
+ * .ToLocalChecked())
195
+ * .FromJust();
196
+ *
197
+ * CompileRun("obj.a = 'obj'; var r = {a: 'r'}; Reflect.get(obj, 'x', r)");
198
+ * \endcode
199
+ */
200
+ V8_INLINE Local<Object> This() const;
201
+
202
+ /**
203
+ * \return The object in the prototype chain of the receiver that has the
204
+ * interceptor. Suppose you have `x` and its prototype is `y`, and `y`
205
+ * has an interceptor. Then `info.This()` is `x` and `info.Holder()` is `y`.
206
+ * The Holder() could be a hidden object (the global object, rather
207
+ * than the global proxy).
208
+ *
209
+ * \note For security reasons, do not pass the object back into the runtime.
210
+ */
211
+ V8_INLINE Local<Object> Holder() const;
212
+
213
+ /**
214
+ * \return The return value of the callback.
215
+ * Can be changed by calling Set().
216
+ * \code
217
+ * info.GetReturnValue().Set(...)
218
+ * \endcode
219
+ *
220
+ */
221
+ V8_INLINE ReturnValue<T> GetReturnValue() const;
222
+
223
+ /**
224
+ * \return True if the intercepted function should throw if an error occurs.
225
+ * Usually, `true` corresponds to `'use strict'`.
226
+ *
227
+ * \note Always `false` when intercepting `Reflect.set()`
228
+ * independent of the language mode.
229
+ */
230
+ V8_INLINE bool ShouldThrowOnError() const;
231
+
232
+ // This shouldn't be public, but the arm compiler needs it.
233
+ static const int kArgsLength = 7;
234
+
235
+ protected:
236
+ friend class MacroAssembler;
237
+ friend class internal::PropertyCallbackArguments;
238
+ friend class internal::CustomArguments<PropertyCallbackInfo>;
239
+ static const int kShouldThrowOnErrorIndex = 0;
240
+ static const int kHolderIndex = 1;
241
+ static const int kIsolateIndex = 2;
242
+ static const int kReturnValueDefaultValueIndex = 3;
243
+ static const int kReturnValueIndex = 4;
244
+ static const int kDataIndex = 5;
245
+ static const int kThisIndex = 6;
246
+
247
+ V8_INLINE PropertyCallbackInfo(internal::Address* args) : args_(args) {}
248
+ internal::Address* args_;
249
+ };
250
+
251
+ using FunctionCallback = void (*)(const FunctionCallbackInfo<Value>& info);
252
+
253
+ // --- Implementation ---
254
+
255
+ template <typename T>
256
+ ReturnValue<T>::ReturnValue(internal::Address* slot) : value_(slot) {}
257
+
258
+ template <typename T>
259
+ template <typename S>
260
+ void ReturnValue<T>::Set(const Global<S>& handle) {
261
+ static_assert(std::is_base_of<T, S>::value, "type check");
262
+ if (V8_UNLIKELY(handle.IsEmpty())) {
263
+ *value_ = GetDefaultValue();
264
+ } else {
265
+ *value_ = *reinterpret_cast<internal::Address*>(*handle);
266
+ }
267
+ }
268
+
269
+ template <typename T>
270
+ template <typename S>
271
+ void ReturnValue<T>::Set(const BasicTracedReference<S>& handle) {
272
+ static_assert(std::is_base_of<T, S>::value, "type check");
273
+ if (V8_UNLIKELY(handle.IsEmpty())) {
274
+ *value_ = GetDefaultValue();
275
+ } else {
276
+ *value_ = *reinterpret_cast<internal::Address*>(handle.val_);
277
+ }
278
+ }
279
+
280
+ template <typename T>
281
+ template <typename S>
282
+ void ReturnValue<T>::Set(const Local<S> handle) {
283
+ static_assert(std::is_void<T>::value || std::is_base_of<T, S>::value,
284
+ "type check");
285
+ if (V8_UNLIKELY(handle.IsEmpty())) {
286
+ *value_ = GetDefaultValue();
287
+ } else {
288
+ *value_ = *reinterpret_cast<internal::Address*>(*handle);
289
+ }
290
+ }
291
+
292
+ template <typename T>
293
+ void ReturnValue<T>::Set(double i) {
294
+ static_assert(std::is_base_of<T, Number>::value, "type check");
295
+ Set(Number::New(GetIsolate(), i));
296
+ }
297
+
298
+ template <typename T>
299
+ void ReturnValue<T>::Set(int32_t i) {
300
+ static_assert(std::is_base_of<T, Integer>::value, "type check");
301
+ using I = internal::Internals;
302
+ if (V8_LIKELY(I::IsValidSmi(i))) {
303
+ *value_ = I::IntToSmi(i);
304
+ return;
305
+ }
306
+ Set(Integer::New(GetIsolate(), i));
307
+ }
308
+
309
+ template <typename T>
310
+ void ReturnValue<T>::Set(uint32_t i) {
311
+ static_assert(std::is_base_of<T, Integer>::value, "type check");
312
+ // Can't simply use INT32_MAX here for whatever reason.
313
+ bool fits_into_int32_t = (i & (1U << 31)) == 0;
314
+ if (V8_LIKELY(fits_into_int32_t)) {
315
+ Set(static_cast<int32_t>(i));
316
+ return;
317
+ }
318
+ Set(Integer::NewFromUnsigned(GetIsolate(), i));
319
+ }
320
+
321
+ template <typename T>
322
+ void ReturnValue<T>::Set(bool value) {
323
+ static_assert(std::is_base_of<T, Boolean>::value, "type check");
324
+ using I = internal::Internals;
325
+ int root_index;
326
+ if (value) {
327
+ root_index = I::kTrueValueRootIndex;
328
+ } else {
329
+ root_index = I::kFalseValueRootIndex;
330
+ }
331
+ *value_ = *I::GetRoot(GetIsolate(), root_index);
332
+ }
333
+
334
+ template <typename T>
335
+ void ReturnValue<T>::SetNull() {
336
+ static_assert(std::is_base_of<T, Primitive>::value, "type check");
337
+ using I = internal::Internals;
338
+ *value_ = *I::GetRoot(GetIsolate(), I::kNullValueRootIndex);
339
+ }
340
+
341
+ template <typename T>
342
+ void ReturnValue<T>::SetUndefined() {
343
+ static_assert(std::is_base_of<T, Primitive>::value, "type check");
344
+ using I = internal::Internals;
345
+ *value_ = *I::GetRoot(GetIsolate(), I::kUndefinedValueRootIndex);
346
+ }
347
+
348
+ template <typename T>
349
+ void ReturnValue<T>::SetEmptyString() {
350
+ static_assert(std::is_base_of<T, String>::value, "type check");
351
+ using I = internal::Internals;
352
+ *value_ = *I::GetRoot(GetIsolate(), I::kEmptyStringRootIndex);
353
+ }
354
+
355
+ template <typename T>
356
+ Isolate* ReturnValue<T>::GetIsolate() const {
357
+ // Isolate is always the pointer below the default value on the stack.
358
+ return *reinterpret_cast<Isolate**>(&value_[-2]);
359
+ }
360
+
361
+ template <typename T>
362
+ Local<Value> ReturnValue<T>::Get() const {
363
+ using I = internal::Internals;
364
+ if (*value_ == *I::GetRoot(GetIsolate(), I::kTheHoleValueRootIndex))
365
+ return Local<Value>(*Undefined(GetIsolate()));
366
+ return Local<Value>::New(GetIsolate(), reinterpret_cast<Value*>(value_));
367
+ }
368
+
369
+ template <typename T>
370
+ template <typename S>
371
+ void ReturnValue<T>::Set(S* whatever) {
372
+ static_assert(sizeof(S) < 0, "incompilable to prevent inadvertent misuse");
373
+ }
374
+
375
+ template <typename T>
376
+ internal::Address ReturnValue<T>::GetDefaultValue() {
377
+ // Default value is always the pointer below value_ on the stack.
378
+ return value_[-1];
379
+ }
380
+
381
+ template <typename T>
382
+ FunctionCallbackInfo<T>::FunctionCallbackInfo(internal::Address* implicit_args,
383
+ internal::Address* values,
384
+ int length)
385
+ : implicit_args_(implicit_args), values_(values), length_(length) {}
386
+
387
+ template <typename T>
388
+ Local<Value> FunctionCallbackInfo<T>::operator[](int i) const {
389
+ // values_ points to the first argument (not the receiver).
390
+ if (i < 0 || length_ <= i) return Local<Value>(*Undefined(GetIsolate()));
391
+ return Local<Value>(reinterpret_cast<Value*>(values_ + i));
392
+ }
393
+
394
+ template <typename T>
395
+ Local<Object> FunctionCallbackInfo<T>::This() const {
396
+ // values_ points to the first argument (not the receiver).
397
+ return Local<Object>(reinterpret_cast<Object*>(values_ - 1));
398
+ }
399
+
400
+ template <typename T>
401
+ Local<Object> FunctionCallbackInfo<T>::Holder() const {
402
+ return Local<Object>(
403
+ reinterpret_cast<Object*>(&implicit_args_[kHolderIndex]));
404
+ }
405
+
406
+ template <typename T>
407
+ Local<Value> FunctionCallbackInfo<T>::NewTarget() const {
408
+ return Local<Value>(
409
+ reinterpret_cast<Value*>(&implicit_args_[kNewTargetIndex]));
410
+ }
411
+
412
+ template <typename T>
413
+ Local<Value> FunctionCallbackInfo<T>::Data() const {
414
+ return Local<Value>(reinterpret_cast<Value*>(&implicit_args_[kDataIndex]));
415
+ }
416
+
417
+ template <typename T>
418
+ Isolate* FunctionCallbackInfo<T>::GetIsolate() const {
419
+ return *reinterpret_cast<Isolate**>(&implicit_args_[kIsolateIndex]);
420
+ }
421
+
422
+ template <typename T>
423
+ ReturnValue<T> FunctionCallbackInfo<T>::GetReturnValue() const {
424
+ return ReturnValue<T>(&implicit_args_[kReturnValueIndex]);
425
+ }
426
+
427
+ template <typename T>
428
+ bool FunctionCallbackInfo<T>::IsConstructCall() const {
429
+ return !NewTarget()->IsUndefined();
430
+ }
431
+
432
+ template <typename T>
433
+ int FunctionCallbackInfo<T>::Length() const {
434
+ return length_;
435
+ }
436
+
437
+ template <typename T>
438
+ Isolate* PropertyCallbackInfo<T>::GetIsolate() const {
439
+ return *reinterpret_cast<Isolate**>(&args_[kIsolateIndex]);
440
+ }
441
+
442
+ template <typename T>
443
+ Local<Value> PropertyCallbackInfo<T>::Data() const {
444
+ return Local<Value>(reinterpret_cast<Value*>(&args_[kDataIndex]));
445
+ }
446
+
447
+ template <typename T>
448
+ Local<Object> PropertyCallbackInfo<T>::This() const {
449
+ return Local<Object>(reinterpret_cast<Object*>(&args_[kThisIndex]));
450
+ }
451
+
452
+ template <typename T>
453
+ Local<Object> PropertyCallbackInfo<T>::Holder() const {
454
+ return Local<Object>(reinterpret_cast<Object*>(&args_[kHolderIndex]));
455
+ }
456
+
457
+ template <typename T>
458
+ ReturnValue<T> PropertyCallbackInfo<T>::GetReturnValue() const {
459
+ return ReturnValue<T>(&args_[kReturnValueIndex]);
460
+ }
461
+
462
+ template <typename T>
463
+ bool PropertyCallbackInfo<T>::ShouldThrowOnError() const {
464
+ using I = internal::Internals;
465
+ if (args_[kShouldThrowOnErrorIndex] !=
466
+ I::IntToSmi(I::kInferShouldThrowMode)) {
467
+ return args_[kShouldThrowOnErrorIndex] != I::IntToSmi(I::kDontThrow);
468
+ }
469
+ return v8::internal::ShouldThrowOnError(
470
+ reinterpret_cast<v8::internal::Isolate*>(GetIsolate()));
471
+ }
472
+
473
+ } // namespace v8
474
+
475
+ #endif // INCLUDE_V8_FUNCTION_CALLBACK_H_
@@ -195,22 +195,38 @@ class V8_EXPORT V8 {
195
195
  * This must be invoked after the platform was initialized but before V8 is
196
196
  * initialized. The virtual memory cage is torn down during platform shutdown.
197
197
  * Returns true on success, false otherwise.
198
+ *
199
+ * TODO(saelo) Once it is no longer optional to create the virtual memory
200
+ * cage when compiling with V8_VIRTUAL_MEMORY_CAGE, the cage initialization
201
+ * will likely happen as part of V8::Initialize, at which point this function
202
+ * should be removed.
198
203
  */
199
204
  static bool InitializeVirtualMemoryCage();
200
205
 
201
206
  /**
202
- * Provides access to the data page allocator for the virtual memory cage.
207
+ * Provides access to the virtual memory cage page allocator.
208
+ *
209
+ * This allocator allocates pages inside the virtual memory cage. It can for
210
+ * example be used to obtain virtual memory for ArrayBuffer backing stores,
211
+ * which must be located inside the cage.
212
+ *
213
+ * It should be assumed that an attacker can corrupt data inside the cage,
214
+ * and so in particular the contents of pages returned by this allocator,
215
+ * arbitrarily and concurrently. Due to this, it is recommended to to only
216
+ * place pure data buffers in pages obtained through this allocator.
203
217
  *
204
- * This allocator allocates pages inside the data cage part of the virtual
205
- * memory cage in which data buffers such as ArrayBuffer backing stores must
206
- * be allocated. Objects in this region should generally consists purely of
207
- * data and not contain any pointers. It should be assumed that an attacker
208
- * can corrupt data inside the cage, and so in particular the contents of
209
- * pages returned by this allocator, arbitrarily and concurrently.
218
+ * This function must only be called after initializing the virtual memory
219
+ * cage and V8.
220
+ */
221
+ static PageAllocator* GetVirtualMemoryCagePageAllocator();
222
+
223
+ /**
224
+ * Returns the size of the virtual memory cage in bytes.
210
225
  *
211
- * The virtual memory cage must have been initialized before.
226
+ * If the cage has not been initialized, or if the initialization failed,
227
+ * this returns zero.
212
228
  */
213
- static PageAllocator* GetVirtualMemoryCageDataPageAllocator();
229
+ static size_t GetVirtualMemoryCageSizeInBytes();
214
230
  #endif
215
231
 
216
232
  /**
@@ -495,15 +495,10 @@ constexpr bool VirtualMemoryCageIsEnabled() {
495
495
  }
496
496
 
497
497
  #ifdef V8_VIRTUAL_MEMORY_CAGE
498
- // Size of the pointer compression cage located at the start of the virtual
499
- // memory cage.
500
- constexpr size_t kVirtualMemoryCagePointerCageSize =
501
- Internals::kPtrComprCageReservationSize;
502
-
503
498
  // Size of the virtual memory cage, excluding the guard regions surrounding it.
504
499
  constexpr size_t kVirtualMemoryCageSize = size_t{1} << 40; // 1 TB
505
500
 
506
- static_assert(kVirtualMemoryCageSize > kVirtualMemoryCagePointerCageSize,
501
+ static_assert(kVirtualMemoryCageSize > Internals::kPtrComprCageReservationSize,
507
502
  "The virtual memory cage must be larger than the pointer "
508
503
  "compression cage contained within it.");
509
504
 
@@ -525,19 +520,21 @@ static_assert((kVirtualMemoryCageGuardRegionSize %
525
520
  "The size of the virtual memory cage guard region must be a "
526
521
  "multiple of its required alignment.");
527
522
 
528
- // Minimum possible size of the virtual memory cage, excluding the guard regions
529
- // surrounding it. Used by unit tests.
530
- constexpr size_t kVirtualMemoryCageMinimumSize =
531
- 2 * kVirtualMemoryCagePointerCageSize;
523
+ // Minimum size of the virtual memory cage, excluding the guard regions
524
+ // surrounding it. If the cage reservation fails, its size is currently halved
525
+ // until either the reservation succeeds or the minimum size is reached. A
526
+ // minimum of 32GB allows the 4GB pointer compression region as well as the
527
+ // ArrayBuffer partition and two 10GB WASM memory cages to fit into the cage.
528
+ constexpr size_t kVirtualMemoryCageMinimumSize = size_t{32} << 30; // 32 GB
532
529
 
533
530
  // For now, even if the virtual memory cage is enabled, we still allow backing
534
531
  // stores to be allocated outside of it as fallback. This will simplify the
535
532
  // initial rollout. However, if the heap sandbox is also enabled, we already use
536
533
  // the "enforcing mode" of the virtual memory cage. This is useful for testing.
537
534
  #ifdef V8_HEAP_SANDBOX
538
- constexpr bool kAllowBackingStoresOutsideDataCage = false;
535
+ constexpr bool kAllowBackingStoresOutsideCage = false;
539
536
  #else
540
- constexpr bool kAllowBackingStoresOutsideDataCage = true;
537
+ constexpr bool kAllowBackingStoresOutsideCage = true;
541
538
  #endif // V8_HEAP_SANDBOX
542
539
 
543
540
  #endif // V8_VIRTUAL_MEMORY_CAGE
@@ -572,14 +569,6 @@ class BackingStoreBase {};
572
569
 
573
570
  } // namespace internal
574
571
 
575
- V8_EXPORT bool CopyAndConvertArrayToCppBufferInt32(Local<Array> src,
576
- int32_t* dst,
577
- uint32_t max_length);
578
-
579
- V8_EXPORT bool CopyAndConvertArrayToCppBufferFloat64(Local<Array> src,
580
- double* dst,
581
- uint32_t max_length);
582
-
583
572
  } // namespace v8
584
573
 
585
574
  #endif // INCLUDE_V8_INTERNAL_H_
@@ -1482,6 +1482,9 @@ class V8_EXPORT Isolate {
1482
1482
 
1483
1483
  void SetWasmExceptionsEnabledCallback(WasmExceptionsEnabledCallback callback);
1484
1484
 
1485
+ void SetWasmDynamicTieringEnabledCallback(
1486
+ WasmDynamicTieringEnabledCallback callback);
1487
+
1485
1488
  void SetSharedArrayBufferConstructorEnabledCallback(
1486
1489
  SharedArrayBufferConstructorEnabledCallback callback);
1487
1490
 
@@ -64,7 +64,7 @@ class Isolate;
64
64
  * given thread. This can be useful if you have code that can be called either
65
65
  * from code that holds the lock or from code that does not. The Unlocker is
66
66
  * not recursive so you can not have several Unlockers on the stack at once, and
67
- * you can not use an Unlocker in a thread that is not inside a Locker's scope.
67
+ * you cannot use an Unlocker in a thread that is not inside a Locker's scope.
68
68
  *
69
69
  * An unlocker will unlock several lockers if it has to and reinstate the
70
70
  * correct depth of locking on its destruction, e.g.:
@@ -122,8 +122,13 @@ class V8_EXPORT Locker {
122
122
  static bool IsLocked(Isolate* isolate);
123
123
 
124
124
  /**
125
- * Returns whether v8::Locker is being used by this V8 instance.
125
+ * Returns whether any v8::Locker has ever been used in this process.
126
+ * TODO(cbruni, chromium:1240851): Fix locking checks on a per-thread basis.
127
+ * The current implementation is quite confusing and leads to unexpected
128
+ * results if anybody uses v8::Locker in the current process.
126
129
  */
130
+ static bool WasEverUsed();
131
+ V8_DEPRECATE_SOON("Use WasEverUsed instead")
127
132
  static bool IsActive();
128
133
 
129
134
  // Disallow copying and assigning.
@@ -7,6 +7,8 @@
7
7
 
8
8
  #include <stdio.h>
9
9
 
10
+ #include <iosfwd>
11
+
10
12
  #include "v8-local-handle.h" // NOLINT(build/include_directory)
11
13
  #include "v8-maybe.h" // NOLINT(build/include_directory)
12
14
  #include "v8config.h" // NOLINT(build/include_directory)
@@ -210,8 +212,9 @@ class V8_EXPORT Message {
210
212
  bool IsSharedCrossOrigin() const;
211
213
  bool IsOpaque() const;
212
214
 
213
- // TODO(1245381): Print to a string instead of on a FILE.
215
+ V8_DEPRECATE_SOON("Use the version that takes a std::ostream&.")
214
216
  static void PrintCurrentStackTrace(Isolate* isolate, FILE* out);
217
+ static void PrintCurrentStackTrace(Isolate* isolate, std::ostream& out);
215
218
 
216
219
  static const int kNoLineNumberInfo = 0;
217
220
  static const int kNoColumnInfo = 0;
@@ -27,6 +27,7 @@ class Signature;
27
27
  F(ArrayProto_forEach, array_for_each_iterator) \
28
28
  F(ArrayProto_keys, array_keys_iterator) \
29
29
  F(ArrayProto_values, array_values_iterator) \
30
+ F(ArrayPrototype, initial_array_prototype) \
30
31
  F(AsyncIteratorPrototype, initial_async_iterator_prototype) \
31
32
  F(ErrorPrototype, initial_error_prototype) \
32
33
  F(IteratorPrototype, initial_iterator_prototype) \
@@ -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 9
12
- #define V8_MINOR_VERSION 5
13
- #define V8_BUILD_NUMBER 172
14
- #define V8_PATCH_LEVEL 21
12
+ #define V8_MINOR_VERSION 6
13
+ #define V8_BUILD_NUMBER 180
14
+ #define V8_PATCH_LEVEL 15
15
15
 
16
16
  // Use 1 for candidates and 0 otherwise.
17
17
  // (Boolean macro values are not supported by all preprocessors.)