Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(822)

Unified Diff: runtime/vm/dart_api_impl.cc

Issue 12730013: - Use dart:typedata types in the Dart API calls. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/lib/typeddata.dart ('k') | runtime/vm/dart_api_impl_test.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/dart_api_impl.cc
===================================================================
--- runtime/vm/dart_api_impl.cc (revision 19847)
+++ runtime/vm/dart_api_impl.cc (working copy)
@@ -2331,48 +2331,48 @@
case kByteArrayCid :
type = kByteData;
break;
- case kInt8ArrayCid :
- case kExternalInt8ArrayCid :
+ case kTypedDataInt8ArrayCid :
+ case kExternalTypedDataInt8ArrayCid :
type = kInt8;
break;
- case kUint8ArrayCid :
- case kExternalUint8ArrayCid :
+ case kTypedDataUint8ArrayCid :
+ case kExternalTypedDataUint8ArrayCid :
type = kUint8;
break;
- case kUint8ClampedArrayCid :
- case kExternalUint8ClampedArrayCid :
+ case kTypedDataUint8ClampedArrayCid :
+ case kExternalTypedDataUint8ClampedArrayCid :
type = kUint8Clamped;
break;
- case kInt16ArrayCid :
- case kExternalInt16ArrayCid :
+ case kTypedDataInt16ArrayCid :
+ case kExternalTypedDataInt16ArrayCid :
type = kInt16;
break;
- case kUint16ArrayCid :
- case kExternalUint16ArrayCid :
+ case kTypedDataUint16ArrayCid :
+ case kExternalTypedDataUint16ArrayCid :
type = kUint16;
break;
- case kInt32ArrayCid :
- case kExternalInt32ArrayCid :
+ case kTypedDataInt32ArrayCid :
+ case kExternalTypedDataInt32ArrayCid :
type = kInt32;
break;
- case kUint32ArrayCid :
- case kExternalUint32ArrayCid :
+ case kTypedDataUint32ArrayCid :
+ case kExternalTypedDataUint32ArrayCid :
type = kUint32;
break;
- case kInt64ArrayCid :
- case kExternalInt64ArrayCid :
+ case kTypedDataInt64ArrayCid :
+ case kExternalTypedDataInt64ArrayCid :
type = kInt64;
break;
- case kUint64ArrayCid :
- case kExternalUint64ArrayCid :
+ case kTypedDataUint64ArrayCid :
+ case kExternalTypedDataUint64ArrayCid :
type = kUint64;
break;
- case kFloat32ArrayCid :
- case kExternalFloat32ArrayCid :
+ case kTypedDataFloat32ArrayCid :
+ case kExternalTypedDataFloat32ArrayCid :
type = kFloat32;
break;
- case kFloat64ArrayCid :
- case kExternalFloat64ArrayCid :
+ case kTypedDataFloat64ArrayCid :
+ case kExternalTypedDataFloat64ArrayCid :
type = kFloat64;
break;
default:
@@ -2385,6 +2385,9 @@
DART_EXPORT Dart_TypedData_Type Dart_GetTypeOfTypedData(Dart_Handle object) {
intptr_t class_id = Api::ClassId(object);
+ if (!RawObject::IsTypedDataClassId(class_id)) {
+ return kInvalid;
+ }
return GetType(class_id);
}
@@ -2392,29 +2395,32 @@
DART_EXPORT Dart_TypedData_Type Dart_GetTypeOfExternalTypedData(
Dart_Handle object) {
intptr_t class_id = Api::ClassId(object);
- if (!RawObject::IsExternalByteArrayClassId(class_id)) {
+ if (!RawObject::IsExternalTypedDataClassId(class_id)) {
return kInvalid;
}
return GetType(class_id);
}
-template<typename type>
-static Dart_Handle NewTypedData(Isolate* isolate, intptr_t length) {
- CHECK_LENGTH(length, type::kMaxElements);
- return Api::NewHandle(isolate, type::New(length));
+static Dart_Handle NewTypedData(Isolate* isolate,
+ intptr_t cid,
+ intptr_t length) {
+ CHECK_LENGTH(length, TypedData::MaxElements(cid));
+ return Api::NewHandle(isolate, TypedData::New(cid, length));
}
-template<typename type, typename datatype>
static Dart_Handle NewExternalTypedData(
+ intptr_t cid,
void* data,
intptr_t length,
void* peer,
Dart_WeakPersistentHandleFinalizer callback) {
- CHECK_LENGTH(length, type::kMaxElements);
- const type& obj =
- type::Handle(type::New(reinterpret_cast<datatype*>(data), length));
+ CHECK_LENGTH(length, ExternalTypedData::MaxElements(cid));
+ const ExternalTypedData& obj = ExternalTypedData::Handle(
+ ExternalTypedData::New(cid,
+ reinterpret_cast<uint8_t*>(data),
+ length));
return reinterpret_cast<Dart_Handle>(obj.AddFinalizer(peer, callback));
}
@@ -2429,27 +2435,27 @@
// TODO(asiva): Add a new ByteArray::New() method.
break;
case kInt8 :
- return NewTypedData<Int8Array>(isolate, length);
+ return NewTypedData(isolate, kTypedDataInt8ArrayCid, length);
case kUint8 :
- return NewTypedData<Uint8Array>(isolate, length);
+ return NewTypedData(isolate, kTypedDataUint8ArrayCid, length);
case kUint8Clamped :
- return NewTypedData<Uint8ClampedArray>(isolate, length);
+ return NewTypedData(isolate, kTypedDataUint8ClampedArrayCid, length);
case kInt16 :
- return NewTypedData<Int16Array>(isolate, length);
+ return NewTypedData(isolate, kTypedDataInt16ArrayCid, length);
case kUint16 :
- return NewTypedData<Uint16Array>(isolate, length);
+ return NewTypedData(isolate, kTypedDataUint16ArrayCid, length);
case kInt32 :
- return NewTypedData<Int32Array>(isolate, length);
+ return NewTypedData(isolate, kTypedDataInt32ArrayCid, length);
case kUint32 :
- return NewTypedData<Uint32Array>(isolate, length);
+ return NewTypedData(isolate, kTypedDataUint32ArrayCid, length);
case kInt64 :
- return NewTypedData<Int64Array>(isolate, length);
+ return NewTypedData(isolate, kTypedDataInt64ArrayCid, length);
case kUint64 :
- return NewTypedData<Uint64Array>(isolate, length);
+ return NewTypedData(isolate, kTypedDataUint64ArrayCid, length);
case kFloat32 :
- return NewTypedData<Float32Array>(isolate, length);
+ return NewTypedData(isolate, kTypedDataFloat32ArrayCid, length);
case kFloat64 :
- return NewTypedData<Float64Array>(isolate, length);
+ return NewTypedData(isolate, kTypedDataFloat64ArrayCid, length);
default:
return Api::NewError("%s expects argument 'type' to be of 'TypedData'",
CURRENT_FUNC);
@@ -2476,60 +2482,71 @@
// TODO(asiva): Allocate external ByteData object.
break;
case kInt8 :
- return NewExternalTypedData<ExternalInt8Array, int8_t>(data,
- length,
- peer,
- callback);
+ return NewExternalTypedData(kExternalTypedDataInt8ArrayCid,
+ data,
+ length,
+ peer,
+ callback);
case kUint8 :
- return NewExternalTypedData<ExternalUint8Array, uint8_t>(data,
- length,
- peer,
- callback);
+ return NewExternalTypedData(kExternalTypedDataUint8ArrayCid,
+ data,
+ length,
+ peer,
+ callback);
case kUint8Clamped :
- return NewExternalTypedData<ExternalUint8ClampedArray, uint8_t>(data,
- length,
- peer,
- callback);
+ return NewExternalTypedData(kExternalTypedDataUint8ClampedArrayCid,
+ data,
+ length,
+ peer,
+ callback);
case kInt16 :
- return NewExternalTypedData<ExternalInt16Array, int16_t>(data,
- length,
- peer,
- callback);
+ return NewExternalTypedData(kExternalTypedDataInt16ArrayCid,
+ data,
+ length,
+ peer,
+ callback);
case kUint16 :
- return NewExternalTypedData<ExternalUint16Array, uint16_t>(data,
- length,
- peer,
- callback);
+ return NewExternalTypedData(kExternalTypedDataUint16ArrayCid,
+ data,
+ length,
+ peer,
+ callback);
case kInt32 :
- return NewExternalTypedData<ExternalInt32Array, int32_t>(data,
- length,
- peer,
- callback);
+ return NewExternalTypedData(kExternalTypedDataInt32ArrayCid,
+ data,
+ length,
+ peer,
+ callback);
case kUint32 :
- return NewExternalTypedData<ExternalUint32Array, uint32_t>(data,
- length,
- peer,
- callback);
+ return NewExternalTypedData(kExternalTypedDataUint32ArrayCid,
+ data,
+ length,
+ peer,
+ callback);
case kInt64 :
- return NewExternalTypedData<ExternalInt64Array, int64_t>(data,
- length,
- peer,
- callback);
+ return NewExternalTypedData(kExternalTypedDataInt64ArrayCid,
+ data,
+ length,
+ peer,
+ callback);
case kUint64 :
- return NewExternalTypedData<ExternalUint64Array, uint64_t>(data,
- length,
- peer,
- callback);
+ return NewExternalTypedData(kExternalTypedDataUint64ArrayCid,
+ data,
+ length,
+ peer,
+ callback);
case kFloat32 :
- return NewExternalTypedData<ExternalFloat32Array, float>(data,
- length,
- peer,
- callback);
+ return NewExternalTypedData(kExternalTypedDataFloat32ArrayCid,
+ data,
+ length,
+ peer,
+ callback);
case kFloat64 :
- return NewExternalTypedData<ExternalFloat64Array, double>(data,
- length,
- peer,
- callback);
+ return NewExternalTypedData(kExternalTypedDataFloat64ArrayCid,
+ data,
+ length,
+ peer,
+ callback);
default:
return Api::NewError("%s expects argument 'type' to be of"
" 'external TypedData'", CURRENT_FUNC);
@@ -2543,10 +2560,10 @@
void** peer) {
Isolate* isolate = Isolate::Current();
DARTSCOPE(isolate);
- const ByteArray& array =
- Api::UnwrapByteArrayHandle(isolate, object);
+ const ExternalTypedData& array =
+ Api::UnwrapExternalTypedDataHandle(isolate, object);
if (array.IsNull()) {
- RETURN_TYPE_ERROR(isolate, object, ByteArray);
+ RETURN_TYPE_ERROR(isolate, object, ExternalTypedData);
}
if (peer == NULL) {
RETURN_NULL_ERROR(peer);
@@ -2563,7 +2580,8 @@
Isolate* isolate = Isolate::Current();
DARTSCOPE(isolate);
intptr_t class_id = Api::ClassId(object);
- if (!RawObject::IsByteArrayClassId(class_id)) {
+ if (!RawObject::IsExternalTypedDataClassId(class_id) &&
+ !RawObject::IsTypedDataClassId(class_id)) {
RETURN_TYPE_ERROR(isolate, object, 'TypedData');
}
if (type == NULL) {
@@ -2577,17 +2595,21 @@
}
// Get the type of typed data object.
*type = GetType(class_id);
- const ByteArray& obj = Api::UnwrapByteArrayHandle(isolate, object);
- ASSERT(!obj.IsNull());
- *len = obj.Length();
// If it is an external typed data object just return the data field.
- if (RawObject::IsExternalByteArrayClassId(class_id)) {
- *data = reinterpret_cast<void*>(obj.ByteAddr(0));
+ if (RawObject::IsExternalTypedDataClassId(class_id)) {
+ const ExternalTypedData& obj =
+ Api::UnwrapExternalTypedDataHandle(isolate, object);
+ ASSERT(!obj.IsNull());
+ *len = obj.Length();
+ *data = reinterpret_cast<void*>(obj.DataAddr(0));
} else {
// Regular typed data object, set up some GC and API callback guards.
+ const TypedData& obj = Api::UnwrapTypedDataHandle(isolate, object);
+ ASSERT(!obj.IsNull());
+ *len = obj.Length();
isolate->IncrementNoGCScopeDepth();
START_NO_CALLBACK_SCOPE(isolate);
- *data = reinterpret_cast<void*>(obj.ByteAddr(0));
+ *data = reinterpret_cast<void*>(obj.DataAddr(0));
}
return Api::Success(isolate);
}
@@ -2597,10 +2619,11 @@
Isolate* isolate = Isolate::Current();
DARTSCOPE(isolate);
intptr_t class_id = Api::ClassId(object);
- if (!RawObject::IsByteArrayClassId(class_id)) {
+ if (!RawObject::IsExternalTypedDataClassId(class_id) &&
+ !RawObject::IsTypedDataClassId(class_id)) {
RETURN_TYPE_ERROR(isolate, object, 'TypedData');
}
- if (!RawObject::IsExternalByteArrayClassId(class_id)) {
+ if (!RawObject::IsExternalTypedDataClassId(class_id)) {
isolate->DecrementNoGCScopeDepth();
END_NO_CALLBACK_SCOPE(isolate);
}
« no previous file with comments | « runtime/lib/typeddata.dart ('k') | runtime/vm/dart_api_impl_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698