libv8-node 16.10.0.0-aarch64-linux → 18.8.0.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/ext/libv8-node/paths.rb +5 -1
- 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 +100 -22
- data/vendor/v8/include/cppgc/cross-thread-persistent.h +114 -33
- data/vendor/v8/include/cppgc/default-platform.h +2 -10
- data/vendor/v8/include/cppgc/explicit-management.h +22 -4
- data/vendor/v8/include/cppgc/garbage-collected.h +15 -26
- data/vendor/v8/include/cppgc/heap-consistency.h +30 -0
- data/vendor/v8/include/cppgc/heap-state.h +12 -0
- data/vendor/v8/include/cppgc/heap.h +7 -2
- data/vendor/v8/include/cppgc/internal/api-constants.h +8 -0
- data/vendor/v8/include/cppgc/internal/caged-heap-local-data.h +25 -14
- data/vendor/v8/include/cppgc/internal/finalizer-trait.h +4 -1
- data/vendor/v8/include/cppgc/internal/gc-info.h +90 -10
- data/vendor/v8/include/cppgc/internal/logging.h +3 -3
- data/vendor/v8/include/cppgc/internal/name-trait.h +11 -0
- data/vendor/v8/include/cppgc/internal/persistent-node.h +73 -29
- data/vendor/v8/include/cppgc/internal/pointer-policies.h +26 -15
- data/vendor/v8/include/cppgc/internal/write-barrier.h +62 -23
- data/vendor/v8/include/cppgc/liveness-broker.h +4 -1
- data/vendor/v8/include/cppgc/member.h +7 -2
- data/vendor/v8/include/cppgc/persistent.h +38 -33
- data/vendor/v8/include/cppgc/platform.h +4 -1
- data/vendor/v8/include/cppgc/prefinalizer.h +35 -12
- data/vendor/v8/include/cppgc/testing.h +9 -2
- data/vendor/v8/include/cppgc/type-traits.h +6 -13
- data/vendor/v8/include/cppgc/visitor.h +9 -7
- data/vendor/v8/include/libplatform/libplatform.h +0 -11
- data/vendor/v8/include/libplatform/v8-tracing.h +0 -1
- data/vendor/v8/include/v8-array-buffer.h +445 -0
- data/vendor/v8/include/v8-callbacks.h +397 -0
- data/vendor/v8/include/v8-container.h +129 -0
- data/vendor/v8/include/v8-context.h +407 -0
- data/vendor/v8/include/v8-cppgc.h +21 -128
- data/vendor/v8/include/v8-data.h +80 -0
- data/vendor/v8/include/v8-date.h +43 -0
- data/vendor/v8/include/v8-debug.h +168 -0
- data/vendor/v8/include/v8-embedder-heap.h +218 -0
- data/vendor/v8/include/v8-embedder-state-scope.h +51 -0
- data/vendor/v8/include/v8-exception.h +217 -0
- data/vendor/v8/include/v8-extension.h +62 -0
- data/vendor/v8/include/v8-external.h +37 -0
- data/vendor/v8/include/v8-fast-api-calls.h +172 -24
- data/vendor/v8/include/v8-forward.h +81 -0
- data/vendor/v8/include/v8-function-callback.h +475 -0
- data/vendor/v8/include/v8-function.h +125 -0
- data/vendor/v8/include/v8-initialization.h +315 -0
- data/vendor/v8/include/v8-inspector.h +56 -28
- data/vendor/v8/include/v8-internal.h +217 -55
- data/vendor/v8/include/v8-isolate.h +1709 -0
- data/vendor/v8/include/v8-json.h +47 -0
- data/vendor/v8/include/v8-local-handle.h +455 -0
- data/vendor/v8/include/v8-locker.h +149 -0
- data/vendor/v8/include/v8-maybe.h +137 -0
- data/vendor/v8/include/v8-memory-span.h +43 -0
- data/vendor/v8/include/v8-message.h +216 -0
- data/vendor/v8/include/v8-metrics.h +69 -16
- data/vendor/v8/include/v8-microtask-queue.h +152 -0
- data/vendor/v8/include/v8-microtask.h +28 -0
- data/vendor/v8/include/v8-object.h +775 -0
- data/vendor/v8/include/v8-persistent-handle.h +590 -0
- data/vendor/v8/include/v8-platform.h +400 -17
- data/vendor/v8/include/v8-primitive-object.h +118 -0
- data/vendor/v8/include/v8-primitive.h +866 -0
- data/vendor/v8/include/v8-profiler.h +88 -13
- data/vendor/v8/include/v8-promise.h +174 -0
- data/vendor/v8/include/v8-proxy.h +50 -0
- data/vendor/v8/include/v8-regexp.h +105 -0
- data/vendor/v8/include/v8-script.h +747 -0
- data/vendor/v8/include/v8-snapshot.h +196 -0
- data/vendor/v8/include/v8-statistics.h +217 -0
- data/vendor/v8/include/v8-template.h +1079 -0
- data/vendor/v8/include/v8-traced-handle.h +420 -0
- data/vendor/v8/include/v8-typed-array.h +282 -0
- data/vendor/v8/include/v8-unwinder-state.h +4 -3
- data/vendor/v8/include/v8-unwinder.h +132 -0
- data/vendor/v8/include/v8-util.h +7 -1
- data/vendor/v8/include/v8-value-serializer-version.h +1 -1
- data/vendor/v8/include/v8-value-serializer.h +279 -0
- data/vendor/v8/include/v8-value.h +526 -0
- data/vendor/v8/include/v8-version.h +4 -4
- data/vendor/v8/include/v8-wasm.h +257 -0
- data/vendor/v8/include/v8-weak-callback-info.h +87 -0
- data/vendor/v8/include/v8.h +41 -12601
- data/vendor/v8/include/v8config.h +102 -12
- metadata +47 -5
- data/vendor/v8/include/cppgc/internal/prefinalizer-handler.h +0 -30
@@ -11,18 +11,24 @@
|
|
11
11
|
#include <unordered_set>
|
12
12
|
#include <vector>
|
13
13
|
|
14
|
-
#include "v8.h"
|
14
|
+
#include "v8-local-handle.h" // NOLINT(build/include_directory)
|
15
|
+
#include "v8-message.h" // NOLINT(build/include_directory)
|
16
|
+
#include "v8-persistent-handle.h" // NOLINT(build/include_directory)
|
15
17
|
|
16
18
|
/**
|
17
19
|
* Profiler support for the V8 JavaScript engine.
|
18
20
|
*/
|
19
21
|
namespace v8 {
|
20
22
|
|
23
|
+
enum class EmbedderStateTag : uint8_t;
|
21
24
|
class HeapGraphNode;
|
22
25
|
struct HeapStatsUpdate;
|
26
|
+
class Object;
|
27
|
+
enum StateTag : int;
|
23
28
|
|
24
29
|
using NativeObject = void*;
|
25
30
|
using SnapshotObjectId = uint32_t;
|
31
|
+
using ProfilerId = uint32_t;
|
26
32
|
|
27
33
|
struct CpuProfileDeoptFrame {
|
28
34
|
int script_id;
|
@@ -207,6 +213,16 @@ class V8_EXPORT CpuProfile {
|
|
207
213
|
*/
|
208
214
|
int64_t GetStartTime() const;
|
209
215
|
|
216
|
+
/**
|
217
|
+
* Returns state of the vm when sample was captured.
|
218
|
+
*/
|
219
|
+
StateTag GetSampleState(int index) const;
|
220
|
+
|
221
|
+
/**
|
222
|
+
* Returns state of the embedder when sample was captured.
|
223
|
+
*/
|
224
|
+
EmbedderStateTag GetSampleEmbedderState(int index) const;
|
225
|
+
|
210
226
|
/**
|
211
227
|
* Returns time when the profile recording was stopped (in microseconds)
|
212
228
|
* since some unspecified starting point.
|
@@ -258,15 +274,33 @@ enum class CpuProfilingStatus {
|
|
258
274
|
kErrorTooManyProfilers
|
259
275
|
};
|
260
276
|
|
277
|
+
/**
|
278
|
+
* Result from StartProfiling returning the Profiling Status, and
|
279
|
+
* id of the started profiler, or 0 if profiler is not started
|
280
|
+
*/
|
281
|
+
struct CpuProfilingResult {
|
282
|
+
const ProfilerId id;
|
283
|
+
const CpuProfilingStatus status;
|
284
|
+
};
|
285
|
+
|
261
286
|
/**
|
262
287
|
* Delegate for when max samples reached and samples are discarded.
|
263
288
|
*/
|
264
289
|
class V8_EXPORT DiscardedSamplesDelegate {
|
265
290
|
public:
|
266
|
-
DiscardedSamplesDelegate()
|
291
|
+
DiscardedSamplesDelegate() = default;
|
267
292
|
|
268
293
|
virtual ~DiscardedSamplesDelegate() = default;
|
269
294
|
virtual void Notify() = 0;
|
295
|
+
|
296
|
+
ProfilerId GetId() const { return profiler_id_; }
|
297
|
+
|
298
|
+
private:
|
299
|
+
friend internal::CpuProfile;
|
300
|
+
|
301
|
+
void SetId(ProfilerId id) { profiler_id_ = id; }
|
302
|
+
|
303
|
+
ProfilerId profiler_id_;
|
270
304
|
};
|
271
305
|
|
272
306
|
/**
|
@@ -289,8 +323,8 @@ class V8_EXPORT CpuProfilingOptions {
|
|
289
323
|
* interval, set via SetSamplingInterval(). If
|
290
324
|
* zero, the sampling interval will be equal to
|
291
325
|
* the profiler's sampling interval.
|
292
|
-
* \param filter_context
|
293
|
-
*
|
326
|
+
* \param filter_context If specified, profiles will only contain frames
|
327
|
+
* using this context. Other frames will be elided.
|
294
328
|
*/
|
295
329
|
CpuProfilingOptions(
|
296
330
|
CpuProfilingMode mode = kLeafNodeLineNumbers,
|
@@ -304,9 +338,13 @@ class V8_EXPORT CpuProfilingOptions {
|
|
304
338
|
private:
|
305
339
|
friend class internal::CpuProfile;
|
306
340
|
|
341
|
+
bool has_filter_context() const { return !filter_context_.IsEmpty(); }
|
342
|
+
void* raw_filter_context() const;
|
343
|
+
|
307
344
|
CpuProfilingMode mode_;
|
308
345
|
unsigned max_samples_;
|
309
346
|
int sampling_interval_us_;
|
347
|
+
CopyablePersistentTraits<Context>::CopyablePersistent filter_context_;
|
310
348
|
};
|
311
349
|
|
312
350
|
/**
|
@@ -352,6 +390,45 @@ class V8_EXPORT CpuProfiler {
|
|
352
390
|
*/
|
353
391
|
void SetUsePreciseSampling(bool);
|
354
392
|
|
393
|
+
/**
|
394
|
+
* Starts collecting a CPU profile. Several profiles may be collected at once.
|
395
|
+
* Generates an anonymous profiler, without a String identifier.
|
396
|
+
*/
|
397
|
+
CpuProfilingResult Start(
|
398
|
+
CpuProfilingOptions options,
|
399
|
+
std::unique_ptr<DiscardedSamplesDelegate> delegate = nullptr);
|
400
|
+
|
401
|
+
/**
|
402
|
+
* Starts collecting a CPU profile. Title may be an empty string. Several
|
403
|
+
* profiles may be collected at once. Attempts to start collecting several
|
404
|
+
* profiles with the same title are silently ignored.
|
405
|
+
*/
|
406
|
+
CpuProfilingResult Start(
|
407
|
+
Local<String> title, CpuProfilingOptions options,
|
408
|
+
std::unique_ptr<DiscardedSamplesDelegate> delegate = nullptr);
|
409
|
+
|
410
|
+
/**
|
411
|
+
* Starts profiling with the same semantics as above, except with expanded
|
412
|
+
* parameters.
|
413
|
+
*
|
414
|
+
* |record_samples| parameter controls whether individual samples should
|
415
|
+
* be recorded in addition to the aggregated tree.
|
416
|
+
*
|
417
|
+
* |max_samples| controls the maximum number of samples that should be
|
418
|
+
* recorded by the profiler. Samples obtained after this limit will be
|
419
|
+
* discarded.
|
420
|
+
*/
|
421
|
+
CpuProfilingResult Start(
|
422
|
+
Local<String> title, CpuProfilingMode mode, bool record_samples = false,
|
423
|
+
unsigned max_samples = CpuProfilingOptions::kNoSampleLimit);
|
424
|
+
|
425
|
+
/**
|
426
|
+
* The same as StartProfiling above, but the CpuProfilingMode defaults to
|
427
|
+
* kLeafNodeLineNumbers mode, which was the previous default behavior of the
|
428
|
+
* profiler.
|
429
|
+
*/
|
430
|
+
CpuProfilingResult Start(Local<String> title, bool record_samples = false);
|
431
|
+
|
355
432
|
/**
|
356
433
|
* Starts collecting a CPU profile. Title may be an empty string. Several
|
357
434
|
* profiles may be collected at once. Attempts to start collecting several
|
@@ -375,6 +452,7 @@ class V8_EXPORT CpuProfiler {
|
|
375
452
|
CpuProfilingStatus StartProfiling(
|
376
453
|
Local<String> title, CpuProfilingMode mode, bool record_samples = false,
|
377
454
|
unsigned max_samples = CpuProfilingOptions::kNoSampleLimit);
|
455
|
+
|
378
456
|
/**
|
379
457
|
* The same as StartProfiling above, but the CpuProfilingMode defaults to
|
380
458
|
* kLeafNodeLineNumbers mode, which was the previous default behavior of the
|
@@ -383,6 +461,11 @@ class V8_EXPORT CpuProfiler {
|
|
383
461
|
CpuProfilingStatus StartProfiling(Local<String> title,
|
384
462
|
bool record_samples = false);
|
385
463
|
|
464
|
+
/**
|
465
|
+
* Stops collecting CPU profile with a given id and returns it.
|
466
|
+
*/
|
467
|
+
CpuProfile* Stop(ProfilerId id);
|
468
|
+
|
386
469
|
/**
|
387
470
|
* Stops collecting CPU profile with a given title and returns it.
|
388
471
|
* If the title given is empty, finishes the last profile started.
|
@@ -596,7 +679,7 @@ class V8_EXPORT ActivityControl {
|
|
596
679
|
* Notify about current progress. The activity can be stopped by
|
597
680
|
* returning kAbort as the callback result.
|
598
681
|
*/
|
599
|
-
virtual ControlOption ReportProgressValue(
|
682
|
+
virtual ControlOption ReportProgressValue(uint32_t done, uint32_t total) = 0;
|
600
683
|
};
|
601
684
|
|
602
685
|
/**
|
@@ -896,14 +979,6 @@ class V8_EXPORT HeapProfiler {
|
|
896
979
|
* Takes a heap snapshot and returns it.
|
897
980
|
*/
|
898
981
|
const HeapSnapshot* TakeHeapSnapshot(
|
899
|
-
ActivityControl* control = nullptr,
|
900
|
-
ObjectNameResolver* global_object_name_resolver = nullptr,
|
901
|
-
bool treat_global_objects_as_roots = true);
|
902
|
-
|
903
|
-
/**
|
904
|
-
* Takes a heap snapshot and returns it.
|
905
|
-
*/
|
906
|
-
const HeapSnapshot* TakeHeapSnapshotV8_92(
|
907
982
|
ActivityControl* control = nullptr,
|
908
983
|
ObjectNameResolver* global_object_name_resolver = nullptr,
|
909
984
|
bool treat_global_objects_as_roots = true,
|
@@ -0,0 +1,174 @@
|
|
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_PROMISE_H_
|
6
|
+
#define INCLUDE_V8_PROMISE_H_
|
7
|
+
|
8
|
+
#include "v8-local-handle.h" // NOLINT(build/include_directory)
|
9
|
+
#include "v8-object.h" // NOLINT(build/include_directory)
|
10
|
+
#include "v8config.h" // NOLINT(build/include_directory)
|
11
|
+
|
12
|
+
namespace v8 {
|
13
|
+
|
14
|
+
class Context;
|
15
|
+
|
16
|
+
#ifndef V8_PROMISE_INTERNAL_FIELD_COUNT
|
17
|
+
// The number of required internal fields can be defined by embedder.
|
18
|
+
#define V8_PROMISE_INTERNAL_FIELD_COUNT 0
|
19
|
+
#endif
|
20
|
+
|
21
|
+
/**
|
22
|
+
* An instance of the built-in Promise constructor (ES6 draft).
|
23
|
+
*/
|
24
|
+
class V8_EXPORT Promise : public Object {
|
25
|
+
public:
|
26
|
+
/**
|
27
|
+
* State of the promise. Each value corresponds to one of the possible values
|
28
|
+
* of the [[PromiseState]] field.
|
29
|
+
*/
|
30
|
+
enum PromiseState { kPending, kFulfilled, kRejected };
|
31
|
+
|
32
|
+
class V8_EXPORT Resolver : public Object {
|
33
|
+
public:
|
34
|
+
/**
|
35
|
+
* Create a new resolver, along with an associated promise in pending state.
|
36
|
+
*/
|
37
|
+
static V8_WARN_UNUSED_RESULT MaybeLocal<Resolver> New(
|
38
|
+
Local<Context> context);
|
39
|
+
|
40
|
+
/**
|
41
|
+
* Extract the associated promise.
|
42
|
+
*/
|
43
|
+
Local<Promise> GetPromise();
|
44
|
+
|
45
|
+
/**
|
46
|
+
* Resolve/reject the associated promise with a given value.
|
47
|
+
* Ignored if the promise is no longer pending.
|
48
|
+
*/
|
49
|
+
V8_WARN_UNUSED_RESULT Maybe<bool> Resolve(Local<Context> context,
|
50
|
+
Local<Value> value);
|
51
|
+
|
52
|
+
V8_WARN_UNUSED_RESULT Maybe<bool> Reject(Local<Context> context,
|
53
|
+
Local<Value> value);
|
54
|
+
|
55
|
+
V8_INLINE static Resolver* Cast(Value* value) {
|
56
|
+
#ifdef V8_ENABLE_CHECKS
|
57
|
+
CheckCast(value);
|
58
|
+
#endif
|
59
|
+
return static_cast<Promise::Resolver*>(value);
|
60
|
+
}
|
61
|
+
|
62
|
+
private:
|
63
|
+
Resolver();
|
64
|
+
static void CheckCast(Value* obj);
|
65
|
+
};
|
66
|
+
|
67
|
+
/**
|
68
|
+
* Register a resolution/rejection handler with a promise.
|
69
|
+
* The handler is given the respective resolution/rejection value as
|
70
|
+
* an argument. If the promise is already resolved/rejected, the handler is
|
71
|
+
* invoked at the end of turn.
|
72
|
+
*/
|
73
|
+
V8_WARN_UNUSED_RESULT MaybeLocal<Promise> Catch(Local<Context> context,
|
74
|
+
Local<Function> handler);
|
75
|
+
|
76
|
+
V8_WARN_UNUSED_RESULT MaybeLocal<Promise> Then(Local<Context> context,
|
77
|
+
Local<Function> handler);
|
78
|
+
|
79
|
+
V8_WARN_UNUSED_RESULT MaybeLocal<Promise> Then(Local<Context> context,
|
80
|
+
Local<Function> on_fulfilled,
|
81
|
+
Local<Function> on_rejected);
|
82
|
+
|
83
|
+
/**
|
84
|
+
* Returns true if the promise has at least one derived promise, and
|
85
|
+
* therefore resolve/reject handlers (including default handler).
|
86
|
+
*/
|
87
|
+
bool HasHandler() const;
|
88
|
+
|
89
|
+
/**
|
90
|
+
* Returns the content of the [[PromiseResult]] field. The Promise must not
|
91
|
+
* be pending.
|
92
|
+
*/
|
93
|
+
Local<Value> Result();
|
94
|
+
|
95
|
+
/**
|
96
|
+
* Returns the value of the [[PromiseState]] field.
|
97
|
+
*/
|
98
|
+
PromiseState State();
|
99
|
+
|
100
|
+
/**
|
101
|
+
* Marks this promise as handled to avoid reporting unhandled rejections.
|
102
|
+
*/
|
103
|
+
void MarkAsHandled();
|
104
|
+
|
105
|
+
/**
|
106
|
+
* Marks this promise as silent to prevent pausing the debugger when the
|
107
|
+
* promise is rejected.
|
108
|
+
*/
|
109
|
+
void MarkAsSilent();
|
110
|
+
|
111
|
+
V8_INLINE static Promise* Cast(Value* value) {
|
112
|
+
#ifdef V8_ENABLE_CHECKS
|
113
|
+
CheckCast(value);
|
114
|
+
#endif
|
115
|
+
return static_cast<Promise*>(value);
|
116
|
+
}
|
117
|
+
|
118
|
+
static const int kEmbedderFieldCount = V8_PROMISE_INTERNAL_FIELD_COUNT;
|
119
|
+
|
120
|
+
private:
|
121
|
+
Promise();
|
122
|
+
static void CheckCast(Value* obj);
|
123
|
+
};
|
124
|
+
|
125
|
+
/**
|
126
|
+
* PromiseHook with type kInit is called when a new promise is
|
127
|
+
* created. When a new promise is created as part of the chain in the
|
128
|
+
* case of Promise.then or in the intermediate promises created by
|
129
|
+
* Promise.{race, all}/AsyncFunctionAwait, we pass the parent promise
|
130
|
+
* otherwise we pass undefined.
|
131
|
+
*
|
132
|
+
* PromiseHook with type kResolve is called at the beginning of
|
133
|
+
* resolve or reject function defined by CreateResolvingFunctions.
|
134
|
+
*
|
135
|
+
* PromiseHook with type kBefore is called at the beginning of the
|
136
|
+
* PromiseReactionJob.
|
137
|
+
*
|
138
|
+
* PromiseHook with type kAfter is called right at the end of the
|
139
|
+
* PromiseReactionJob.
|
140
|
+
*/
|
141
|
+
enum class PromiseHookType { kInit, kResolve, kBefore, kAfter };
|
142
|
+
|
143
|
+
using PromiseHook = void (*)(PromiseHookType type, Local<Promise> promise,
|
144
|
+
Local<Value> parent);
|
145
|
+
|
146
|
+
// --- Promise Reject Callback ---
|
147
|
+
enum PromiseRejectEvent {
|
148
|
+
kPromiseRejectWithNoHandler = 0,
|
149
|
+
kPromiseHandlerAddedAfterReject = 1,
|
150
|
+
kPromiseRejectAfterResolved = 2,
|
151
|
+
kPromiseResolveAfterResolved = 3,
|
152
|
+
};
|
153
|
+
|
154
|
+
class PromiseRejectMessage {
|
155
|
+
public:
|
156
|
+
PromiseRejectMessage(Local<Promise> promise, PromiseRejectEvent event,
|
157
|
+
Local<Value> value)
|
158
|
+
: promise_(promise), event_(event), value_(value) {}
|
159
|
+
|
160
|
+
V8_INLINE Local<Promise> GetPromise() const { return promise_; }
|
161
|
+
V8_INLINE PromiseRejectEvent GetEvent() const { return event_; }
|
162
|
+
V8_INLINE Local<Value> GetValue() const { return value_; }
|
163
|
+
|
164
|
+
private:
|
165
|
+
Local<Promise> promise_;
|
166
|
+
PromiseRejectEvent event_;
|
167
|
+
Local<Value> value_;
|
168
|
+
};
|
169
|
+
|
170
|
+
using PromiseRejectCallback = void (*)(PromiseRejectMessage message);
|
171
|
+
|
172
|
+
} // namespace v8
|
173
|
+
|
174
|
+
#endif // INCLUDE_V8_PROMISE_H_
|
@@ -0,0 +1,50 @@
|
|
1
|
+
|
2
|
+
// Copyright 2021 the V8 project authors. All rights reserved.
|
3
|
+
// Use of this source code is governed by a BSD-style license that can be
|
4
|
+
// found in the LICENSE file.
|
5
|
+
|
6
|
+
#ifndef INCLUDE_V8_PROXY_H_
|
7
|
+
#define INCLUDE_V8_PROXY_H_
|
8
|
+
|
9
|
+
#include "v8-context.h" // NOLINT(build/include_directory)
|
10
|
+
#include "v8-local-handle.h" // NOLINT(build/include_directory)
|
11
|
+
#include "v8-object.h" // NOLINT(build/include_directory)
|
12
|
+
#include "v8config.h" // NOLINT(build/include_directory)
|
13
|
+
|
14
|
+
namespace v8 {
|
15
|
+
|
16
|
+
class Context;
|
17
|
+
|
18
|
+
/**
|
19
|
+
* An instance of the built-in Proxy constructor (ECMA-262, 6th Edition,
|
20
|
+
* 26.2.1).
|
21
|
+
*/
|
22
|
+
class V8_EXPORT Proxy : public Object {
|
23
|
+
public:
|
24
|
+
Local<Value> GetTarget();
|
25
|
+
Local<Value> GetHandler();
|
26
|
+
bool IsRevoked() const;
|
27
|
+
void Revoke();
|
28
|
+
|
29
|
+
/**
|
30
|
+
* Creates a new Proxy for the target object.
|
31
|
+
*/
|
32
|
+
static MaybeLocal<Proxy> New(Local<Context> context,
|
33
|
+
Local<Object> local_target,
|
34
|
+
Local<Object> local_handler);
|
35
|
+
|
36
|
+
V8_INLINE static Proxy* Cast(Value* value) {
|
37
|
+
#ifdef V8_ENABLE_CHECKS
|
38
|
+
CheckCast(value);
|
39
|
+
#endif
|
40
|
+
return static_cast<Proxy*>(value);
|
41
|
+
}
|
42
|
+
|
43
|
+
private:
|
44
|
+
Proxy();
|
45
|
+
static void CheckCast(Value* obj);
|
46
|
+
};
|
47
|
+
|
48
|
+
} // namespace v8
|
49
|
+
|
50
|
+
#endif // INCLUDE_V8_PROXY_H_
|
@@ -0,0 +1,105 @@
|
|
1
|
+
|
2
|
+
// Copyright 2021 the V8 project authors. All rights reserved.
|
3
|
+
// Use of this source code is governed by a BSD-style license that can be
|
4
|
+
// found in the LICENSE file.
|
5
|
+
|
6
|
+
#ifndef INCLUDE_V8_REGEXP_H_
|
7
|
+
#define INCLUDE_V8_REGEXP_H_
|
8
|
+
|
9
|
+
#include "v8-local-handle.h" // NOLINT(build/include_directory)
|
10
|
+
#include "v8-object.h" // NOLINT(build/include_directory)
|
11
|
+
#include "v8config.h" // NOLINT(build/include_directory)
|
12
|
+
|
13
|
+
namespace v8 {
|
14
|
+
|
15
|
+
class Context;
|
16
|
+
|
17
|
+
/**
|
18
|
+
* An instance of the built-in RegExp constructor (ECMA-262, 15.10).
|
19
|
+
*/
|
20
|
+
class V8_EXPORT RegExp : public Object {
|
21
|
+
public:
|
22
|
+
/**
|
23
|
+
* Regular expression flag bits. They can be or'ed to enable a set
|
24
|
+
* of flags.
|
25
|
+
* The kLinear value ('l') is experimental and can only be used with
|
26
|
+
* --enable-experimental-regexp-engine. RegExps with kLinear flag are
|
27
|
+
* guaranteed to be executed in asymptotic linear time wrt. the length of
|
28
|
+
* the subject string.
|
29
|
+
*/
|
30
|
+
enum Flags {
|
31
|
+
kNone = 0,
|
32
|
+
kGlobal = 1 << 0,
|
33
|
+
kIgnoreCase = 1 << 1,
|
34
|
+
kMultiline = 1 << 2,
|
35
|
+
kSticky = 1 << 3,
|
36
|
+
kUnicode = 1 << 4,
|
37
|
+
kDotAll = 1 << 5,
|
38
|
+
kLinear = 1 << 6,
|
39
|
+
kHasIndices = 1 << 7,
|
40
|
+
};
|
41
|
+
|
42
|
+
static constexpr int kFlagCount = 8;
|
43
|
+
|
44
|
+
/**
|
45
|
+
* Creates a regular expression from the given pattern string and
|
46
|
+
* the flags bit field. May throw a JavaScript exception as
|
47
|
+
* described in ECMA-262, 15.10.4.1.
|
48
|
+
*
|
49
|
+
* For example,
|
50
|
+
* RegExp::New(v8::String::New("foo"),
|
51
|
+
* static_cast<RegExp::Flags>(kGlobal | kMultiline))
|
52
|
+
* is equivalent to evaluating "/foo/gm".
|
53
|
+
*/
|
54
|
+
static V8_WARN_UNUSED_RESULT MaybeLocal<RegExp> New(Local<Context> context,
|
55
|
+
Local<String> pattern,
|
56
|
+
Flags flags);
|
57
|
+
|
58
|
+
/**
|
59
|
+
* Like New, but additionally specifies a backtrack limit. If the number of
|
60
|
+
* backtracks done in one Exec call hits the limit, a match failure is
|
61
|
+
* immediately returned.
|
62
|
+
*/
|
63
|
+
static V8_WARN_UNUSED_RESULT MaybeLocal<RegExp> NewWithBacktrackLimit(
|
64
|
+
Local<Context> context, Local<String> pattern, Flags flags,
|
65
|
+
uint32_t backtrack_limit);
|
66
|
+
|
67
|
+
/**
|
68
|
+
* Executes the current RegExp instance on the given subject string.
|
69
|
+
* Equivalent to RegExp.prototype.exec as described in
|
70
|
+
*
|
71
|
+
* https://tc39.es/ecma262/#sec-regexp.prototype.exec
|
72
|
+
*
|
73
|
+
* On success, an Array containing the matched strings is returned. On
|
74
|
+
* failure, returns Null.
|
75
|
+
*
|
76
|
+
* Note: modifies global context state, accessible e.g. through RegExp.input.
|
77
|
+
*/
|
78
|
+
V8_WARN_UNUSED_RESULT MaybeLocal<Object> Exec(Local<Context> context,
|
79
|
+
Local<String> subject);
|
80
|
+
|
81
|
+
/**
|
82
|
+
* Returns the value of the source property: a string representing
|
83
|
+
* the regular expression.
|
84
|
+
*/
|
85
|
+
Local<String> GetSource() const;
|
86
|
+
|
87
|
+
/**
|
88
|
+
* Returns the flags bit field.
|
89
|
+
*/
|
90
|
+
Flags GetFlags() const;
|
91
|
+
|
92
|
+
V8_INLINE static RegExp* Cast(Value* value) {
|
93
|
+
#ifdef V8_ENABLE_CHECKS
|
94
|
+
CheckCast(value);
|
95
|
+
#endif
|
96
|
+
return static_cast<RegExp*>(value);
|
97
|
+
}
|
98
|
+
|
99
|
+
private:
|
100
|
+
static void CheckCast(Value* obj);
|
101
|
+
};
|
102
|
+
|
103
|
+
} // namespace v8
|
104
|
+
|
105
|
+
#endif // INCLUDE_V8_REGEXP_H_
|