| Index: vm/dart_api_message.cc
|
| ===================================================================
|
| --- vm/dart_api_message.cc (revision 16591)
|
| +++ vm/dart_api_message.cc (working copy)
|
| @@ -215,35 +215,32 @@
|
|
|
|
|
| Dart_CObject* ApiMessageReader::ReadVMSymbol(intptr_t object_id) {
|
| - if (Symbols::IsVMSymbolId(object_id)) {
|
| - intptr_t symbol_id = object_id - kMaxPredefinedObjectIds;
|
| - Dart_CObject* object;
|
| - if (vm_symbol_references_ != NULL &&
|
| - (object = vm_symbol_references_[symbol_id]) != NULL) {
|
| - return object;
|
| - }
|
| + ASSERT(Symbols::IsVMSymbolId(object_id));
|
| + intptr_t symbol_id = object_id - kMaxPredefinedObjectIds;
|
| + Dart_CObject* object;
|
| + if (vm_symbol_references_ != NULL &&
|
| + (object = vm_symbol_references_[symbol_id]) != NULL) {
|
| + return object;
|
| + }
|
|
|
| - if (vm_symbol_references_ == NULL) {
|
| - intptr_t size =
|
| - (sizeof(*vm_symbol_references_) * Symbols::kMaxPredefinedId);
|
| - vm_symbol_references_ =
|
| - reinterpret_cast<Dart_CObject**>(alloc_(NULL, 0, size));
|
| - memset(vm_symbol_references_, 0, size);
|
| - }
|
| + if (vm_symbol_references_ == NULL) {
|
| + intptr_t size =
|
| + (sizeof(*vm_symbol_references_) * Symbols::kMaxPredefinedId);
|
| + vm_symbol_references_ =
|
| + reinterpret_cast<Dart_CObject**>(alloc_(NULL, 0, size));
|
| + memset(vm_symbol_references_, 0, size);
|
| + }
|
|
|
| - RawOneByteString* str =
|
| - reinterpret_cast<RawOneByteString*>(Symbols::GetVMSymbol(object_id));
|
| - intptr_t len = Smi::Value(str->ptr()->length_);
|
| - object = AllocateDartCObjectString(len);
|
| - char* p = object->value.as_string;
|
| - memmove(p, str->ptr()->data_, len);
|
| - p[len] = '\0';
|
| - ASSERT(vm_symbol_references_[symbol_id] == NULL);
|
| - vm_symbol_references_[symbol_id] = object;
|
| - return object;
|
| - }
|
| - // No other VM isolate objects are supported.
|
| - return AllocateDartCObjectNull();
|
| + RawOneByteString* str =
|
| + reinterpret_cast<RawOneByteString*>(Symbols::GetVMSymbol(object_id));
|
| + intptr_t len = Smi::Value(str->ptr()->length_);
|
| + object = AllocateDartCObjectString(len);
|
| + char* p = object->value.as_string;
|
| + memmove(p, str->ptr()->data_, len);
|
| + p[len] = '\0';
|
| + ASSERT(vm_symbol_references_[symbol_id] == NULL);
|
| + vm_symbol_references_[symbol_id] = object;
|
| + return object;
|
| }
|
|
|
|
|
| @@ -259,11 +256,7 @@
|
| }
|
| ASSERT((value <= kIntptrMax) && (value >= kIntptrMin));
|
| if (IsVMIsolateObject(value)) {
|
| - intptr_t object_id = GetVMIsolateObjectId(value);
|
| - if (object_id == kNullObject) {
|
| - return AllocateDartCObjectNull();
|
| - }
|
| - return ReadVMSymbol(object_id);
|
| + return ReadVMIsolateObject(value);
|
| }
|
| if (SerializedHeaderTag::decode(value) == kObjectId) {
|
| return ReadIndexedObject(SerializedHeaderData::decode(value));
|
| @@ -294,6 +287,25 @@
|
| }
|
|
|
|
|
| +Dart_CObject* ApiMessageReader::ReadVMIsolateObject(intptr_t value) {
|
| + intptr_t object_id = GetVMIsolateObjectId(value);
|
| + if (object_id == kNullObject) {
|
| + return AllocateDartCObjectNull();
|
| + }
|
| + if (object_id == kTrueValue) {
|
| + return AllocateDartCObjectBool(true);
|
| + }
|
| + if (object_id == kFalseValue) {
|
| + return AllocateDartCObjectBool(false);
|
| + }
|
| + if (Symbols::IsVMSymbolId(object_id)) {
|
| + return ReadVMSymbol(object_id);
|
| + }
|
| + // No other VM isolate objects are supported.
|
| + return AllocateDartCObjectNull();
|
| +}
|
| +
|
| +
|
| Dart_CObject* ApiMessageReader::ReadInternalVMObject(intptr_t class_id,
|
| intptr_t object_id) {
|
| switch (class_id) {
|
| @@ -460,12 +472,6 @@
|
|
|
|
|
| Dart_CObject* ApiMessageReader::ReadIndexedObject(intptr_t object_id) {
|
| - if (object_id == kTrueValue) {
|
| - return AllocateDartCObjectBool(true);
|
| - }
|
| - if (object_id == kFalseValue) {
|
| - return AllocateDartCObjectBool(false);
|
| - }
|
| if (object_id == kDynamicType ||
|
| object_id == kDoubleType ||
|
| object_id == kIntType ||
|
| @@ -505,11 +511,7 @@
|
| }
|
| ASSERT((value <= kIntptrMax) && (value >= kIntptrMin));
|
| if (IsVMIsolateObject(value)) {
|
| - intptr_t object_id = GetVMIsolateObjectId(value);
|
| - if (object_id == kNullObject) {
|
| - return AllocateDartCObjectNull();
|
| - }
|
| - return ReadVMSymbol(object_id);
|
| + return ReadVMIsolateObject(value);
|
| }
|
| if (SerializedHeaderTag::decode(value) == kObjectId) {
|
| return ReadIndexedObject(SerializedHeaderData::decode(value));
|
| @@ -761,9 +763,9 @@
|
| break;
|
| case Dart_CObject::kBool:
|
| if (object->value.as_bool) {
|
| - WriteIndexedObject(kTrueValue);
|
| + WriteVMIsolateObject(kTrueValue);
|
| } else {
|
| - WriteIndexedObject(kFalseValue);
|
| + WriteVMIsolateObject(kFalseValue);
|
| }
|
| break;
|
| case Dart_CObject::kInt32:
|
|
|