@@ -151,6 +151,27 @@ fn clone_typed_array(
151151 Ok ( dolly)
152152}
153153
154+ fn clone_dataview (
155+ original : & JsObject ,
156+ dataview : & JsDataView ,
157+ transfer : & HashSet < JsObject > ,
158+ seen : & mut SeenMap ,
159+ context : & mut Context ,
160+ ) -> JsResult < JsValueStore > {
161+ let buffer = dataview. buffer ( context) ?;
162+ let buffer = try_from_js_value ( & buffer, transfer, seen, context) ?;
163+ let byte_length = dataview. byte_length ( context) ?;
164+ let byte_offset = dataview. byte_offset ( context) ?;
165+
166+ let dolly = JsValueStore :: new ( ValueStoreInner :: DataView {
167+ buffer,
168+ byte_length,
169+ byte_offset,
170+ } ) ;
171+ seen. insert ( original, dolly. clone ( ) ) ;
172+ Ok ( dolly)
173+ }
174+
154175fn clone_date (
155176 original : & JsObject ,
156177 date : & JsDate ,
@@ -262,8 +283,8 @@ fn try_from_js_object_clone(
262283 return Err ( js_error ! ( TypeError : "Errors are not supported yet." ) ) ;
263284 } else if let Ok ( ref regexp) = JsRegExp :: from_object ( object. clone ( ) ) {
264285 return clone_regexp ( object, regexp, seen, context) ;
265- } else if let Ok ( _dataview ) = JsDataView :: from_object ( object. clone ( ) ) {
266- return Err ( js_error ! ( TypeError : "Data views are not supported yet." ) ) ;
286+ } else if let Ok ( ref dataview ) = JsDataView :: from_object ( object. clone ( ) ) {
287+ return clone_dataview ( object , dataview , transfer , seen , context ) ;
267288 } else if object. is_callable ( ) {
268289 // Functions are invalid.
269290 return Err ( unsupported_type ( ) ) ;
0 commit comments