| Index: runtime/vm/object.cc
|
| diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
|
| index 8d80c1d9e1450c9a94061711bb5dc84c9aa7459b..1e8aa672fc43d3f92cfbe4dd795fddc12f0c340d 100644
|
| --- a/runtime/vm/object.cc
|
| +++ b/runtime/vm/object.cc
|
| @@ -285,15 +285,26 @@ RawString* String::IdentifierPrettyName(const String& name) {
|
| intptr_t start = 0;
|
| intptr_t dot_pos = -1; // Position of '.' in the name, if any.
|
| bool is_setter = false;
|
| -
|
| for (intptr_t i = start; i < len; i++) {
|
| if (unmangled_name.CharAt(i) == ':') {
|
| + if (start != 0) {
|
| + // Reset and break.
|
| + start = 0;
|
| + dot_pos = -1;
|
| + break;
|
| + }
|
| ASSERT(start == 0); // Only one : is possible in getters or setters.
|
| if (unmangled_name.CharAt(0) == 's') {
|
| is_setter = true;
|
| }
|
| start = i + 1;
|
| } else if (unmangled_name.CharAt(i) == '.') {
|
| + if (dot_pos != -1) {
|
| + // Reset and break.
|
| + start = 0;
|
| + dot_pos = -1;
|
| + break;
|
| + }
|
| ASSERT(dot_pos == -1); // Only one dot is supported.
|
| dot_pos = i;
|
| }
|
| @@ -1472,6 +1483,11 @@ RawObject* Object::Allocate(intptr_t cls_id,
|
| Exceptions::Throw(exception);
|
| UNREACHABLE();
|
| }
|
| + if (space == Heap::kNew) {
|
| + isolate->class_table()->UpdateAllocatedNew(cls_id, size);
|
| + } else {
|
| + isolate->class_table()->UpdateAllocatedOld(cls_id, size);
|
| + }
|
| NoGCScope no_gc;
|
| InitializeObject(address, cls_id, size);
|
| RawObject* raw_obj = reinterpret_cast<RawObject*>(address + kHeapObjectTag);
|
| @@ -1540,75 +1556,8 @@ RawString* Class::Name() const {
|
|
|
|
|
| RawString* Class::UserVisibleName() const {
|
| - if (FLAG_show_internal_names) {
|
| - return Name();
|
| - }
|
| - switch (id()) {
|
| - case kIntegerCid:
|
| - case kSmiCid:
|
| - case kMintCid:
|
| - case kBigintCid:
|
| - return Symbols::Int().raw();
|
| - case kDoubleCid:
|
| - return Symbols::Double().raw();
|
| - case kOneByteStringCid:
|
| - case kTwoByteStringCid:
|
| - case kExternalOneByteStringCid:
|
| - case kExternalTwoByteStringCid:
|
| - return Symbols::New("String");
|
| - case kArrayCid:
|
| - case kImmutableArrayCid:
|
| - case kGrowableObjectArrayCid:
|
| - return Symbols::List().raw();
|
| - case kFloat32x4Cid:
|
| - return Symbols::Float32x4().raw();
|
| - case kInt32x4Cid:
|
| - return Symbols::Int32x4().raw();
|
| - case kTypedDataInt8ArrayCid:
|
| - case kExternalTypedDataInt8ArrayCid:
|
| - return Symbols::Int8List().raw();
|
| - case kTypedDataUint8ArrayCid:
|
| - case kExternalTypedDataUint8ArrayCid:
|
| - return Symbols::Uint8List().raw();
|
| - case kTypedDataUint8ClampedArrayCid:
|
| - case kExternalTypedDataUint8ClampedArrayCid:
|
| - return Symbols::Uint8ClampedList().raw();
|
| - case kTypedDataInt16ArrayCid:
|
| - case kExternalTypedDataInt16ArrayCid:
|
| - return Symbols::Int16List().raw();
|
| - case kTypedDataUint16ArrayCid:
|
| - case kExternalTypedDataUint16ArrayCid:
|
| - return Symbols::Uint16List().raw();
|
| - case kTypedDataInt32ArrayCid:
|
| - case kExternalTypedDataInt32ArrayCid:
|
| - return Symbols::Int32List().raw();
|
| - case kTypedDataUint32ArrayCid:
|
| - case kExternalTypedDataUint32ArrayCid:
|
| - return Symbols::Uint32List().raw();
|
| - case kTypedDataInt64ArrayCid:
|
| - case kExternalTypedDataInt64ArrayCid:
|
| - return Symbols::Int64List().raw();
|
| - case kTypedDataUint64ArrayCid:
|
| - case kExternalTypedDataUint64ArrayCid:
|
| - return Symbols::Uint64List().raw();
|
| - case kTypedDataFloat32x4ArrayCid:
|
| - case kExternalTypedDataFloat32x4ArrayCid:
|
| - return Symbols::Float32x4List().raw();
|
| - case kTypedDataFloat32ArrayCid:
|
| - case kExternalTypedDataFloat32ArrayCid:
|
| - return Symbols::Float32List().raw();
|
| - case kTypedDataFloat64ArrayCid:
|
| - case kExternalTypedDataFloat64ArrayCid:
|
| - return Symbols::Float64List().raw();
|
| - default:
|
| - if (!IsCanonicalSignatureClass()) {
|
| - const String& name = String::Handle(Name());
|
| - return String::IdentifierPrettyName(name);
|
| - } else {
|
| - return Name();
|
| - }
|
| - }
|
| - UNREACHABLE();
|
| + ASSERT(raw_ptr()->user_name_ != String::null());
|
| + return raw_ptr()->user_name_;
|
| }
|
|
|
|
|
| @@ -2792,6 +2741,159 @@ RawClass* Class::NewExternalTypedDataClass(intptr_t class_id) {
|
| void Class::set_name(const String& value) const {
|
| ASSERT(value.IsSymbol());
|
| StorePointer(&raw_ptr()->name_, value.raw());
|
| + if (raw_ptr()->user_name_ == String::null()) {
|
| + // TODO(johnmccutchan): Eagerly set user name for VM isolate classes,
|
| + // lazily set user name for the other classes.
|
| + // Generate and set user_name.
|
| + const String& user_name = String::Handle(GenerateUserVisibleName());
|
| + set_user_name(user_name);
|
| + }
|
| +}
|
| +
|
| +
|
| +void Class::set_user_name(const String& value) const {
|
| + StorePointer(&raw_ptr()->user_name_, value.raw());
|
| +}
|
| +
|
| +
|
| +RawString* Class::GenerateUserVisibleName() const {
|
| + if (FLAG_show_internal_names) {
|
| + return Name();
|
| + }
|
| + switch (id()) {
|
| + case kNullCid:
|
| + return Symbols::Null().raw();
|
| + case kDynamicCid:
|
| + return Symbols::Dynamic().raw();
|
| + case kVoidCid:
|
| + return Symbols::Void().raw();
|
| + case kClassCid:
|
| + return Symbols::Class().raw();
|
| + case kUnresolvedClassCid:
|
| + return Symbols::UnresolvedClass().raw();
|
| + case kTypeArgumentsCid:
|
| + return Symbols::TypeArguments().raw();
|
| + case kInstantiatedTypeArgumentsCid:
|
| + return Symbols::InstantiatedTypeArguments().raw();
|
| + case kPatchClassCid:
|
| + return Symbols::PatchClass().raw();
|
| + case kFunctionCid:
|
| + return Symbols::Function().raw();
|
| + case kClosureDataCid:
|
| + return Symbols::ClosureData().raw();
|
| + case kRedirectionDataCid:
|
| + return Symbols::RedirectionData().raw();
|
| + case kFieldCid:
|
| + return Symbols::Field().raw();
|
| + case kLiteralTokenCid:
|
| + return Symbols::LiteralToken().raw();
|
| + case kTokenStreamCid:
|
| + return Symbols::TokenStream().raw();
|
| + case kScriptCid:
|
| + return Symbols::Script().raw();
|
| + case kLibraryCid:
|
| + return Symbols::Library().raw();
|
| + case kLibraryPrefixCid:
|
| + return Symbols::LibraryPrefix().raw();
|
| + case kNamespaceCid:
|
| + return Symbols::Namespace().raw();
|
| + case kCodeCid:
|
| + return Symbols::Code().raw();
|
| + case kInstructionsCid:
|
| + return Symbols::Instructions().raw();
|
| + case kPcDescriptorsCid:
|
| + return Symbols::PcDescriptors().raw();
|
| + case kStackmapCid:
|
| + return Symbols::Stackmap().raw();
|
| + case kLocalVarDescriptorsCid:
|
| + return Symbols::LocalVarDescriptors().raw();
|
| + case kExceptionHandlersCid:
|
| + return Symbols::ExceptionHandlers().raw();
|
| + case kDeoptInfoCid:
|
| + return Symbols::DeoptInfo().raw();
|
| + case kContextCid:
|
| + return Symbols::Context().raw();
|
| + case kContextScopeCid:
|
| + return Symbols::ContextScope().raw();
|
| + case kICDataCid:
|
| + return Symbols::ICData().raw();
|
| + case kMegamorphicCacheCid:
|
| + return Symbols::MegamorphicCache().raw();
|
| + case kSubtypeTestCacheCid:
|
| + return Symbols::SubtypeTestCache().raw();
|
| + case kApiErrorCid:
|
| + return Symbols::ApiError().raw();
|
| + case kLanguageErrorCid:
|
| + return Symbols::LanguageError().raw();
|
| + case kUnhandledExceptionCid:
|
| + return Symbols::UnhandledException().raw();
|
| + case kUnwindErrorCid:
|
| + return Symbols::UnwindError().raw();
|
| + case kIntegerCid:
|
| + case kSmiCid:
|
| + case kMintCid:
|
| + case kBigintCid:
|
| + return Symbols::Int().raw();
|
| + case kDoubleCid:
|
| + return Symbols::Double().raw();
|
| + case kOneByteStringCid:
|
| + case kTwoByteStringCid:
|
| + case kExternalOneByteStringCid:
|
| + case kExternalTwoByteStringCid:
|
| + return Symbols::_String().raw();
|
| + case kArrayCid:
|
| + case kImmutableArrayCid:
|
| + case kGrowableObjectArrayCid:
|
| + return Symbols::List().raw();
|
| + case kFloat32x4Cid:
|
| + return Symbols::Float32x4().raw();
|
| + case kInt32x4Cid:
|
| + return Symbols::Int32x4().raw();
|
| + case kTypedDataInt8ArrayCid:
|
| + case kExternalTypedDataInt8ArrayCid:
|
| + return Symbols::Int8List().raw();
|
| + case kTypedDataUint8ArrayCid:
|
| + case kExternalTypedDataUint8ArrayCid:
|
| + return Symbols::Uint8List().raw();
|
| + case kTypedDataUint8ClampedArrayCid:
|
| + case kExternalTypedDataUint8ClampedArrayCid:
|
| + return Symbols::Uint8ClampedList().raw();
|
| + case kTypedDataInt16ArrayCid:
|
| + case kExternalTypedDataInt16ArrayCid:
|
| + return Symbols::Int16List().raw();
|
| + case kTypedDataUint16ArrayCid:
|
| + case kExternalTypedDataUint16ArrayCid:
|
| + return Symbols::Uint16List().raw();
|
| + case kTypedDataInt32ArrayCid:
|
| + case kExternalTypedDataInt32ArrayCid:
|
| + return Symbols::Int32List().raw();
|
| + case kTypedDataUint32ArrayCid:
|
| + case kExternalTypedDataUint32ArrayCid:
|
| + return Symbols::Uint32List().raw();
|
| + case kTypedDataInt64ArrayCid:
|
| + case kExternalTypedDataInt64ArrayCid:
|
| + return Symbols::Int64List().raw();
|
| + case kTypedDataUint64ArrayCid:
|
| + case kExternalTypedDataUint64ArrayCid:
|
| + return Symbols::Uint64List().raw();
|
| + case kTypedDataFloat32x4ArrayCid:
|
| + case kExternalTypedDataFloat32x4ArrayCid:
|
| + return Symbols::Float32x4List().raw();
|
| + case kTypedDataFloat32ArrayCid:
|
| + case kExternalTypedDataFloat32ArrayCid:
|
| + return Symbols::Float32List().raw();
|
| + case kTypedDataFloat64ArrayCid:
|
| + case kExternalTypedDataFloat64ArrayCid:
|
| + return Symbols::Float64List().raw();
|
| + default:
|
| + if (!IsCanonicalSignatureClass()) {
|
| + const String& name = String::Handle(Name());
|
| + return String::IdentifierPrettyName(name);
|
| + } else {
|
| + return Name();
|
| + }
|
| + }
|
| + UNREACHABLE();
|
| }
|
|
|
|
|
|
|