mirror of
https://github.com/denoland/rusty_v8.git
synced 2024-11-21 15:04:33 -05:00
Add v8::ArrayBuffer::Data
(#1068)
This commit is contained in:
parent
780eb7946b
commit
31291f64a6
3 changed files with 32 additions and 0 deletions
|
@ -36,6 +36,7 @@ extern "C" {
|
||||||
backing_store: *const SharedRef<BackingStore>,
|
backing_store: *const SharedRef<BackingStore>,
|
||||||
) -> *const ArrayBuffer;
|
) -> *const ArrayBuffer;
|
||||||
fn v8__ArrayBuffer__Detach(this: *const ArrayBuffer);
|
fn v8__ArrayBuffer__Detach(this: *const ArrayBuffer);
|
||||||
|
fn v8__ArrayBuffer__Data(this: *const ArrayBuffer) -> *mut c_void;
|
||||||
fn v8__ArrayBuffer__IsDetachable(this: *const ArrayBuffer) -> bool;
|
fn v8__ArrayBuffer__IsDetachable(this: *const ArrayBuffer) -> bool;
|
||||||
fn v8__ArrayBuffer__ByteLength(this: *const ArrayBuffer) -> usize;
|
fn v8__ArrayBuffer__ByteLength(this: *const ArrayBuffer) -> usize;
|
||||||
fn v8__ArrayBuffer__GetBackingStore(
|
fn v8__ArrayBuffer__GetBackingStore(
|
||||||
|
@ -391,6 +392,13 @@ impl ArrayBuffer {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// More efficient shortcut for GetBackingStore()->Data().
|
||||||
|
/// The returned pointer is valid as long as the ArrayBuffer is alive.
|
||||||
|
#[inline]
|
||||||
|
pub fn data(&self) -> *mut c_void {
|
||||||
|
unsafe { v8__ArrayBuffer__Data(self) }
|
||||||
|
}
|
||||||
|
|
||||||
/// Get a shared pointer to the backing store of this array buffer. This
|
/// Get a shared pointer to the backing store of this array buffer. This
|
||||||
/// pointer coordinates the lifetime management of the internal storage
|
/// pointer coordinates the lifetime management of the internal storage
|
||||||
/// with any live ArrayBuffers on the heap, even across isolates. The embedder
|
/// with any live ArrayBuffers on the heap, even across isolates. The embedder
|
||||||
|
|
|
@ -854,6 +854,10 @@ two_pointers_t v8__ArrayBuffer__GetBackingStore(const v8::ArrayBuffer& self) {
|
||||||
return make_pod<two_pointers_t>(ptr_to_local(&self)->GetBackingStore());
|
return make_pod<two_pointers_t>(ptr_to_local(&self)->GetBackingStore());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void* v8__ArrayBuffer__Data(const v8::ArrayBuffer& self) {
|
||||||
|
return ptr_to_local(&self)->Data();
|
||||||
|
}
|
||||||
|
|
||||||
void v8__ArrayBuffer__Detach(const v8::ArrayBuffer& self) {
|
void v8__ArrayBuffer__Detach(const v8::ArrayBuffer& self) {
|
||||||
ptr_to_local(&self)->Detach();
|
ptr_to_local(&self)->Detach();
|
||||||
}
|
}
|
||||||
|
|
|
@ -6678,6 +6678,26 @@ fn backing_store_from_empty_vec() {
|
||||||
let _ = v8::ArrayBuffer::with_backing_store(&mut scope, &store);
|
let _ = v8::ArrayBuffer::with_backing_store(&mut scope, &store);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn backing_store_data() {
|
||||||
|
let _setup_guard = setup();
|
||||||
|
|
||||||
|
let mut isolate = v8::Isolate::new(Default::default());
|
||||||
|
let mut scope = v8::HandleScope::new(&mut isolate);
|
||||||
|
let context = v8::Context::new(&mut scope);
|
||||||
|
let mut scope = v8::ContextScope::new(&mut scope, context);
|
||||||
|
|
||||||
|
let v = vec![1, 2, 3, 4, 5];
|
||||||
|
let len = v.len();
|
||||||
|
let store = v8::ArrayBuffer::new_backing_store_from_vec(v).make_shared();
|
||||||
|
let buf = v8::ArrayBuffer::with_backing_store(&mut scope, &store);
|
||||||
|
assert_eq!(buf.byte_length(), len);
|
||||||
|
assert_eq!(
|
||||||
|
unsafe { std::slice::from_raw_parts_mut(buf.data() as *mut u8, len) },
|
||||||
|
&[1, 2, 3, 4, 5]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn current_stack_trace() {
|
fn current_stack_trace() {
|
||||||
// Setup isolate
|
// Setup isolate
|
||||||
|
|
Loading…
Reference in a new issue