summaryrefslogtreecommitdiff
path: root/Source/JavaScriptCore/runtime/JSArrayBufferViewInlines.h
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
commit1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch)
tree46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/JavaScriptCore/runtime/JSArrayBufferViewInlines.h
parent32761a6cee1d0dee366b885b7b9c777e67885688 (diff)
downloadWebKitGtk-tarball-master.tar.gz
Diffstat (limited to 'Source/JavaScriptCore/runtime/JSArrayBufferViewInlines.h')
-rw-r--r--Source/JavaScriptCore/runtime/JSArrayBufferViewInlines.h48
1 files changed, 34 insertions, 14 deletions
diff --git a/Source/JavaScriptCore/runtime/JSArrayBufferViewInlines.h b/Source/JavaScriptCore/runtime/JSArrayBufferViewInlines.h
index de4e8587c..d5c727f74 100644
--- a/Source/JavaScriptCore/runtime/JSArrayBufferViewInlines.h
+++ b/Source/JavaScriptCore/runtime/JSArrayBufferViewInlines.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2013 Apple Inc. All rights reserved.
+ * Copyright (C) 2013, 2016 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -23,8 +23,7 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#ifndef JSArrayBufferViewInlines_h
-#define JSArrayBufferViewInlines_h
+#pragma once
#include "ArrayBufferView.h"
#include "JSArrayBufferView.h"
@@ -32,13 +31,25 @@
namespace JSC {
-inline ArrayBuffer* JSArrayBufferView::buffer()
+inline bool JSArrayBufferView::isShared()
+{
+ switch (m_mode) {
+ case WastefulTypedArray:
+ return existingBufferInButterfly()->isShared();
+ case DataViewMode:
+ return jsCast<JSDataView*>(this)->possiblySharedBuffer()->isShared();
+ default:
+ return false;
+ }
+}
+
+inline ArrayBuffer* JSArrayBufferView::possiblySharedBuffer()
{
switch (m_mode) {
case WastefulTypedArray:
return existingBufferInButterfly();
case DataViewMode:
- return jsCast<JSDataView*>(this)->buffer();
+ return jsCast<JSDataView*>(this)->possiblySharedBuffer();
default:
return methodTable()->slowDownAndWasteMemory(this);
}
@@ -50,16 +61,16 @@ inline ArrayBuffer* JSArrayBufferView::existingBufferInButterfly()
return butterfly()->indexingHeader()->arrayBuffer();
}
-inline PassRefPtr<ArrayBufferView> JSArrayBufferView::impl()
+inline RefPtr<ArrayBufferView> JSArrayBufferView::possiblySharedImpl()
{
return methodTable()->getTypedArrayImpl(this);
}
-inline void JSArrayBufferView::neuter()
+inline RefPtr<ArrayBufferView> JSArrayBufferView::unsharedImpl()
{
- ASSERT(hasArrayBuffer());
- m_length = 0;
- m_vector = 0;
+ RefPtr<ArrayBufferView> result = possiblySharedImpl();
+ RELEASE_ASSERT(!result->isShared());
+ return result;
}
inline unsigned JSArrayBufferView::byteOffset()
@@ -67,15 +78,24 @@ inline unsigned JSArrayBufferView::byteOffset()
if (!hasArrayBuffer())
return 0;
+ ArrayBuffer* buffer = possiblySharedBuffer();
+ ASSERT(!vector() == !buffer->data());
+
ptrdiff_t delta =
- static_cast<uint8_t*>(m_vector) - static_cast<uint8_t*>(buffer()->data());
+ bitwise_cast<uint8_t*>(vector()) - static_cast<uint8_t*>(buffer->data());
unsigned result = static_cast<unsigned>(delta);
ASSERT(static_cast<ptrdiff_t>(result) == delta);
return result;
}
-} // namespace JSC
-
-#endif // JSArrayBufferViewInlines_h
+inline RefPtr<ArrayBufferView> JSArrayBufferView::toWrapped(VM& vm, JSValue value)
+{
+ if (JSArrayBufferView* view = jsDynamicCast<JSArrayBufferView*>(vm, value)) {
+ if (!view->isShared())
+ return view->unsharedImpl();
+ }
+ return nullptr;
+}
+} // namespace JSC