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

Side by Side Diff: runtime/vm/dart_api_message.cc

Issue 9363023: Add support for big integers to the native message format (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Addressed review comments from asiva@ Created 8 years, 10 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_message.h ('k') | runtime/vm/raw_object_snapshot.cc » ('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/object_store.h" 7 #include "vm/object_store.h"
8 8
9 namespace dart { 9 namespace dart {
10 10
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
81 } 81 }
82 82
83 83
84 Dart_CObject* ApiMessageReader::AllocateDartCObjectInt64(int64_t val) { 84 Dart_CObject* ApiMessageReader::AllocateDartCObjectInt64(int64_t val) {
85 Dart_CObject* value = AllocateDartCObject(Dart_CObject::kInt64); 85 Dart_CObject* value = AllocateDartCObject(Dart_CObject::kInt64);
86 value->value.as_int64 = val; 86 value->value.as_int64 = val;
87 return value; 87 return value;
88 } 88 }
89 89
90 90
91 Dart_CObject* ApiMessageReader::AllocateDartCObjectBigint(intptr_t length) {
92 // Allocate a Dart_CObject structure followed by an array of chars
93 // for the bigint hex string content. The pointer to the bigint
94 // content is set up to this area.
95 Dart_CObject* value =
96 reinterpret_cast<Dart_CObject*>(
97 alloc_(NULL, 0, sizeof(Dart_CObject) + length + 1));
98 value->value.as_bigint = reinterpret_cast<char*>(value) + sizeof(*value);
99 value->type = Dart_CObject::kBigint;
100 return value;
101 }
102
103
91 Dart_CObject* ApiMessageReader::AllocateDartCObjectDouble(double val) { 104 Dart_CObject* ApiMessageReader::AllocateDartCObjectDouble(double val) {
92 Dart_CObject* value = AllocateDartCObject(Dart_CObject::kDouble); 105 Dart_CObject* value = AllocateDartCObject(Dart_CObject::kDouble);
93 value->value.as_double = val; 106 value->value.as_double = val;
94 return value; 107 return value;
95 } 108 }
96 109
97 110
98 Dart_CObject* ApiMessageReader::AllocateDartCObjectString(intptr_t length) { 111 Dart_CObject* ApiMessageReader::AllocateDartCObjectString(intptr_t length) {
99 // Allocate a Dart_CObject structure followed by an array of chars 112 // Allocate a Dart_CObject structure followed by an array of chars
100 // for the string content. The pointer to the string content is set 113 // for the string content. The pointer to the string content is set
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
199 } 212 }
200 case ObjectStore::kMintClass: { 213 case ObjectStore::kMintClass: {
201 int64_t value = Read<int64_t>(); 214 int64_t value = Read<int64_t>();
202 if (kMinInt32 <= value && value <= kMaxInt32) { 215 if (kMinInt32 <= value && value <= kMaxInt32) {
203 return AllocateDartCObjectInt32(value); 216 return AllocateDartCObjectInt32(value);
204 } else { 217 } else {
205 return AllocateDartCObjectInt64(value); 218 return AllocateDartCObjectInt64(value);
206 } 219 }
207 break; 220 break;
208 } 221 }
222 case ObjectStore::kBigintClass: {
223 // Read in the hex string representation of the bigint.
224 intptr_t len = ReadIntptrValue();
225 Dart_CObject* object = AllocateDartCObjectBigint(len);
226 char* p = object->value.as_bigint;
227 for (intptr_t i = 0; i < len; i++) {
228 p[i] = Read<uint8_t>();
229 }
230 p[len] = '\0';
231 return object;
232 break;
233 }
209 case ObjectStore::kDoubleClass: { 234 case ObjectStore::kDoubleClass: {
210 // Read the double value for the object. 235 // Read the double value for the object.
211 Dart_CObject* object = AllocateDartCObjectDouble(Read<double>()); 236 Dart_CObject* object = AllocateDartCObjectDouble(Read<double>());
212 AddBackwardReference(object_id, object); 237 AddBackwardReference(object_id, object);
213 return object; 238 return object;
214 break; 239 break;
215 } 240 }
216 case ObjectStore::kOneByteStringClass: { 241 case ObjectStore::kOneByteStringClass: {
217 intptr_t len = ReadSmiValue(); 242 intptr_t len = ReadSmiValue();
218 intptr_t hash = ReadSmiValue(); 243 intptr_t hash = ReadSmiValue();
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
302 return ReadObjectImpl(value); 327 return ReadObjectImpl(value);
303 } 328 }
304 329
305 330
306 void ApiMessageReader::AddBackwardReference(intptr_t id, Dart_CObject* obj) { 331 void ApiMessageReader::AddBackwardReference(intptr_t id, Dart_CObject* obj) {
307 ASSERT((id - kMaxPredefinedObjectIds) == backward_references_.length()); 332 ASSERT((id - kMaxPredefinedObjectIds) == backward_references_.length());
308 backward_references_.Add(obj); 333 backward_references_.Add(obj);
309 } 334 }
310 335
311 } // namespace dart 336 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/dart_api_message.h ('k') | runtime/vm/raw_object_snapshot.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698