mirror of
https://github.com/denoland/deno.git
synced 2024-11-23 15:16:54 -05:00
fix(ext/ffi): return u64/i64 as bigints from nonblocking ffi calls (#26486)
Fixes https://github.com/denoland/deno/issues/25194
This commit is contained in:
parent
6d587cbfc8
commit
fa49fd404b
4 changed files with 21 additions and 16 deletions
1
Cargo.lock
generated
1
Cargo.lock
generated
|
@ -1577,6 +1577,7 @@ dependencies = [
|
||||||
"libffi",
|
"libffi",
|
||||||
"libffi-sys",
|
"libffi-sys",
|
||||||
"log",
|
"log",
|
||||||
|
"num-bigint",
|
||||||
"serde",
|
"serde",
|
||||||
"serde-value",
|
"serde-value",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
|
|
|
@ -21,6 +21,7 @@ dynasmrt = "1.2.3"
|
||||||
libffi = "=3.2.0"
|
libffi = "=3.2.0"
|
||||||
libffi-sys = "=2.3.0"
|
libffi-sys = "=2.3.0"
|
||||||
log.workspace = true
|
log.workspace = true
|
||||||
|
num-bigint.workspace = true
|
||||||
serde.workspace = true
|
serde.workspace = true
|
||||||
serde-value = "0.7"
|
serde-value = "0.7"
|
||||||
serde_json = "1.0"
|
serde_json = "1.0"
|
||||||
|
|
|
@ -9,12 +9,14 @@ use crate::FfiPermissions;
|
||||||
use crate::ForeignFunction;
|
use crate::ForeignFunction;
|
||||||
use deno_core::op2;
|
use deno_core::op2;
|
||||||
use deno_core::serde_json::Value;
|
use deno_core::serde_json::Value;
|
||||||
|
use deno_core::serde_v8::BigInt as V8BigInt;
|
||||||
use deno_core::serde_v8::ExternalPointer;
|
use deno_core::serde_v8::ExternalPointer;
|
||||||
use deno_core::unsync::spawn_blocking;
|
use deno_core::unsync::spawn_blocking;
|
||||||
use deno_core::v8;
|
use deno_core::v8;
|
||||||
use deno_core::OpState;
|
use deno_core::OpState;
|
||||||
use deno_core::ResourceId;
|
use deno_core::ResourceId;
|
||||||
use libffi::middle::Arg;
|
use libffi::middle::Arg;
|
||||||
|
use num_bigint::BigInt;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
use std::cell::RefCell;
|
use std::cell::RefCell;
|
||||||
use std::ffi::c_void;
|
use std::ffi::c_void;
|
||||||
|
@ -202,6 +204,7 @@ where
|
||||||
#[serde(untagged)]
|
#[serde(untagged)]
|
||||||
pub enum FfiValue {
|
pub enum FfiValue {
|
||||||
Value(Value),
|
Value(Value),
|
||||||
|
BigInt(V8BigInt),
|
||||||
External(ExternalPointer),
|
External(ExternalPointer),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -251,18 +254,18 @@ fn ffi_call(
|
||||||
NativeType::I32 => {
|
NativeType::I32 => {
|
||||||
FfiValue::Value(Value::from(cif.call::<i32>(fun_ptr, &call_args)))
|
FfiValue::Value(Value::from(cif.call::<i32>(fun_ptr, &call_args)))
|
||||||
}
|
}
|
||||||
NativeType::U64 => {
|
NativeType::U64 => FfiValue::BigInt(V8BigInt::from(BigInt::from(
|
||||||
FfiValue::Value(Value::from(cif.call::<u64>(fun_ptr, &call_args)))
|
cif.call::<u64>(fun_ptr, &call_args),
|
||||||
}
|
))),
|
||||||
NativeType::I64 => {
|
NativeType::I64 => FfiValue::BigInt(V8BigInt::from(BigInt::from(
|
||||||
FfiValue::Value(Value::from(cif.call::<i64>(fun_ptr, &call_args)))
|
cif.call::<i64>(fun_ptr, &call_args),
|
||||||
}
|
))),
|
||||||
NativeType::USize => {
|
NativeType::USize => FfiValue::BigInt(V8BigInt::from(BigInt::from(
|
||||||
FfiValue::Value(Value::from(cif.call::<usize>(fun_ptr, &call_args)))
|
cif.call::<usize>(fun_ptr, &call_args),
|
||||||
}
|
))),
|
||||||
NativeType::ISize => {
|
NativeType::ISize => FfiValue::BigInt(V8BigInt::from(BigInt::from(
|
||||||
FfiValue::Value(Value::from(cif.call::<isize>(fun_ptr, &call_args)))
|
cif.call::<isize>(fun_ptr, &call_args),
|
||||||
}
|
))),
|
||||||
NativeType::F32 => {
|
NativeType::F32 => {
|
||||||
FfiValue::Value(Value::from(cif.call::<f32>(fun_ptr, &call_args)))
|
FfiValue::Value(Value::from(cif.call::<f32>(fun_ptr, &call_args)))
|
||||||
}
|
}
|
||||||
|
|
|
@ -95,10 +95,10 @@ fn basic() {
|
||||||
579.912\n\
|
579.912\n\
|
||||||
579.912\n\
|
579.912\n\
|
||||||
579\n\
|
579\n\
|
||||||
8589934590\n\
|
8589934590n\n\
|
||||||
-8589934590\n\
|
-8589934590n\n\
|
||||||
8589934590\n\
|
8589934590n\n\
|
||||||
-8589934590\n\
|
-8589934590n\n\
|
||||||
9007199254740992n\n\
|
9007199254740992n\n\
|
||||||
9007199254740992n\n\
|
9007199254740992n\n\
|
||||||
-9007199254740992n\n\
|
-9007199254740992n\n\
|
||||||
|
|
Loading…
Reference in a new issue