Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 2 additions & 4 deletions src/css_jsc/css_internals.rs
Original file line number Diff line number Diff line change
Expand Up @@ -106,10 +106,9 @@ pub(crate) fn testing_impl(
// out of it below.
let alloc: &'static Arena = unsafe { bun_ptr::detach_lifetime_ref(&arena) };

let arguments_ = frame.arguments_old::<3>();
// SAFETY: bunVM() never returns null for a Bun-owned global; reborrow the
// raw `*mut VirtualMachine` as a shared ref for the slice's lifetime.
let mut arguments = bun_jsc::ArgumentsSlice::init(global.bun_vm(), arguments_.slice());
let mut arguments = bun_jsc::ArgumentsSlice::init(global.bun_vm(), frame.arguments());
let source_bunstr = eat_string_arg(
&mut arguments,
global,
Expand Down Expand Up @@ -316,9 +315,8 @@ pub fn attr_test(global: &JSGlobalObject, frame: &CallFrame) -> JsResult<JSValue
// `stylesheet` below.
let alloc: &'static Arena = unsafe { bun_ptr::detach_lifetime_ref(&arena) };

let arguments_ = frame.arguments_old::<4>();
// SAFETY: bunVM() never returns null for a Bun-owned global.
let mut arguments = bun_jsc::ArgumentsSlice::init(global.bun_vm(), arguments_.slice());
let mut arguments = bun_jsc::ArgumentsSlice::init(global.bun_vm(), frame.arguments());
let source_bunstr = eat_string_arg(&mut arguments, global, "attrTest", 3, 0, "source")?;
let source = source_bunstr.to_utf8();

Expand Down
6 changes: 2 additions & 4 deletions src/install_jsc/dependency_jsc.rs
Original file line number Diff line number Diff line change
Expand Up @@ -104,8 +104,7 @@ pub fn tag_infer_from_js(global: &JSGlobalObject, frame: &CallFrame) -> JsResult
use bun_core::String as BunString;
use bun_install::dependency::{TagExt, version::Tag};

let arguments = frame.arguments_old::<1>();
let arguments = arguments.slice();
let arguments = frame.arguments();
if arguments.is_empty() || !arguments[0].is_string() {
return Ok(JSValue::UNDEFINED);
}
Expand Down Expand Up @@ -133,8 +132,7 @@ pub fn dependency_from_js(global: &JSGlobalObject, frame: &CallFrame) -> JsResul
use bun_install::dependency;
use bun_semver::SlicedString;

let arguments = frame.arguments_old::<2>();
let arguments = arguments.slice();
let arguments = frame.arguments();
if arguments.len() == 1 {
return crate::update_request_jsc::from_js(global, arguments[0]);
}
Expand Down
3 changes: 1 addition & 2 deletions src/install_jsc/ini_jsc.rs
Original file line number Diff line number Diff line change
Expand Up @@ -193,8 +193,7 @@ impl IniTestingAPIs {
use bun_ini::Parser;
use bun_jsc::JsError;

let arguments_ = frame.arguments_old::<1>();
let arguments = arguments_.slice();
let arguments = frame.arguments();

let jsstr = arguments[0];
let bunstr = bun_core::OwnedString::new(jsstr.to_bun_string(global)?);
Expand Down
3 changes: 1 addition & 2 deletions src/install_jsc/install_binding.rs
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,7 @@ pub mod bun_install_js_bindings {

let mut log = bun_ast::Log::init();

let args = frame.arguments_old::<1>();
let args = args.slice();
let args = frame.arguments();
let cwd = args[0].to_slice_or_null(global)?;

let dir = match bun_sys::open_dir_absolute_not_for_deleting_or_renaming(cwd.slice()) {
Expand Down
11 changes: 5 additions & 6 deletions src/install_jsc/npm_jsc.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ use bun_jsc::{CallFrame, JSGlobalObject, JSValue, JsResult};

pub fn operating_system_is_match(global: &JSGlobalObject, frame: &CallFrame) -> JsResult<JSValue> {
use bun_install::npm;
let args = frame.arguments_old::<1>();
let [arg] = frame.arguments_as_array::<1>();
let mut operating_system = npm::OperatingSystem::NONE.negatable();
let mut iter = args.ptr[0].array_iterator(global)?;
let mut iter = arg.array_iterator(global)?;
while let Some(item) = iter.next()? {
let slice = item.to_slice(global)?;
operating_system.apply(slice.slice());
Expand All @@ -27,9 +27,9 @@ pub fn operating_system_is_match(global: &JSGlobalObject, frame: &CallFrame) ->

pub fn architecture_is_match(global: &JSGlobalObject, frame: &CallFrame) -> JsResult<JSValue> {
use bun_install::npm;
let args = frame.arguments_old::<1>();
let [arg] = frame.arguments_as_array::<1>();
let mut architecture = npm::Architecture::NONE.negatable();
let mut iter = args.ptr[0].array_iterator(global)?;
let mut iter = arg.array_iterator(global)?;
while let Some(item) = iter.next()? {
let slice = item.to_slice(global)?;
architecture.apply(slice.slice());
Expand Down Expand Up @@ -87,8 +87,7 @@ pub(crate) fn js_parse_manifest(global: &JSGlobalObject, frame: &CallFrame) -> J
use bun_jsc::JsError;
use std::io::Write as _;

let args = frame.arguments_old::<2>();
let args = args.slice();
let args = frame.arguments();
if args.len() < 2 || !args[0].is_string() || !args[1].is_string() {
return Err(global.throw(format_args!(
"expected manifest filename and registry string arguments"
Expand Down
3 changes: 1 addition & 2 deletions src/jsc/BuildMessage.rs
Original file line number Diff line number Diff line change
Expand Up @@ -106,8 +106,7 @@ impl BuildMessage {
global: &JSGlobalObject,
callframe: &CallFrame,
) -> JsResult<JSValue> {
let args_ = callframe.arguments_old::<1>();
let args = &args_.ptr[0..args_.len];
let args = callframe.arguments();
if !args.is_empty() {
if !args[0].is_string() {
return Ok(JSValue::NULL);
Expand Down
27 changes: 1 addition & 26 deletions src/jsc/CallFrame.rs
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ impl CallFrame {
pub fn arguments_as_array<const COUNT: usize>(&self) -> [JSValue; COUNT] {
let slice = self.arguments();
let mut value: [JSValue; COUNT] = [JSValue::UNDEFINED; COUNT];
let n = (self.arguments_count() as usize).min(COUNT);
let n = slice.len().min(COUNT);
value[0..n].copy_from_slice(&slice[0..n]);
value
}
Expand Down Expand Up @@ -128,24 +128,6 @@ impl CallFrame {
}
}

/// Do not use this function. Migration path:
/// arguments(n).ptr[k] -> arguments_as_array::<n>()[k]
/// arguments(n).slice() -> arguments()
/// arguments(n).mut() -> `let mut args = arguments_as_array::<n>(); &mut args`
pub fn arguments_old<const MAX: usize>(&self) -> Arguments<MAX> {
let slice = self.arguments();
debug_assert!(MAX <= 15);
let count = slice.len().min(MAX);
if count == 0 {
Arguments {
ptr: [JSValue::ZERO; MAX],
len: 0,
}
} else {
Arguments::<MAX>::init(count.min(MAX), slice)
}
}

/// Do not use this function. Migration path:
/// arguments_as_array::<n>()
pub fn arguments_undef<const MAX: usize>(&self) -> Arguments<MAX> {
Expand Down Expand Up @@ -220,13 +202,6 @@ pub struct Arguments<const MAX: usize> {
}

impl<const MAX: usize> Arguments<MAX> {
#[inline]
pub fn init(i: usize, src: &[JSValue]) -> Self {
let mut args: [JSValue; MAX] = [JSValue::ZERO; MAX];
args[0..i].copy_from_slice(&src[0..i]);
Self { ptr: args, len: i }
}

#[inline]
pub fn init_undef(i: usize, src: &[JSValue]) -> Self {
let mut args: [JSValue; MAX] = [JSValue::UNDEFINED; MAX];
Expand Down
3 changes: 1 addition & 2 deletions src/jsc/ResolveMessage.rs
Original file line number Diff line number Diff line change
Expand Up @@ -267,8 +267,7 @@ impl ResolveMessage {
global: &JSGlobalObject,
callframe: &CallFrame,
) -> JsResult<JSValue> {
let args_ = callframe.arguments_old::<1>();
let args = &args_.ptr[0..args_.len];
let args = callframe.arguments();
if !args.is_empty() {
if !args[0].is_string() {
return Ok(JSValue::NULL);
Expand Down
10 changes: 5 additions & 5 deletions src/jsc/virtual_machine_exports.rs
Original file line number Diff line number Diff line change
Expand Up @@ -323,23 +323,23 @@ pub fn Bun__setSyntheticAllocationLimitForTesting(
global: &JSGlobalObject,
frame: &CallFrame,
) -> JsResult<JSValue> {
let args = frame.arguments_old::<1>();
if args.len < 1 {
let [arg] = frame.arguments_as_array::<1>();
if frame.arguments_count() < 1 {
return Err(global.throw_not_enough_arguments(
"setSyntheticAllocationLimitForTesting",
1,
args.len,
frame.arguments_count() as usize,
));
}

if !args.ptr[0].is_number() {
if !arg.is_number() {
return Err(global.throw_invalid_arguments(format_args!(
"setSyntheticAllocationLimitForTesting expects a number"
)));
}

let limit: usize =
usize::try_from(args.ptr[0].coerce_to_int64(global)?.max(1024 * 1024)).expect("int cast");
usize::try_from(arg.coerce_to_int64(global)?.max(1024 * 1024)).expect("int cast");
let prev = crate::virtual_machine::SYNTHETIC_ALLOCATION_LIMIT
.swap(limit, core::sync::atomic::Ordering::Relaxed);
crate::virtual_machine::STRING_ALLOCATION_LIMIT
Expand Down
9 changes: 3 additions & 6 deletions src/patch_jsc/testing.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,9 @@ impl TestingAPIs {
// `fn_name(g, f)` call, so it cannot wrap an associated fn. The C-ABI
// shim is emitted at module scope below (`__jsc_host_*`).
pub fn make_diff(global: &JSGlobalObject, frame: &CallFrame) -> JsResult<JSValue> {
let arguments_ = frame.arguments_old::<2>();
// SAFETY: `bun_vm()` never returns null for a Bun-owned global; the VM
// outlives this call frame.
let mut arguments = ArgumentsSlice::init(global.bun_vm(), arguments_.slice());
let mut arguments = ArgumentsSlice::init(global.bun_vm(), frame.arguments());

let Some(old_folder_jsval) = arguments.next_eat() else {
return Err(global.throw(format_args!("expected 2 strings")));
Expand Down Expand Up @@ -74,10 +73,9 @@ impl TestingAPIs {

/// Used in JS tests, see `internal-for-testing.ts` and patch tests.
pub fn parse(global: &JSGlobalObject, frame: &CallFrame) -> JsResult<JSValue> {
let arguments_ = frame.arguments_old::<2>();
// SAFETY: `bun_vm()` never returns null for a Bun-owned global; the VM
// outlives this call frame.
let mut arguments = ArgumentsSlice::init(global.bun_vm(), arguments_.slice());
let mut arguments = ArgumentsSlice::init(global.bun_vm(), frame.arguments());

let Some(patchfile_src_js) = arguments.next_eat() else {
return Err(global.throw(format_args!(
Expand Down Expand Up @@ -112,10 +110,9 @@ impl TestingAPIs {
}

pub fn parse_apply_args(global: &JSGlobalObject, frame: &CallFrame) -> JsResult<ApplyArgs> {
let arguments_ = frame.arguments_old::<2>();
// SAFETY: `bun_vm()` never returns null for a Bun-owned global; the VM
// outlives this call frame.
let mut arguments = ArgumentsSlice::init(global.bun_vm(), arguments_.slice());
let mut arguments = ArgumentsSlice::init(global.bun_vm(), frame.arguments());

let Some(patchfile_js) = arguments.next_eat() else {
return Err(global.throw(format_args!("apply: expected at least 1 argument, got 0")));
Expand Down
Loading
Loading