Skip to content
This repository was archived by the owner on Nov 12, 2022. It is now read-only.

Commit 101c6b6

Browse files
author
bors-servo
authored
Auto merge of #340 - bd339:iss331, r=jdm
ArrayBufferView convenience method for typed arrays Fixes #331 . <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/rust-mozjs/340) <!-- Reviewable:end -->
2 parents 93e59ef + 451952e commit 101c6b6

File tree

2 files changed

+15
-0
lines changed

2 files changed

+15
-0
lines changed

src/typedarray.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ use jsapi::HandleObject;
2121
use jsapi::JSContext;
2222
use jsapi::JSObject;
2323
use jsapi::JS_GetArrayBufferData;
24+
use jsapi::JS_GetArrayBufferViewType;
2425
use jsapi::JS_GetFloat32ArrayData;
2526
use jsapi::JS_GetFloat64ArrayData;
2627
use jsapi::JS_GetInt16ArrayData;
@@ -42,6 +43,7 @@ use jsapi::JS_NewUint8Array;
4243
use jsapi::JS_NewUint8ClampedArray;
4344
use jsapi::MutableHandleObject;
4445
use jsapi::Rooted;
46+
use jsapi::Type;
4547
use jsapi::UnwrapArrayBuffer;
4648
use jsapi::UnwrapArrayBufferView;
4749
use jsapi::UnwrapFloat32Array;
@@ -317,6 +319,12 @@ pub type ArrayBuffer<'a> = TypedArray<'a, ArrayBufferU8>;
317319
/// The ArrayBufferView type
318320
pub type ArrayBufferView<'a> = TypedArray<'a, ArrayBufferViewU8>;
319321

322+
impl<'a> ArrayBufferView<'a> {
323+
pub fn get_array_type(&self) -> Type {
324+
unsafe { JS_GetArrayBufferViewType(self.object.get()) }
325+
}
326+
}
327+
320328
#[macro_export]
321329
macro_rules! typedarray {
322330
(in($cx:expr) let $name:ident : $ty:ident = $init:expr) => {

tests/typedarray.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ use js::jsapi::CompartmentOptions;
99
use js::jsapi::JSAutoCompartment;
1010
use js::jsapi::JS_NewGlobalObject;
1111
use js::jsapi::OnNewGlobalHookOption;
12+
use js::jsapi::Type;
1213
use js::jsval::UndefinedValue;
1314
use js::rust::Runtime as Runtime_;
1415
use js::rust::SIMPLE_GLOBAL_CLASS;
@@ -40,6 +41,9 @@ fn typedarray() {
4041
typedarray!(in(cx) let array: Uint16Array = rval.to_object());
4142
assert!(array.is_err());
4243

44+
typedarray!(in(cx) let view: ArrayBufferView = rval.to_object());
45+
assert_eq!(view.unwrap().get_array_type(), Type::Uint8);
46+
4347
rooted!(in(cx) let mut rval = ptr::null_mut());
4448
assert!(Uint32Array::create(cx, CreateWith::Slice(&[1, 3, 5]), rval.handle_mut()).is_ok());
4549

@@ -63,6 +67,9 @@ fn typedarray() {
6367
typedarray!(in(cx) let mut array: Uint32Array = rval.get());
6468
array.as_mut().unwrap().update(&[0, 1, 2, 3]);
6569
assert_eq!(array.unwrap().as_slice(), &[0, 1, 2, 3, 0]);
70+
71+
typedarray!(in(cx) let view: ArrayBufferView = rval.get());
72+
assert_eq!(view.unwrap().get_array_type(), Type::Uint32);
6673
}
6774
}
6875

0 commit comments

Comments
 (0)