summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
Diffstat (limited to 'ext')
-rw-r--r--ext/ffi/00_ffi.js17
-rw-r--r--ext/ffi/callback.rs15
-rw-r--r--ext/ffi/ir.rs43
-rw-r--r--ext/ffi/lib.rs3
-rw-r--r--ext/ffi/static.rs32
5 files changed, 14 insertions, 96 deletions
diff --git a/ext/ffi/00_ffi.js b/ext/ffi/00_ffi.js
index 19d62dfdd..7f39db13e 100644
--- a/ext/ffi/00_ffi.js
+++ b/ext/ffi/00_ffi.js
@@ -46,7 +46,6 @@ const {
ObjectDefineProperty,
ObjectHasOwn,
ObjectPrototypeIsPrototypeOf,
- Number,
NumberIsSafeInteger,
TypedArrayPrototypeGetBuffer,
TypedArrayPrototypeGetByteLength,
@@ -348,10 +347,6 @@ function isReturnedAsBigInt(type) {
type === "usize" || type === "isize";
}
-function isI64(type) {
- return type === "i64" || type === "isize";
-}
-
function isStruct(type) {
return typeof type === "object" && type !== null &&
typeof type.struct === "object";
@@ -562,7 +557,6 @@ class DynamicLibrary {
const call = this.symbols[symbol];
const parameters = symbols[symbol].parameters;
const vi = new Int32Array(2);
- const vui = new Uint32Array(TypedArrayPrototypeGetBuffer(vi));
const b = new BigInt64Array(TypedArrayPrototypeGetBuffer(vi));
const params = ArrayPrototypeJoin(
@@ -572,22 +566,13 @@ class DynamicLibrary {
// Make sure V8 has no excuse to not optimize this function.
this.symbols[symbol] = new Function(
"vi",
- "vui",
"b",
"call",
- "NumberIsSafeInteger",
- "Number",
`return function (${params}) {
call(${params}${parameters.length > 0 ? ", " : ""}vi);
- ${
- isI64(resultType)
- ? `const n1 = Number(b[0])`
- : `const n1 = vui[0] + 2 ** 32 * vui[1]` // Faster path for u64
- };
- if (NumberIsSafeInteger(n1)) return n1;
return b[0];
}`,
- )(vi, vui, b, call, NumberIsSafeInteger, Number);
+ )(vi, b, call);
} else if (isStructResult && !isNonBlocking) {
const call = this.symbols[symbol];
const parameters = symbols[symbol].parameters;
diff --git a/ext/ffi/callback.rs b/ext/ffi/callback.rs
index 55f38c602..1ddb1fff5 100644
--- a/ext/ffi/callback.rs
+++ b/ext/ffi/callback.rs
@@ -4,8 +4,6 @@ use crate::check_unstable;
use crate::symbol::NativeType;
use crate::FfiPermissions;
use crate::ForeignFunction;
-use crate::MAX_SAFE_INTEGER;
-use crate::MIN_SAFE_INTEGER;
use deno_core::error::AnyError;
use deno_core::op2;
use deno_core::v8;
@@ -243,20 +241,11 @@ unsafe fn do_ffi_callback(
}
NativeType::I64 | NativeType::ISize => {
let result = *((*val) as *const i64);
- if result > MAX_SAFE_INTEGER as i64 || result < MIN_SAFE_INTEGER as i64
- {
- v8::BigInt::new_from_i64(scope, result).into()
- } else {
- v8::Number::new(scope, result as f64).into()
- }
+ v8::BigInt::new_from_i64(scope, result).into()
}
NativeType::U64 | NativeType::USize => {
let result = *((*val) as *const u64);
- if result > MAX_SAFE_INTEGER as u64 {
- v8::BigInt::new_from_u64(scope, result).into()
- } else {
- v8::Number::new(scope, result as f64).into()
- }
+ v8::BigInt::new_from_u64(scope, result).into()
}
NativeType::Pointer | NativeType::Buffer | NativeType::Function => {
let result = *((*val) as *const *mut c_void);
diff --git a/ext/ffi/ir.rs b/ext/ffi/ir.rs
index 6fd1f53ea..520ead92e 100644
--- a/ext/ffi/ir.rs
+++ b/ext/ffi/ir.rs
@@ -1,8 +1,6 @@
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
use crate::symbol::NativeType;
-use crate::MAX_SAFE_INTEGER;
-use crate::MIN_SAFE_INTEGER;
use deno_core::error::type_error;
use deno_core::error::AnyError;
use deno_core::v8;
@@ -100,46 +98,13 @@ impl NativeValue {
v8::Integer::new_from_unsigned(scope, self.u32_value).into()
}
NativeType::I32 => v8::Integer::new(scope, self.i32_value).into(),
- NativeType::U64 => {
- let value = self.u64_value;
- let local_value: v8::Local<v8::Value> =
- if value > MAX_SAFE_INTEGER as u64 {
- v8::BigInt::new_from_u64(scope, value).into()
- } else {
- v8::Number::new(scope, value as f64).into()
- };
- local_value
- }
- NativeType::I64 => {
- let value = self.i64_value;
- let local_value: v8::Local<v8::Value> =
- if value > MAX_SAFE_INTEGER as i64 || value < MIN_SAFE_INTEGER as i64
- {
- v8::BigInt::new_from_i64(scope, self.i64_value).into()
- } else {
- v8::Number::new(scope, value as f64).into()
- };
- local_value
- }
+ NativeType::U64 => v8::BigInt::new_from_u64(scope, self.u64_value).into(),
+ NativeType::I64 => v8::BigInt::new_from_i64(scope, self.i64_value).into(),
NativeType::USize => {
- let value = self.usize_value;
- let local_value: v8::Local<v8::Value> =
- if value > MAX_SAFE_INTEGER as usize {
- v8::BigInt::new_from_u64(scope, value as u64).into()
- } else {
- v8::Number::new(scope, value as f64).into()
- };
- local_value
+ v8::BigInt::new_from_u64(scope, self.usize_value as u64).into()
}
NativeType::ISize => {
- let value = self.isize_value;
- let local_value: v8::Local<v8::Value> =
- if !(MIN_SAFE_INTEGER..=MAX_SAFE_INTEGER).contains(&value) {
- v8::BigInt::new_from_i64(scope, self.isize_value as i64).into()
- } else {
- v8::Number::new(scope, value as f64).into()
- };
- local_value
+ v8::BigInt::new_from_i64(scope, self.isize_value as i64).into()
}
NativeType::F32 => v8::Number::new(scope, self.f32_value as f64).into(),
NativeType::F64 => v8::Number::new(scope, self.f64_value).into(),
diff --git a/ext/ffi/lib.rs b/ext/ffi/lib.rs
index c678a10b5..4e8129240 100644
--- a/ext/ffi/lib.rs
+++ b/ext/ffi/lib.rs
@@ -39,9 +39,6 @@ const _: () = {
assert!(size_of::<*const ()>() == 8);
};
-pub(crate) const MAX_SAFE_INTEGER: isize = 9007199254740991;
-pub(crate) const MIN_SAFE_INTEGER: isize = -9007199254740991;
-
pub const UNSTABLE_FEATURE_NAME: &str = "ffi";
fn check_unstable(state: &OpState, api_name: &str) {
diff --git a/ext/ffi/static.rs b/ext/ffi/static.rs
index 3920d885e..f08605754 100644
--- a/ext/ffi/static.rs
+++ b/ext/ffi/static.rs
@@ -2,8 +2,6 @@
use crate::dlfcn::DynamicLibraryResource;
use crate::symbol::NativeType;
-use crate::MAX_SAFE_INTEGER;
-use crate::MIN_SAFE_INTEGER;
use deno_core::error::type_error;
use deno_core::error::AnyError;
use deno_core::op2;
@@ -90,45 +88,29 @@ pub fn op_ffi_get_static<'scope>(
NativeType::U64 => {
// SAFETY: ptr is user provided
let result = unsafe { ptr::read_unaligned(data_ptr as *const u64) };
- let integer: v8::Local<v8::Value> = if result > MAX_SAFE_INTEGER as u64 {
- v8::BigInt::new_from_u64(scope, result).into()
- } else {
- v8::Number::new(scope, result as f64).into()
- };
+ let integer: v8::Local<v8::Value> =
+ v8::BigInt::new_from_u64(scope, result).into();
integer
}
NativeType::I64 => {
// SAFETY: ptr is user provided
let result = unsafe { ptr::read_unaligned(data_ptr as *const i64) };
- let integer: v8::Local<v8::Value> = if result > MAX_SAFE_INTEGER as i64
- || result < MIN_SAFE_INTEGER as i64
- {
- v8::BigInt::new_from_i64(scope, result).into()
- } else {
- v8::Number::new(scope, result as f64).into()
- };
+ let integer: v8::Local<v8::Value> =
+ v8::BigInt::new_from_i64(scope, result).into();
integer
}
NativeType::USize => {
// SAFETY: ptr is user provided
let result = unsafe { ptr::read_unaligned(data_ptr as *const usize) };
- let integer: v8::Local<v8::Value> = if result > MAX_SAFE_INTEGER as usize
- {
- v8::BigInt::new_from_u64(scope, result as u64).into()
- } else {
- v8::Number::new(scope, result as f64).into()
- };
+ let integer: v8::Local<v8::Value> =
+ v8::BigInt::new_from_u64(scope, result as u64).into();
integer
}
NativeType::ISize => {
// SAFETY: ptr is user provided
let result = unsafe { ptr::read_unaligned(data_ptr as *const isize) };
let integer: v8::Local<v8::Value> =
- if !(MIN_SAFE_INTEGER..=MAX_SAFE_INTEGER).contains(&result) {
- v8::BigInt::new_from_i64(scope, result as i64).into()
- } else {
- v8::Number::new(scope, result as f64).into()
- };
+ v8::BigInt::new_from_i64(scope, result as i64).into();
integer
}
NativeType::F32 => {