Skip to content

Commit be499c3

Browse files
committed
src: simplify SlicedArguments
Re-use the existing `MaybeStackBuffer` logic for `SlicedArguments`. PR-URL: #25745 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
1 parent 35454e0 commit be499c3

File tree

4 files changed

+19
-33
lines changed

4 files changed

+19
-33
lines changed

src/inspector_js_api.cc

+5-5
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ void CallAndPauseOnStart(const FunctionCallbackInfo<v8::Value>& args) {
139139
env->inspector_agent()->PauseOnNextJavascriptStatement("Break on start");
140140
v8::MaybeLocal<v8::Value> retval =
141141
args[0].As<v8::Function>()->Call(env->context(), args[1],
142-
call_args.size(), call_args.data());
142+
call_args.length(), call_args.out());
143143
if (!retval.IsEmpty()) {
144144
args.GetReturnValue().Set(retval.ToLocalChecked());
145145
}
@@ -164,8 +164,8 @@ void InspectorConsoleCall(const FunctionCallbackInfo<Value>& info) {
164164
v8::True(isolate)).FromJust());
165165
CHECK(!inspector_method.As<Function>()->Call(context,
166166
info.Holder(),
167-
call_args.size(),
168-
call_args.data()).IsEmpty());
167+
call_args.length(),
168+
call_args.out()).IsEmpty());
169169
}
170170
CHECK(config_object->Delete(context, in_call_key).FromJust());
171171
}
@@ -174,8 +174,8 @@ void InspectorConsoleCall(const FunctionCallbackInfo<Value>& info) {
174174
CHECK(node_method->IsFunction());
175175
node_method.As<Function>()->Call(context,
176176
info.Holder(),
177-
call_args.size(),
178-
call_args.data()).FromMaybe(Local<Value>());
177+
call_args.length(),
178+
call_args.out()).FromMaybe(Local<Value>());
179179
}
180180

181181
static void* GetAsyncTask(int64_t asyncId) {

src/node_perf.cc

+2-2
Original file line numberDiff line numberDiff line change
@@ -344,10 +344,10 @@ void TimerFunctionCall(const FunctionCallbackInfo<Value>& args) {
344344
v8::MaybeLocal<Value> ret;
345345

346346
if (is_construct_call) {
347-
ret = fn->NewInstance(context, call_args.size(), call_args.data())
347+
ret = fn->NewInstance(context, call_args.length(), call_args.out())
348348
.FromMaybe(Local<Object>());
349349
} else {
350-
ret = fn->Call(context, args.This(), call_args.size(), call_args.data());
350+
ret = fn->Call(context, args.This(), call_args.length(), call_args.out());
351351
}
352352

353353
uint64_t end = PERFORMANCE_NOW();

src/util-inl.h

+11
Original file line numberDiff line numberDiff line change
@@ -455,6 +455,17 @@ v8::MaybeLocal<v8::Value> ToV8Value(v8::Local<v8::Context> context,
455455
return v8::Number::New(isolate, static_cast<double>(number));
456456
}
457457

458+
SlicedArguments::SlicedArguments(
459+
const v8::FunctionCallbackInfo<v8::Value>& args, size_t start) {
460+
const size_t length = static_cast<size_t>(args.Length());
461+
if (start >= length) return;
462+
const size_t size = length - start;
463+
464+
AllocateSufficientStorage(size);
465+
for (size_t i = 0; i < size; ++i)
466+
(*this)[i] = args[i + start];
467+
}
468+
458469
} // namespace node
459470

460471
#endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS

src/util.h

+1-26
Original file line numberDiff line numberDiff line change
@@ -629,37 +629,12 @@ constexpr T RoundUp(T a, T b) {
629629
#define MUST_USE_RESULT
630630
#endif
631631

632-
class SlicedArguments {
632+
class SlicedArguments : public MaybeStackBuffer<v8::Local<v8::Value>> {
633633
public:
634634
inline explicit SlicedArguments(
635635
const v8::FunctionCallbackInfo<v8::Value>& args, size_t start = 0);
636-
inline size_t size() const { return size_; }
637-
inline v8::Local<v8::Value>* data() { return data_; }
638-
639-
private:
640-
size_t size_;
641-
v8::Local<v8::Value>* data_;
642-
v8::Local<v8::Value> fixed_[64];
643-
std::vector<v8::Local<v8::Value>> dynamic_;
644636
};
645637

646-
SlicedArguments::SlicedArguments(
647-
const v8::FunctionCallbackInfo<v8::Value>& args, size_t start)
648-
: size_(0), data_(fixed_) {
649-
const size_t length = static_cast<size_t>(args.Length());
650-
if (start >= length) return;
651-
const size_t size = length - start;
652-
653-
if (size > arraysize(fixed_)) {
654-
dynamic_.resize(size);
655-
data_ = dynamic_.data();
656-
}
657-
658-
for (size_t i = 0; i < size; ++i) data_[i] = args[i + start];
659-
660-
size_ = size;
661-
}
662-
663638
} // namespace node
664639

665640
#endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS

0 commit comments

Comments
 (0)