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

Unified Diff: vm/object.cc

Issue 10807078: Address review comments from a previous CL. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/runtime/
Patch Set: Created 8 years, 5 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
« vm/dart_api_message.cc ('K') | « vm/object.h ('k') | vm/object_store.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: vm/object.cc
===================================================================
--- vm/object.cc (revision 9828)
+++ vm/object.cc (working copy)
@@ -97,145 +97,53 @@
RawClass* Object::unwind_error_class_ = reinterpret_cast<RawClass*>(RAW_NULL);
#undef RAW_NULL
-int Object::GetSingletonClassIndex(const RawClass* raw_class) {
- ASSERT(raw_class->IsHeapObject());
- if (raw_class == class_class()) {
- return kClassClass;
- } else if (raw_class == null_class()) {
- return kNullClass;
- } else if (raw_class == dynamic_class()) {
- return kDynamicClass;
- } else if (raw_class == void_class()) {
- return kVoidClass;
- } else if (raw_class == unresolved_class_class()) {
- return kUnresolvedClassClass;
- } else if (raw_class == type_class()) {
- return kTypeClass;
- } else if (raw_class == type_parameter_class()) {
- return kTypeParameterClass;
- } else if (raw_class == type_arguments_class()) {
- return kTypeArgumentsClass;
- } else if (raw_class == instantiated_type_arguments_class()) {
- return kInstantiatedTypeArgumentsClass;
- } else if (raw_class == function_class()) {
- return kFunctionClass;
- } else if (raw_class == field_class()) {
- return kFieldClass;
- } else if (raw_class == literal_token_class()) {
- return kLiteralTokenClass;
- } else if (raw_class == token_stream_class()) {
- return kTokenStreamClass;
- } else if (raw_class == script_class()) {
- return kScriptClass;
- } else if (raw_class == library_class()) {
- return kLibraryClass;
- } else if (raw_class == library_prefix_class()) {
- return kLibraryPrefixClass;
- } else if (raw_class == code_class()) {
- return kCodeClass;
- } else if (raw_class == instructions_class()) {
- return kInstructionsClass;
- } else if (raw_class == pc_descriptors_class()) {
- return kPcDescriptorsClass;
- } else if (raw_class == stackmap_class()) {
- return kStackmapClass;
- } else if (raw_class == var_descriptors_class()) {
- return kLocalVarDescriptorsClass;
- } else if (raw_class == exception_handlers_class()) {
- return kExceptionHandlersClass;
- } else if (raw_class == context_class()) {
- return kContextClass;
- } else if (raw_class == context_scope_class()) {
- return kContextScopeClass;
- } else if (raw_class == icdata_class()) {
- return kICDataClass;
- } else if (raw_class == subtypetestcache_class()) {
- return kSubtypeTestCacheClass;
- } else if (raw_class == api_error_class()) {
- return kApiErrorClass;
- } else if (raw_class == language_error_class()) {
- return kLanguageErrorClass;
- } else if (raw_class == unhandled_exception_class()) {
- return kUnhandledExceptionClass;
- } else if (raw_class == unwind_error_class()) {
- return kUnwindErrorClass;
+int Object::GetSingletonClassIndex(const RawObject* raw_obj) {
+ ASSERT(raw_obj->IsHeapObject());
+ intptr_t id = raw_obj->GetClassId();
+ if (id == kClass) {
+ const RawClass* raw_class = reinterpret_cast<const RawClass*>(raw_obj);
+ id = raw_class->ptr()->id_;
+ if ((id >= kClass && id <= kUnwindError) ||
+ (id >= kNullClassId && id <= kVoidClassId)) {
regis 2012/07/24 13:49:25 We usually wrap all terms in parentheses.
siva 2012/08/13 20:38:25 This function has been deleted in newer code. On
+ return id;
+ }
}
return kInvalidIndex;
}
-RawClass* Object::GetSingletonClass(int index) {
- switch (index) {
- case kClassClass: return class_class();
- case kNullClass: return null_class();
- case kDynamicClass: return dynamic_class();
- case kVoidClass: return void_class();
- case kUnresolvedClassClass: return unresolved_class_class();
- case kTypeClass: return type_class();
- case kTypeParameterClass: return type_parameter_class();
- case kTypeArgumentsClass: return type_arguments_class();
- case kInstantiatedTypeArgumentsClass:
- return instantiated_type_arguments_class();
- case kFunctionClass: return function_class();
- case kFieldClass: return field_class();
- case kLiteralTokenClass: return literal_token_class();
- case kTokenStreamClass: return token_stream_class();
- case kScriptClass: return script_class();
- case kLibraryClass: return library_class();
- case kLibraryPrefixClass: return library_prefix_class();
- case kCodeClass: return code_class();
- case kInstructionsClass: return instructions_class();
- case kPcDescriptorsClass: return pc_descriptors_class();
- case kStackmapClass: return stackmap_class();
- case kLocalVarDescriptorsClass: return var_descriptors_class();
- case kExceptionHandlersClass: return exception_handlers_class();
- case kContextClass: return context_class();
- case kContextScopeClass: return context_scope_class();
- case kICDataClass: return icdata_class();
- case kSubtypeTestCacheClass: return subtypetestcache_class();
- case kApiErrorClass: return api_error_class();
- case kLanguageErrorClass: return language_error_class();
- case kUnhandledExceptionClass: return unhandled_exception_class();
- case kUnwindErrorClass: return unwind_error_class();
- default: break;
- }
- UNREACHABLE();
- return reinterpret_cast<RawClass*>(kHeapObjectTag); // return RAW_NULL.
-}
-
-
const char* Object::GetSingletonClassName(int index) {
switch (index) {
- case kClassClass: return "Class";
- case kNullClass: return "Null";
- case kDynamicClass: return "Dynamic";
- case kVoidClass: return "void";
- case kUnresolvedClassClass: return "UnresolvedClass";
- case kTypeClass: return "Type";
- case kTypeParameterClass: return "TypeParameter";
- case kTypeArgumentsClass: return "TypeArguments";
- case kInstantiatedTypeArgumentsClass: return "InstantiatedTypeArguments";
- case kFunctionClass: return "Function";
- case kFieldClass: return "Field";
- case kLiteralTokenClass: return "LiteralToken";
- case kTokenStreamClass: return "TokenStream";
- case kScriptClass: return "Script";
- case kLibraryClass: return "Library";
- case kLibraryPrefixClass: return "LibraryPrefix";
- case kCodeClass: return "Code";
- case kInstructionsClass: return "Instructions";
- case kPcDescriptorsClass: return "PcDescriptors";
- case kStackmapClass: return "Stackmap";
- case kLocalVarDescriptorsClass: return "LocalVarDescriptors";
- case kExceptionHandlersClass: return "ExceptionHandlers";
- case kContextClass: return "Context";
- case kContextScopeClass: return "ContextScope";
- case kICDataClass: return "ICData";
- case kSubtypeTestCacheClass: return "SubtypeTestCache";
- case kApiErrorClass: return "ApiError";
- case kLanguageErrorClass: return "LanguageError";
- case kUnhandledExceptionClass: return "UnhandledException";
- case kUnwindErrorClass: return "UnwindError";
+ case kClass: return "Class";
+ case kUnresolvedClass: return "UnresolvedClass";
+ case kType: return "Type";
+ case kTypeParameter: return "TypeParameter";
+ case kTypeArguments: return "TypeArguments";
+ case kInstantiatedTypeArguments: return "InstantiatedTypeArguments";
+ case kFunction: return "Function";
+ case kField: return "Field";
+ case kLiteralToken: return "LiteralToken";
+ case kTokenStream: return "TokenStream";
+ case kScript: return "Script";
+ case kLibrary: return "Library";
+ case kLibraryPrefix: return "LibraryPrefix";
+ case kCode: return "Code";
+ case kInstructions: return "Instructions";
+ case kPcDescriptors: return "PcDescriptors";
+ case kStackmap: return "Stackmap";
+ case kLocalVarDescriptors: return "LocalVarDescriptors";
+ case kExceptionHandlers: return "ExceptionHandlers";
+ case kContext: return "Context";
+ case kContextScope: return "ContextScope";
+ case kICData: return "ICData";
+ case kSubtypeTestCache: return "SubtypeTestCache";
+ case kApiError: return "ApiError";
+ case kLanguageError: return "LanguageError";
+ case kUnhandledException: return "UnhandledException";
+ case kUnwindError: return "UnwindError";
+ case kNullClassId: return "Null";
+ case kDynamicClassId: return "Dynamic";
+ case kVoidClassId: return "void";
default: break;
}
UNREACHABLE();
@@ -1052,8 +960,7 @@
return raw_ptr()->name_;
}
ASSERT(class_class() != Class::null()); // class_class_ should be set up.
- intptr_t index = GetSingletonClassIndex(raw());
- return String::NewSymbol(GetSingletonClassName(index));
+ return String::NewSymbol(GetSingletonClassName(raw_ptr()->id_));
}
@@ -1610,127 +1517,19 @@
RawClass* Class::GetClass(ObjectKind kind) {
- ObjectStore* object_store = Isolate::Current()->object_store();
- switch (kind) {
- case kInteger:
- ASSERT(object_store->integer_implementation_class() != Class::null());
- return object_store->integer_implementation_class();
- case kSmi:
- ASSERT(object_store->smi_class() != Class::null());
- return object_store->smi_class();
- case kMint:
- ASSERT(object_store->mint_class() != Class::null());
- return object_store->mint_class();
- case kBigint:
- ASSERT(object_store->bigint_class() != Class::null());
- return object_store->bigint_class();
- case kDouble:
- ASSERT(object_store->double_class() != Class::null());
- return object_store->double_class();
- case kOneByteString:
- ASSERT(object_store->one_byte_string_class() != Class::null());
- return object_store->one_byte_string_class();
- case kTwoByteString:
- ASSERT(object_store->two_byte_string_class() != Class::null());
- return object_store->two_byte_string_class();
- case kFourByteString:
- ASSERT(object_store->four_byte_string_class() != Class::null());
- return object_store->four_byte_string_class();
- case kExternalOneByteString:
- ASSERT(object_store->external_one_byte_string_class() != Class::null());
- return object_store->external_one_byte_string_class();
- case kExternalTwoByteString:
- ASSERT(object_store->external_two_byte_string_class() != Class::null());
- return object_store->external_two_byte_string_class();
- case kExternalFourByteString:
- ASSERT(object_store->external_four_byte_string_class() != Class::null());
- return object_store->external_four_byte_string_class();
- case kBool:
- ASSERT(object_store->bool_class() != Class::null());
- return object_store->bool_class();
- case kArray:
- ASSERT(object_store->array_class() != Class::null());
- return object_store->array_class();
- case kImmutableArray:
- ASSERT(object_store->immutable_array_class() != Class::null());
- return object_store->immutable_array_class();
- case kGrowableObjectArray:
- ASSERT(object_store->growable_object_array_class() != Class::null());
- return object_store->growable_object_array_class();
- case kInt8Array:
- ASSERT(object_store->int8_array_class() != Class::null());
- return object_store->int8_array_class();
- case kUint8Array:
- ASSERT(object_store->uint8_array_class() != Class::null());
- return object_store->uint8_array_class();
- case kInt16Array:
- ASSERT(object_store->int16_array_class() != Class::null());
- return object_store->int16_array_class();
- case kUint16Array:
- ASSERT(object_store->uint16_array_class() != Class::null());
- return object_store->uint16_array_class();
- case kInt32Array:
- ASSERT(object_store->int32_array_class() != Class::null());
- return object_store->int32_array_class();
- case kUint32Array:
- ASSERT(object_store->uint32_array_class() != Class::null());
- return object_store->uint32_array_class();
- case kInt64Array:
- ASSERT(object_store->int64_array_class() != Class::null());
- return object_store->int64_array_class();
- case kUint64Array:
- ASSERT(object_store->uint64_array_class() != Class::null());
- return object_store->uint64_array_class();
- case kFloat32Array:
- ASSERT(object_store->float32_array_class() != Class::null());
- return object_store->float32_array_class();
- case kFloat64Array:
- ASSERT(object_store->float64_array_class() != Class::null());
- return object_store->float64_array_class();
- case kExternalInt8Array:
- ASSERT(object_store->external_int8_array_class() != Class::null());
- return object_store->external_int8_array_class();
- case kExternalUint8Array:
- ASSERT(object_store->external_uint8_array_class() != Class::null());
- return object_store->external_uint8_array_class();
- case kExternalInt16Array:
- ASSERT(object_store->external_int16_array_class() != Class::null());
- return object_store->external_int16_array_class();
- case kExternalUint16Array:
- ASSERT(object_store->external_uint16_array_class() != Class::null());
- return object_store->external_uint16_array_class();
- case kExternalInt32Array:
- ASSERT(object_store->external_int32_array_class() != Class::null());
- return object_store->external_int32_array_class();
- case kExternalUint32Array:
- ASSERT(object_store->external_uint32_array_class() != Class::null());
- return object_store->external_uint32_array_class();
- case kExternalInt64Array:
- ASSERT(object_store->external_int64_array_class() != Class::null());
- return object_store->external_int64_array_class();
- case kExternalUint64Array:
- ASSERT(object_store->external_uint64_array_class() != Class::null());
- return object_store->external_uint64_array_class();
- case kExternalFloat32Array:
- ASSERT(object_store->external_float32_array_class() != Class::null());
- return object_store->external_float32_array_class();
- case kExternalFloat64Array:
- ASSERT(object_store->external_float64_array_class() != Class::null());
- return object_store->external_float64_array_class();
- case kStacktrace:
- ASSERT(object_store->stacktrace_class() != Class::null());
- return object_store->stacktrace_class();
- case kJSRegExp:
- ASSERT(object_store->jsregexp_class() != Class::null());
- return object_store->jsregexp_class();
- case kClosure:
- return Class::New<Closure>();
- case kInstance:
- return Class::New<Instance>();
- default:
- OS::Print("Class::GetClass kind unknown: %d\n", kind);
- UNREACHABLE();
+ if (kind == kClosure) {
+ return Class::New<Closure>();
}
+ if (kind == kInstance) {
+ return Class::New<Instance>();
+ }
+ if (kind >= kInteger && kind <= kJSRegExp) {
+ Isolate* isolate = Isolate::Current();
+ ASSERT(isolate->class_table()->At(kind) != Class::null());
+ return isolate->class_table()->At(kind);
+ }
+ OS::Print("Class::GetClass kind unknown: %d\n", kind);
+ UNREACHABLE();
return Class::null();
}
@@ -7217,7 +7016,6 @@
intptr_t data_pos = old_num * TestEntryLength();
for (intptr_t i = 0; i < class_ids.length(); i++) {
// Null is used as terminating value, do not add it.
regis 2012/07/24 13:49:25 You need to sync: r9835 committed - Use kIllegalOb
siva 2012/08/13 20:38:25 Done.
- ASSERT(class_ids[i] != kNullClass);
ASSERT(class_ids[i] != kIllegalObjectKind);
data.SetAt(data_pos++, Smi::Handle(Smi::New(class_ids[i])));
}
@@ -7230,7 +7028,7 @@
const Function& target) const {
ASSERT(num_args_tested() == 1); // Otherwise use 'AddCheck'.
// Not supporting collection of null receivers.
- ASSERT(receiver_class_id != kNullClass);
+ ASSERT(receiver_class_id != kNullClassId);
ASSERT(receiver_class_id != kIllegalObjectKind);
ASSERT(!target.IsNull());
« vm/dart_api_message.cc ('K') | « vm/object.h ('k') | vm/object_store.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698