libv8-node 22.7.0.4-aarch64-linux → 23.6.1.0-aarch64-linux
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/libv8/node/version.rb +3 -3
- data/vendor/v8/aarch64-linux/libv8/obj/libv8_monolith.a +0 -0
- data/vendor/v8/include/cppgc/allocation.h +10 -11
- data/vendor/v8/include/cppgc/garbage-collected.h +8 -0
- data/vendor/v8/include/cppgc/heap-statistics.h +2 -0
- data/vendor/v8/include/cppgc/internal/api-constants.h +6 -1
- data/vendor/v8/include/cppgc/internal/compiler-specific.h +9 -1
- data/vendor/v8/include/cppgc/internal/gc-info.h +12 -10
- data/vendor/v8/include/cppgc/internal/member-storage.h +6 -0
- data/vendor/v8/include/cppgc/internal/name-trait.h +5 -1
- data/vendor/v8/include/cppgc/name-provider.h +7 -0
- data/vendor/v8/include/v8-array-buffer.h +44 -24
- data/vendor/v8/include/v8-callbacks.h +10 -5
- data/vendor/v8/include/v8-context.h +41 -9
- data/vendor/v8/include/v8-cppgc.h +3 -55
- data/vendor/v8/include/v8-date.h +9 -0
- data/vendor/v8/include/v8-embedder-heap.h +4 -1
- data/vendor/v8/include/v8-exception.h +70 -0
- data/vendor/v8/include/v8-fast-api-calls.h +31 -38
- data/vendor/v8/include/v8-function-callback.h +203 -62
- data/vendor/v8/include/v8-function.h +4 -3
- data/vendor/v8/include/v8-handle-base.h +2 -2
- data/vendor/v8/include/v8-initialization.h +18 -1
- data/vendor/v8/include/v8-inspector.h +6 -3
- data/vendor/v8/include/v8-internal.h +303 -58
- data/vendor/v8/include/v8-isolate.h +58 -39
- data/vendor/v8/include/v8-local-handle.h +18 -19
- data/vendor/v8/include/v8-message.h +0 -21
- data/vendor/v8/include/v8-metrics.h +4 -0
- data/vendor/v8/include/v8-microtask-queue.h +0 -5
- data/vendor/v8/include/v8-object.h +284 -35
- data/vendor/v8/include/v8-persistent-handle.h +0 -19
- data/vendor/v8/include/v8-platform.h +21 -35
- data/vendor/v8/include/v8-primitive.h +92 -1
- data/vendor/v8/include/v8-profiler.h +38 -1
- data/vendor/v8/include/v8-promise.h +2 -2
- data/vendor/v8/include/v8-sandbox.h +173 -0
- data/vendor/v8/include/v8-script.h +44 -14
- data/vendor/v8/include/v8-snapshot.h +38 -2
- data/vendor/v8/include/v8-template.h +105 -263
- data/vendor/v8/include/v8-traced-handle.h +4 -15
- data/vendor/v8/include/v8-unwinder.h +2 -1
- data/vendor/v8/include/v8-util.h +1 -117
- data/vendor/v8/include/v8-value.h +3 -2
- data/vendor/v8/include/v8-version.h +3 -3
- data/vendor/v8/include/v8-wasm.h +3 -0
- data/vendor/v8/include/v8config.h +51 -7
- metadata +3 -2
@@ -8,6 +8,7 @@
|
|
8
8
|
#include <cstdint>
|
9
9
|
#include <limits>
|
10
10
|
|
11
|
+
#include "v8-internal.h" // NOLINT(build/include_directory)
|
11
12
|
#include "v8-local-handle.h" // NOLINT(build/include_directory)
|
12
13
|
#include "v8-primitive.h" // NOLINT(build/include_directory)
|
13
14
|
#include "v8config.h" // NOLINT(build/include_directory)
|
@@ -31,6 +32,11 @@ namespace debug {
|
|
31
32
|
class ConsoleCallArguments;
|
32
33
|
} // namespace debug
|
33
34
|
|
35
|
+
namespace api_internal {
|
36
|
+
V8_EXPORT v8::Local<v8::Value> GetFunctionTemplateData(
|
37
|
+
v8::Isolate* isolate, v8::Local<v8::Data> raw_target);
|
38
|
+
} // namespace api_internal
|
39
|
+
|
34
40
|
template <typename T>
|
35
41
|
class ReturnValue {
|
36
42
|
public:
|
@@ -38,7 +44,7 @@ class ReturnValue {
|
|
38
44
|
V8_INLINE ReturnValue(const ReturnValue<S>& that) : value_(that.value_) {
|
39
45
|
static_assert(std::is_base_of<T, S>::value, "type check");
|
40
46
|
}
|
41
|
-
//
|
47
|
+
// Handle-based setters.
|
42
48
|
template <typename S>
|
43
49
|
V8_INLINE void Set(const Global<S>& handle);
|
44
50
|
template <typename S>
|
@@ -51,15 +57,19 @@ class ReturnValue {
|
|
51
57
|
V8_INLINE void Set(const Local<S> handle);
|
52
58
|
template <typename S>
|
53
59
|
V8_INLINE void SetNonEmpty(const Local<S> handle);
|
54
|
-
// Fast primitive setters
|
60
|
+
// Fast primitive number setters.
|
55
61
|
V8_INLINE void Set(bool value);
|
56
62
|
V8_INLINE void Set(double i);
|
63
|
+
V8_INLINE void Set(int16_t i);
|
57
64
|
V8_INLINE void Set(int32_t i);
|
65
|
+
V8_INLINE void Set(int64_t i);
|
66
|
+
V8_INLINE void Set(uint16_t i);
|
58
67
|
V8_INLINE void Set(uint32_t i);
|
59
|
-
V8_INLINE void Set(
|
68
|
+
V8_INLINE void Set(uint64_t i);
|
60
69
|
// Fast JS primitive setters
|
61
70
|
V8_INLINE void SetNull();
|
62
71
|
V8_INLINE void SetUndefined();
|
72
|
+
V8_INLINE void SetFalse();
|
63
73
|
V8_INLINE void SetEmptyString();
|
64
74
|
// Convenience getter for Isolate
|
65
75
|
V8_INLINE Isolate* GetIsolate() const;
|
@@ -83,14 +93,13 @@ class ReturnValue {
|
|
83
93
|
template <class F, class G, class H>
|
84
94
|
friend class PersistentValueMapBase;
|
85
95
|
V8_INLINE void SetInternal(internal::Address value);
|
86
|
-
//
|
87
|
-
// -
|
88
|
-
//
|
89
|
-
// -
|
90
|
-
//
|
91
|
-
//
|
92
|
-
|
93
|
-
V8_INLINE void SetTheHole();
|
96
|
+
// Default value depends on <T>:
|
97
|
+
// - <void> -> true_value,
|
98
|
+
// - <v8::Boolean> -> true_value,
|
99
|
+
// - <v8::Integer> -> 0,
|
100
|
+
// - <v8::Value> -> undefined_value,
|
101
|
+
// - <v8::Array> -> undefined_value.
|
102
|
+
V8_INLINE void SetDefaultValue();
|
94
103
|
V8_INLINE explicit ReturnValue(internal::Address* slot);
|
95
104
|
|
96
105
|
// See FunctionCallbackInfo.
|
@@ -127,6 +136,12 @@ class FunctionCallbackInfo {
|
|
127
136
|
* referencing this callback was found (which in V8 internally is often
|
128
137
|
* referred to as holder [sic]).
|
129
138
|
*/
|
139
|
+
V8_DEPRECATED(
|
140
|
+
"V8 will stop providing access to hidden prototype (i.e. "
|
141
|
+
"JSGlobalObject). Use This() instead. \n"
|
142
|
+
"DO NOT try to workaround this by accessing JSGlobalObject via "
|
143
|
+
"v8::Object::GetPrototype() - it'll be deprecated soon too. \n"
|
144
|
+
"See http://crbug.com/333672197. ")
|
130
145
|
V8_INLINE Local<Object> Holder() const;
|
131
146
|
/** For construct calls, this returns the "new.target" value. */
|
132
147
|
V8_INLINE Local<Value> NewTarget() const;
|
@@ -139,16 +154,22 @@ class FunctionCallbackInfo {
|
|
139
154
|
/** The ReturnValue for the call. */
|
140
155
|
V8_INLINE ReturnValue<T> GetReturnValue() const;
|
141
156
|
|
157
|
+
// This is a temporary replacement for Holder() added just for the purpose
|
158
|
+
// of testing the deprecated Holder() machinery until it's removed for real.
|
159
|
+
// DO NOT use it.
|
160
|
+
V8_INLINE Local<Object> HolderSoonToBeDeprecated() const;
|
161
|
+
|
142
162
|
private:
|
143
163
|
friend class internal::FunctionCallbackArguments;
|
144
164
|
friend class internal::CustomArguments<FunctionCallbackInfo>;
|
145
165
|
friend class debug::ConsoleCallArguments;
|
166
|
+
friend void internal::PrintFunctionCallbackInfo(void*);
|
146
167
|
|
147
168
|
static constexpr int kHolderIndex = 0;
|
148
169
|
static constexpr int kIsolateIndex = 1;
|
149
|
-
static constexpr int
|
170
|
+
static constexpr int kContextIndex = 2;
|
150
171
|
static constexpr int kReturnValueIndex = 3;
|
151
|
-
static constexpr int
|
172
|
+
static constexpr int kTargetIndex = 4;
|
152
173
|
static constexpr int kNewTargetIndex = 5;
|
153
174
|
static constexpr int kArgsLength = 6;
|
154
175
|
|
@@ -168,9 +189,13 @@ class FunctionCallbackInfo {
|
|
168
189
|
|
169
190
|
V8_INLINE FunctionCallbackInfo(internal::Address* implicit_args,
|
170
191
|
internal::Address* values, int length);
|
192
|
+
|
193
|
+
// TODO(https://crbug.com/326505377): flatten the v8::FunctionCallbackInfo
|
194
|
+
// object to avoid indirect loads through values_ and implicit_args_ and
|
195
|
+
// reduce the number of instructions in the CallApiCallback builtin.
|
171
196
|
internal::Address* implicit_args_;
|
172
197
|
internal::Address* values_;
|
173
|
-
|
198
|
+
internal::Address length_;
|
174
199
|
};
|
175
200
|
|
176
201
|
/**
|
@@ -244,8 +269,23 @@ class PropertyCallbackInfo {
|
|
244
269
|
*
|
245
270
|
* \note For security reasons, do not pass the object back into the runtime.
|
246
271
|
*/
|
272
|
+
V8_DEPRECATE_SOON(
|
273
|
+
"V8 will stop providing access to hidden prototype (i.e. "
|
274
|
+
"JSGlobalObject). Use HolderV2() instead. \n"
|
275
|
+
"DO NOT try to workaround this by accessing JSGlobalObject via "
|
276
|
+
"v8::Object::GetPrototype() - it'll be deprecated soon too. \n"
|
277
|
+
"See http://crbug.com/333672197. ")
|
247
278
|
V8_INLINE Local<Object> Holder() const;
|
248
279
|
|
280
|
+
/**
|
281
|
+
* \return The object in the prototype chain of the receiver that has the
|
282
|
+
* interceptor. Suppose you have `x` and its prototype is `y`, and `y`
|
283
|
+
* has an interceptor. Then `info.This()` is `x` and `info.Holder()` is `y`.
|
284
|
+
* In case the property is installed on the global object the Holder()
|
285
|
+
* would return the global proxy.
|
286
|
+
*/
|
287
|
+
V8_INLINE Local<Object> HolderV2() const;
|
288
|
+
|
249
289
|
/**
|
250
290
|
* \return The return value of the callback.
|
251
291
|
* Can be changed by calling Set().
|
@@ -266,24 +306,28 @@ class PropertyCallbackInfo {
|
|
266
306
|
V8_INLINE bool ShouldThrowOnError() const;
|
267
307
|
|
268
308
|
private:
|
309
|
+
template <typename U>
|
310
|
+
friend class PropertyCallbackInfo;
|
269
311
|
friend class MacroAssembler;
|
270
312
|
friend class internal::PropertyCallbackArguments;
|
271
313
|
friend class internal::CustomArguments<PropertyCallbackInfo>;
|
272
|
-
|
273
|
-
|
274
|
-
static constexpr int
|
275
|
-
static constexpr int
|
276
|
-
static constexpr int
|
277
|
-
static constexpr int
|
278
|
-
static constexpr int
|
279
|
-
static constexpr int
|
314
|
+
friend void internal::PrintPropertyCallbackInfo(void*);
|
315
|
+
|
316
|
+
static constexpr int kPropertyKeyIndex = 0;
|
317
|
+
static constexpr int kShouldThrowOnErrorIndex = 1;
|
318
|
+
static constexpr int kHolderIndex = 2;
|
319
|
+
static constexpr int kIsolateIndex = 3;
|
320
|
+
static constexpr int kHolderV2Index = 4;
|
321
|
+
static constexpr int kReturnValueIndex = 5;
|
322
|
+
static constexpr int kDataIndex = 6;
|
323
|
+
static constexpr int kThisIndex = 7;
|
324
|
+
static constexpr int kArgsLength = 8;
|
280
325
|
|
281
|
-
static constexpr int kSize =
|
326
|
+
static constexpr int kSize = kArgsLength * internal::kApiSystemPointerSize;
|
282
327
|
|
283
|
-
|
284
|
-
: args_(args) {}
|
328
|
+
PropertyCallbackInfo() = default;
|
285
329
|
|
286
|
-
internal::Address
|
330
|
+
mutable internal::Address args_[kArgsLength];
|
287
331
|
};
|
288
332
|
|
289
333
|
using FunctionCallback = void (*)(const FunctionCallbackInfo<Value>& info);
|
@@ -312,7 +356,7 @@ template <typename S>
|
|
312
356
|
void ReturnValue<T>::Set(const Global<S>& handle) {
|
313
357
|
static_assert(std::is_base_of<T, S>::value, "type check");
|
314
358
|
if (V8_UNLIKELY(handle.IsEmpty())) {
|
315
|
-
|
359
|
+
SetDefaultValue();
|
316
360
|
} else {
|
317
361
|
SetInternal(handle.ptr());
|
318
362
|
}
|
@@ -333,7 +377,7 @@ template <typename S>
|
|
333
377
|
void ReturnValue<T>::Set(const BasicTracedReference<S>& handle) {
|
334
378
|
static_assert(std::is_base_of<T, S>::value, "type check");
|
335
379
|
if (V8_UNLIKELY(handle.IsEmpty())) {
|
336
|
-
|
380
|
+
SetDefaultValue();
|
337
381
|
} else {
|
338
382
|
SetInternal(handle.ptr());
|
339
383
|
}
|
@@ -352,10 +396,25 @@ void ReturnValue<T>::SetNonEmpty(const BasicTracedReference<S>& handle) {
|
|
352
396
|
template <typename T>
|
353
397
|
template <typename S>
|
354
398
|
void ReturnValue<T>::Set(const Local<S> handle) {
|
355
|
-
|
356
|
-
|
399
|
+
// "V8_DEPRECATE_SOON" this method if |T| is |void|.
|
400
|
+
#ifdef V8_IMMINENT_DEPRECATION_WARNINGS
|
401
|
+
static constexpr bool is_allowed_void = false;
|
402
|
+
static_assert(!std::is_void<T>::value,
|
403
|
+
"ReturnValue<void>::Set(const Local<S>) is deprecated. "
|
404
|
+
"Do nothing to indicate that the operation succeeded or use "
|
405
|
+
"SetFalse() to indicate that the operation failed (don't "
|
406
|
+
"forget to handle info.ShouldThrowOnError()). "
|
407
|
+
"See http://crbug.com/348660658 for details.");
|
408
|
+
#else
|
409
|
+
static constexpr bool is_allowed_void = std::is_void<T>::value;
|
410
|
+
#endif // V8_IMMINENT_DEPRECATION_WARNINGS
|
411
|
+
static_assert(is_allowed_void || std::is_base_of<T, S>::value, "type check");
|
357
412
|
if (V8_UNLIKELY(handle.IsEmpty())) {
|
358
|
-
|
413
|
+
SetDefaultValue();
|
414
|
+
} else if constexpr (is_allowed_void) {
|
415
|
+
// Simulate old behaviour for "v8::AccessorSetterCallback" for which
|
416
|
+
// it was possible to set the return value even for ReturnValue<void>.
|
417
|
+
Set(handle->BooleanValue(GetIsolate()));
|
359
418
|
} else {
|
360
419
|
SetInternal(handle.ptr());
|
361
420
|
}
|
@@ -364,12 +423,29 @@ void ReturnValue<T>::Set(const Local<S> handle) {
|
|
364
423
|
template <typename T>
|
365
424
|
template <typename S>
|
366
425
|
void ReturnValue<T>::SetNonEmpty(const Local<S> handle) {
|
367
|
-
|
368
|
-
|
426
|
+
// "V8_DEPRECATE_SOON" this method if |T| is |void|.
|
427
|
+
#ifdef V8_IMMINENT_DEPRECATION_WARNINGS
|
428
|
+
static constexpr bool is_allowed_void = false;
|
429
|
+
static_assert(!std::is_void<T>::value,
|
430
|
+
"ReturnValue<void>::SetNonEmpty(const Local<S>) is deprecated. "
|
431
|
+
"Do nothing to indicate that the operation succeeded or use "
|
432
|
+
"SetFalse() to indicate that the operation failed (don't "
|
433
|
+
"forget to handle info.ShouldThrowOnError()). "
|
434
|
+
"See http://crbug.com/348660658 for details.");
|
435
|
+
#else
|
436
|
+
static constexpr bool is_allowed_void = std::is_void<T>::value;
|
437
|
+
#endif // V8_IMMINENT_DEPRECATION_WARNINGS
|
438
|
+
static_assert(is_allowed_void || std::is_base_of<T, S>::value, "type check");
|
369
439
|
#ifdef V8_ENABLE_CHECKS
|
370
440
|
internal::VerifyHandleIsNonEmpty(handle.IsEmpty());
|
371
441
|
#endif // V8_ENABLE_CHECKS
|
372
|
-
|
442
|
+
if constexpr (is_allowed_void) {
|
443
|
+
// Simulate old behaviour for "v8::AccessorSetterCallback" for which
|
444
|
+
// it was possible to set the return value even for ReturnValue<void>.
|
445
|
+
Set(handle->BooleanValue(GetIsolate()));
|
446
|
+
} else {
|
447
|
+
SetInternal(handle.ptr());
|
448
|
+
}
|
373
449
|
}
|
374
450
|
|
375
451
|
template <typename T>
|
@@ -379,26 +455,32 @@ void ReturnValue<T>::Set(double i) {
|
|
379
455
|
}
|
380
456
|
|
381
457
|
template <typename T>
|
382
|
-
void ReturnValue<T>::Set(
|
458
|
+
void ReturnValue<T>::Set(int16_t i) {
|
383
459
|
static_assert(std::is_base_of<T, Integer>::value, "type check");
|
384
460
|
using I = internal::Internals;
|
385
|
-
|
386
|
-
|
461
|
+
static_assert(I::IsValidSmi(std::numeric_limits<int16_t>::min()));
|
462
|
+
static_assert(I::IsValidSmi(std::numeric_limits<int16_t>::max()));
|
463
|
+
SetInternal(I::IntegralToSmi(i));
|
464
|
+
}
|
465
|
+
|
466
|
+
template <typename T>
|
467
|
+
void ReturnValue<T>::Set(int32_t i) {
|
468
|
+
static_assert(std::is_base_of<T, Integer>::value, "type check");
|
469
|
+
if (const auto result = internal::Internals::TryIntegralToSmi(i)) {
|
470
|
+
SetInternal(*result);
|
387
471
|
return;
|
388
472
|
}
|
389
473
|
SetNonEmpty(Integer::New(GetIsolate(), i));
|
390
474
|
}
|
391
475
|
|
392
476
|
template <typename T>
|
393
|
-
void ReturnValue<T>::Set(
|
477
|
+
void ReturnValue<T>::Set(int64_t i) {
|
394
478
|
static_assert(std::is_base_of<T, Integer>::value, "type check");
|
395
|
-
|
396
|
-
|
397
|
-
if (V8_LIKELY(fits_into_int32_t)) {
|
398
|
-
Set(static_cast<int32_t>(i));
|
479
|
+
if (const auto result = internal::Internals::TryIntegralToSmi(i)) {
|
480
|
+
SetInternal(*result);
|
399
481
|
return;
|
400
482
|
}
|
401
|
-
SetNonEmpty(
|
483
|
+
SetNonEmpty(Number::New(GetIsolate(), static_cast<double>(i)));
|
402
484
|
}
|
403
485
|
|
404
486
|
template <typename T>
|
@@ -407,12 +489,33 @@ void ReturnValue<T>::Set(uint16_t i) {
|
|
407
489
|
using I = internal::Internals;
|
408
490
|
static_assert(I::IsValidSmi(std::numeric_limits<uint16_t>::min()));
|
409
491
|
static_assert(I::IsValidSmi(std::numeric_limits<uint16_t>::max()));
|
410
|
-
SetInternal(I::
|
492
|
+
SetInternal(I::IntegralToSmi(i));
|
493
|
+
}
|
494
|
+
|
495
|
+
template <typename T>
|
496
|
+
void ReturnValue<T>::Set(uint32_t i) {
|
497
|
+
static_assert(std::is_base_of<T, Integer>::value, "type check");
|
498
|
+
if (const auto result = internal::Internals::TryIntegralToSmi(i)) {
|
499
|
+
SetInternal(*result);
|
500
|
+
return;
|
501
|
+
}
|
502
|
+
SetNonEmpty(Integer::NewFromUnsigned(GetIsolate(), i));
|
503
|
+
}
|
504
|
+
|
505
|
+
template <typename T>
|
506
|
+
void ReturnValue<T>::Set(uint64_t i) {
|
507
|
+
static_assert(std::is_base_of<T, Integer>::value, "type check");
|
508
|
+
if (const auto result = internal::Internals::TryIntegralToSmi(i)) {
|
509
|
+
SetInternal(*result);
|
510
|
+
return;
|
511
|
+
}
|
512
|
+
SetNonEmpty(Number::New(GetIsolate(), static_cast<double>(i)));
|
411
513
|
}
|
412
514
|
|
413
515
|
template <typename T>
|
414
516
|
void ReturnValue<T>::Set(bool value) {
|
415
|
-
static_assert(std::is_base_of<T, Boolean>::value,
|
517
|
+
static_assert(std::is_void<T>::value || std::is_base_of<T, Boolean>::value,
|
518
|
+
"type check");
|
416
519
|
using I = internal::Internals;
|
417
520
|
#if V8_STATIC_ROOTS_BOOL
|
418
521
|
#ifdef V8_ENABLE_CHECKS
|
@@ -433,13 +536,20 @@ void ReturnValue<T>::Set(bool value) {
|
|
433
536
|
}
|
434
537
|
|
435
538
|
template <typename T>
|
436
|
-
void ReturnValue<T>::
|
539
|
+
void ReturnValue<T>::SetDefaultValue() {
|
437
540
|
using I = internal::Internals;
|
541
|
+
if constexpr (std::is_same_v<void, T> || std::is_same_v<v8::Boolean, T>) {
|
542
|
+
Set(true);
|
543
|
+
} else if constexpr (std::is_same_v<v8::Integer, T>) {
|
544
|
+
SetInternal(I::IntegralToSmi(0));
|
545
|
+
} else {
|
546
|
+
static_assert(std::is_same_v<v8::Value, T> || std::is_same_v<v8::Array, T>);
|
438
547
|
#if V8_STATIC_ROOTS_BOOL
|
439
|
-
|
548
|
+
SetInternal(I::StaticReadOnlyRoot::kUndefinedValue);
|
440
549
|
#else
|
441
|
-
|
550
|
+
*value_ = I::GetRoot(GetIsolate(), I::kUndefinedValueRootIndex);
|
442
551
|
#endif // V8_STATIC_ROOTS_BOOL
|
552
|
+
}
|
443
553
|
}
|
444
554
|
|
445
555
|
template <typename T>
|
@@ -472,6 +582,22 @@ void ReturnValue<T>::SetUndefined() {
|
|
472
582
|
#endif // V8_STATIC_ROOTS_BOOL
|
473
583
|
}
|
474
584
|
|
585
|
+
template <typename T>
|
586
|
+
void ReturnValue<T>::SetFalse() {
|
587
|
+
static_assert(std::is_void<T>::value || std::is_base_of<T, Boolean>::value,
|
588
|
+
"type check");
|
589
|
+
using I = internal::Internals;
|
590
|
+
#if V8_STATIC_ROOTS_BOOL
|
591
|
+
#ifdef V8_ENABLE_CHECKS
|
592
|
+
internal::PerformCastCheck(
|
593
|
+
internal::ValueHelper::SlotAsValue<Value, true>(value_));
|
594
|
+
#endif // V8_ENABLE_CHECKS
|
595
|
+
SetInternal(I::StaticReadOnlyRoot::kFalseValue);
|
596
|
+
#else
|
597
|
+
*value_ = I::GetRoot(GetIsolate(), I::kFalseValueRootIndex);
|
598
|
+
#endif // V8_STATIC_ROOTS_BOOL
|
599
|
+
}
|
600
|
+
|
475
601
|
template <typename T>
|
476
602
|
void ReturnValue<T>::SetEmptyString() {
|
477
603
|
static_assert(std::is_base_of<T, String>::value, "type check");
|
@@ -494,14 +620,6 @@ Isolate* ReturnValue<T>::GetIsolate() const {
|
|
494
620
|
|
495
621
|
template <typename T>
|
496
622
|
Local<Value> ReturnValue<T>::Get() const {
|
497
|
-
using I = internal::Internals;
|
498
|
-
#if V8_STATIC_ROOTS_BOOL
|
499
|
-
if (I::is_identical(*value_, I::StaticReadOnlyRoot::kTheHoleValue)) {
|
500
|
-
#else
|
501
|
-
if (*value_ == I::GetRoot(GetIsolate(), I::kTheHoleValueRootIndex)) {
|
502
|
-
#endif // V8_STATIC_ROOTS_BOOL
|
503
|
-
return Undefined(GetIsolate());
|
504
|
-
}
|
505
623
|
return Local<Value>::New(GetIsolate(),
|
506
624
|
internal::ValueHelper::SlotAsValue<Value>(value_));
|
507
625
|
}
|
@@ -521,7 +639,7 @@ FunctionCallbackInfo<T>::FunctionCallbackInfo(internal::Address* implicit_args,
|
|
521
639
|
template <typename T>
|
522
640
|
Local<Value> FunctionCallbackInfo<T>::operator[](int i) const {
|
523
641
|
// values_ points to the first argument (not the receiver).
|
524
|
-
if (i < 0 ||
|
642
|
+
if (i < 0 || Length() <= i) return Undefined(GetIsolate());
|
525
643
|
return Local<Value>::FromSlot(values_ + i);
|
526
644
|
}
|
527
645
|
|
@@ -532,10 +650,15 @@ Local<Object> FunctionCallbackInfo<T>::This() const {
|
|
532
650
|
}
|
533
651
|
|
534
652
|
template <typename T>
|
535
|
-
Local<Object> FunctionCallbackInfo<T>::
|
653
|
+
Local<Object> FunctionCallbackInfo<T>::HolderSoonToBeDeprecated() const {
|
536
654
|
return Local<Object>::FromSlot(&implicit_args_[kHolderIndex]);
|
537
655
|
}
|
538
656
|
|
657
|
+
template <typename T>
|
658
|
+
Local<Object> FunctionCallbackInfo<T>::Holder() const {
|
659
|
+
return HolderSoonToBeDeprecated();
|
660
|
+
}
|
661
|
+
|
539
662
|
template <typename T>
|
540
663
|
Local<Value> FunctionCallbackInfo<T>::NewTarget() const {
|
541
664
|
return Local<Value>::FromSlot(&implicit_args_[kNewTargetIndex]);
|
@@ -543,7 +666,8 @@ Local<Value> FunctionCallbackInfo<T>::NewTarget() const {
|
|
543
666
|
|
544
667
|
template <typename T>
|
545
668
|
Local<Value> FunctionCallbackInfo<T>::Data() const {
|
546
|
-
|
669
|
+
auto target = Local<v8::Data>::FromSlot(&implicit_args_[kTargetIndex]);
|
670
|
+
return api_internal::GetFunctionTemplateData(GetIsolate(), target);
|
547
671
|
}
|
548
672
|
|
549
673
|
template <typename T>
|
@@ -563,7 +687,7 @@ bool FunctionCallbackInfo<T>::IsConstructCall() const {
|
|
563
687
|
|
564
688
|
template <typename T>
|
565
689
|
int FunctionCallbackInfo<T>::Length() const {
|
566
|
-
return length_;
|
690
|
+
return static_cast<int>(length_);
|
567
691
|
}
|
568
692
|
|
569
693
|
template <typename T>
|
@@ -586,6 +710,23 @@ Local<Object> PropertyCallbackInfo<T>::Holder() const {
|
|
586
710
|
return Local<Object>::FromSlot(&args_[kHolderIndex]);
|
587
711
|
}
|
588
712
|
|
713
|
+
namespace api_internal {
|
714
|
+
// Returns JSGlobalProxy if holder is JSGlobalObject or unmodified holder
|
715
|
+
// otherwise.
|
716
|
+
V8_EXPORT internal::Address ConvertToJSGlobalProxyIfNecessary(
|
717
|
+
internal::Address holder);
|
718
|
+
} // namespace api_internal
|
719
|
+
|
720
|
+
template <typename T>
|
721
|
+
Local<Object> PropertyCallbackInfo<T>::HolderV2() const {
|
722
|
+
using I = internal::Internals;
|
723
|
+
if (!I::HasHeapObjectTag(args_[kHolderV2Index])) {
|
724
|
+
args_[kHolderV2Index] =
|
725
|
+
api_internal::ConvertToJSGlobalProxyIfNecessary(args_[kHolderIndex]);
|
726
|
+
}
|
727
|
+
return Local<Object>::FromSlot(&args_[kHolderV2Index]);
|
728
|
+
}
|
729
|
+
|
589
730
|
template <typename T>
|
590
731
|
ReturnValue<T> PropertyCallbackInfo<T>::GetReturnValue() const {
|
591
732
|
return ReturnValue<T>(&args_[kReturnValueIndex]);
|
@@ -595,8 +736,8 @@ template <typename T>
|
|
595
736
|
bool PropertyCallbackInfo<T>::ShouldThrowOnError() const {
|
596
737
|
using I = internal::Internals;
|
597
738
|
if (args_[kShouldThrowOnErrorIndex] !=
|
598
|
-
I::
|
599
|
-
return args_[kShouldThrowOnErrorIndex] != I::
|
739
|
+
I::IntegralToSmi(I::kInferShouldThrowMode)) {
|
740
|
+
return args_[kShouldThrowOnErrorIndex] != I::IntegralToSmi(I::kDontThrow);
|
600
741
|
}
|
601
742
|
return v8::internal::ShouldThrowOnError(
|
602
743
|
reinterpret_cast<v8::internal::Isolate*>(GetIsolate()));
|
@@ -52,6 +52,10 @@ class V8_EXPORT Function : public Object {
|
|
52
52
|
Local<Context> context, int argc, Local<Value> argv[],
|
53
53
|
SideEffectType side_effect_type = SideEffectType::kHasSideEffect) const;
|
54
54
|
|
55
|
+
V8_WARN_UNUSED_RESULT MaybeLocal<Value> Call(v8::Isolate* isolate,
|
56
|
+
Local<Context> context,
|
57
|
+
Local<Value> recv, int argc,
|
58
|
+
Local<Value> argv[]);
|
55
59
|
V8_WARN_UNUSED_RESULT MaybeLocal<Value> Call(Local<Context> context,
|
56
60
|
Local<Value> recv, int argc,
|
57
61
|
Local<Value> argv[]);
|
@@ -59,9 +63,6 @@ class V8_EXPORT Function : public Object {
|
|
59
63
|
void SetName(Local<String> name);
|
60
64
|
Local<Value> GetName() const;
|
61
65
|
|
62
|
-
V8_DEPRECATED("No direct replacement")
|
63
|
-
MaybeLocal<UnboundScript> GetUnboundScript() const;
|
64
|
-
|
65
66
|
/**
|
66
67
|
* Name inferred from variable or property assignment of this function.
|
67
68
|
* Used to facilitate debugging and profiling of JavaScript code written
|
@@ -90,7 +90,7 @@ class IndirectHandleBase {
|
|
90
90
|
internal::Address* location_ = nullptr;
|
91
91
|
};
|
92
92
|
|
93
|
-
#ifdef
|
93
|
+
#ifdef V8_ENABLE_DIRECT_HANDLE
|
94
94
|
|
95
95
|
/**
|
96
96
|
* A base class for abstract handles containing direct pointers.
|
@@ -130,7 +130,7 @@ class DirectHandleBase {
|
|
130
130
|
internal::Address ptr_ = internal::ValueHelper::kEmpty;
|
131
131
|
};
|
132
132
|
|
133
|
-
#endif //
|
133
|
+
#endif // V8_ENABLE_DIRECT_HANDLE
|
134
134
|
|
135
135
|
} // namespace v8::api_internal
|
136
136
|
|
@@ -52,6 +52,9 @@ using ReturnAddressLocationResolver =
|
|
52
52
|
using DcheckErrorCallback = void (*)(const char* file, int line,
|
53
53
|
const char* message);
|
54
54
|
|
55
|
+
using V8FatalErrorCallback = void (*)(const char* file, int line,
|
56
|
+
const char* message);
|
57
|
+
|
55
58
|
/**
|
56
59
|
* Container class for static utility functions.
|
57
60
|
*/
|
@@ -77,6 +80,12 @@ class V8_EXPORT V8 {
|
|
77
80
|
/** Set the callback to invoke in case of Dcheck failures. */
|
78
81
|
static void SetDcheckErrorHandler(DcheckErrorCallback that);
|
79
82
|
|
83
|
+
/** Set the callback to invoke in the case of CHECK failures or fatal
|
84
|
+
* errors. This is distinct from Isolate::SetFatalErrorHandler, which
|
85
|
+
* is invoked in response to API usage failures.
|
86
|
+
* */
|
87
|
+
static void SetFatalErrorHandler(V8FatalErrorCallback that);
|
88
|
+
|
80
89
|
/**
|
81
90
|
* Sets V8 flags from a string.
|
82
91
|
*/
|
@@ -97,10 +106,17 @@ class V8_EXPORT V8 {
|
|
97
106
|
* is created. It always returns true.
|
98
107
|
*/
|
99
108
|
V8_INLINE static bool Initialize() {
|
109
|
+
#ifdef V8_TARGET_OS_ANDROID
|
110
|
+
const bool kV8TargetOsIsAndroid = true;
|
111
|
+
#else
|
112
|
+
const bool kV8TargetOsIsAndroid = false;
|
113
|
+
#endif
|
114
|
+
|
100
115
|
const int kBuildConfiguration =
|
101
116
|
(internal::PointerCompressionIsEnabled() ? kPointerCompression : 0) |
|
102
117
|
(internal::SmiValuesAre31Bits() ? k31BitSmis : 0) |
|
103
|
-
(internal::SandboxIsEnabled() ? kSandbox : 0)
|
118
|
+
(internal::SandboxIsEnabled() ? kSandbox : 0) |
|
119
|
+
(kV8TargetOsIsAndroid ? kTargetOsIsAndroid : 0);
|
104
120
|
return Initialize(kBuildConfiguration);
|
105
121
|
}
|
106
122
|
|
@@ -271,6 +287,7 @@ class V8_EXPORT V8 {
|
|
271
287
|
kPointerCompression = 1 << 0,
|
272
288
|
k31BitSmis = 1 << 1,
|
273
289
|
kSandbox = 1 << 2,
|
290
|
+
kTargetOsIsAndroid = 1 << 3,
|
274
291
|
};
|
275
292
|
|
276
293
|
/**
|
@@ -297,9 +297,12 @@ class V8_EXPORT V8InspectorClient {
|
|
297
297
|
return v8::MaybeLocal<v8::Value>();
|
298
298
|
}
|
299
299
|
|
300
|
-
virtual void consoleTime(
|
301
|
-
virtual void consoleTimeEnd(
|
302
|
-
|
300
|
+
virtual void consoleTime(v8::Isolate* isolate, v8::Local<v8::String> label);
|
301
|
+
virtual void consoleTimeEnd(v8::Isolate* isolate,
|
302
|
+
v8::Local<v8::String> label);
|
303
|
+
virtual void consoleTimeStamp(v8::Isolate* isolate,
|
304
|
+
v8::Local<v8::String> label);
|
305
|
+
|
303
306
|
virtual void consoleClear(int contextGroupId) {}
|
304
307
|
virtual double currentTimeMS() { return 0; }
|
305
308
|
typedef void (*TimerCallback)(void*);
|