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

Side by Side Diff: runtime/vm/dart_api_message.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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « runtime/vm/dart_api_impl_test.cc ('k') | runtime/vm/object.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "vm/dart_api_message.h" 5 #include "vm/dart_api_message.h"
6 #include "vm/object.h" 6 #include "vm/object.h"
7 #include "vm/snapshot_ids.h" 7 #include "vm/snapshot_ids.h"
8 #include "vm/symbols.h" 8 #include "vm/symbols.h"
9 #include "vm/unicode.h" 9 #include "vm/unicode.h"
10 10
(...skipping 412 matching lines...) Expand 10 before | Expand all | Expand 10 after
423 char* p = object->value.as_string; 423 char* p = object->value.as_string;
424 i = 0; 424 i = 0;
425 while (i < len) { 425 while (i < len) {
426 p += Utf8::Encode(Utf16::Next(utf16, &i, len), p); 426 p += Utf8::Encode(Utf16::Next(utf16, &i, len), p);
427 } 427 }
428 *p = '\0'; 428 *p = '\0';
429 ASSERT(p == (object->value.as_string + utf8_len)); 429 ASSERT(p == (object->value.as_string + utf8_len));
430 ::free(utf16); 430 ::free(utf16);
431 return object; 431 return object;
432 } 432 }
433 case kUint8ArrayCid: { 433 case kTypedDataUint8ArrayCid:
434 case kExternalTypedDataUint8ArrayCid: {
434 intptr_t len = ReadSmiValue(); 435 intptr_t len = ReadSmiValue();
435 Dart_CObject* object = AllocateDartCObjectUint8Array(len); 436 Dart_CObject* object = AllocateDartCObjectUint8Array(len);
436 AddBackRef(object_id, object, kIsDeserialized); 437 AddBackRef(object_id, object, kIsDeserialized);
437 if (len > 0) { 438 if (len > 0) {
438 uint8_t* p = object->value.as_byte_array.values; 439 uint8_t* p = object->value.as_byte_array.values;
439 for (intptr_t i = 0; i < len; i++) { 440 for (intptr_t i = 0; i < len; i++) {
440 p[i] = Read<uint8_t>(); 441 p[i] = Read<uint8_t>();
441 } 442 }
442 } 443 }
443 return object; 444 return object;
(...skipping 395 matching lines...) Expand 10 before | Expand all | Expand 10 after
839 Write<uint16_t>(utf16_str[i]); 840 Write<uint16_t>(utf16_str[i]);
840 } 841 }
841 ::free(utf16_str); 842 ::free(utf16_str);
842 } 843 }
843 break; 844 break;
844 } 845 }
845 case Dart_CObject::kUint8Array: { 846 case Dart_CObject::kUint8Array: {
846 // Write out the serialization header value for this object. 847 // Write out the serialization header value for this object.
847 WriteInlinedHeader(object); 848 WriteInlinedHeader(object);
848 // Write out the class and tags information. 849 // Write out the class and tags information.
849 WriteIndexedObject(kUint8ArrayCid); 850 WriteIndexedObject(kTypedDataUint8ArrayCid);
850 WriteIntptrValue(0); 851 WriteIntptrValue(RawObject::ClassIdTag::update(
852 kTypedDataUint8ArrayCid, 0));
851 uint8_t* bytes = object->value.as_byte_array.values; 853 uint8_t* bytes = object->value.as_byte_array.values;
852 intptr_t len = object->value.as_byte_array.length; 854 intptr_t len = object->value.as_byte_array.length;
853 WriteSmi(len); 855 WriteSmi(len);
854 for (intptr_t i = 0; i < len; i++) { 856 for (intptr_t i = 0; i < len; i++) {
855 Write<uint8_t>(bytes[i]); 857 Write<uint8_t>(bytes[i]);
856 } 858 }
857 break; 859 break;
858 } 860 }
859 case Dart_CObject::kExternalUint8Array: { 861 case Dart_CObject::kExternalUint8Array: {
860 // TODO(ager): we are writing C pointers into the message in 862 // TODO(ager): we are writing C pointers into the message in
861 // order to post external arrays through ports. We need to make 863 // order to post external arrays through ports. We need to make
862 // sure that messages containing pointers can never be posted 864 // sure that messages containing pointers can never be posted
863 // to other processes. 865 // to other processes.
864 866
865 // Write out serialization header value for this object. 867 // Write out serialization header value for this object.
866 WriteInlinedHeader(object); 868 WriteInlinedHeader(object);
867 // Write out the class and tag information. 869 // Write out the class and tag information.
868 WriteIndexedObject(kExternalUint8ArrayCid); 870 WriteIndexedObject(kExternalTypedDataUint8ArrayCid);
869 WriteIntptrValue(0); 871 WriteIntptrValue(RawObject::ClassIdTag::update(
872 kExternalTypedDataUint8ArrayCid, 0));
870 int length = object->value.as_external_byte_array.length; 873 int length = object->value.as_external_byte_array.length;
871 uint8_t* data = object->value.as_external_byte_array.data; 874 uint8_t* data = object->value.as_external_byte_array.data;
872 void* peer = object->value.as_external_byte_array.peer; 875 void* peer = object->value.as_external_byte_array.peer;
873 Dart_WeakPersistentHandleFinalizer callback = 876 Dart_WeakPersistentHandleFinalizer callback =
874 object->value.as_external_byte_array.callback; 877 object->value.as_external_byte_array.callback;
875 WriteSmi(length); 878 WriteSmi(length);
876 WriteIntptrValue(reinterpret_cast<intptr_t>(data)); 879 WriteIntptrValue(reinterpret_cast<intptr_t>(data));
877 WriteIntptrValue(reinterpret_cast<intptr_t>(peer)); 880 WriteIntptrValue(reinterpret_cast<intptr_t>(peer));
878 WriteIntptrValue(reinterpret_cast<intptr_t>(callback)); 881 WriteIntptrValue(reinterpret_cast<intptr_t>(callback));
879 break; 882 break;
(...skipping 20 matching lines...) Expand all
900 if (!success) { 903 if (!success) {
901 UnmarkAllCObjects(object); 904 UnmarkAllCObjects(object);
902 return false; 905 return false;
903 } 906 }
904 } 907 }
905 UnmarkAllCObjects(object); 908 UnmarkAllCObjects(object);
906 return true; 909 return true;
907 } 910 }
908 911
909 } // namespace dart 912 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/dart_api_impl_test.cc ('k') | runtime/vm/object.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698