Chromium Code Reviews| Index: runtime/vm/object.cc |
| diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc |
| index aea7d1f6e31e48b7f8a15d8863559c72508260a0..d1f098ee45e22bc267fad7887094b77b67f40ba4 100644 |
| --- a/runtime/vm/object.cc |
| +++ b/runtime/vm/object.cc |
| @@ -216,12 +216,15 @@ static const char* MergeSubStrings(Zone* zone, |
| // _MyClass@6328321. -> _MyClass |
| // _MyClass@6328321.named -> _MyClass.named |
| // |
| -RawString* String::IdentifierPrettyName(const String& name) { |
| +RawString* String::ScrubName(const String& name) { |
| Zone* zone = Thread::Current()->zone(); |
| + |
| +#if !defined(PRODUCT) |
|
Cutch
2016/02/25 00:10:07
NOT_IN_PRODUCT(
....
);
regis
2016/02/25 17:47:27
Done.
|
| if (name.Equals(Symbols::TopLevel())) { |
| // Name of invisible top-level class. |
| return Symbols::Empty().raw(); |
| } |
| +#endif // !defined(PRODUCT) |
| const char* cname = name.ToCString(); |
| ASSERT(strlen(cname) == static_cast<size_t>(name.Length())); |
| @@ -266,6 +269,7 @@ RawString* String::IdentifierPrettyName(const String& name) { |
| unmangled_name = MergeSubStrings(zone, unmangled_segments, sum_segment_len); |
| } |
| +#if !defined(PRODUCT) |
|
Cutch
2016/02/25 00:10:07
NOT_IN_PRODUCT(
....
);
regis
2016/02/25 17:47:27
Done.
|
| intptr_t len = sum_segment_len; |
| intptr_t start = 0; |
| intptr_t dot_pos = -1; // Position of '.' in the name, if any. |
| @@ -314,12 +318,16 @@ RawString* String::IdentifierPrettyName(const String& name) { |
| } |
| unmangled_name = MergeSubStrings(zone, unmangled_segments, final_len); |
| +#endif // !defined(PRODUCT) |
| return Symbols::New(unmangled_name); |
| } |
| -RawString* String::IdentifierPrettyNameRetainPrivate(const String& name) { |
| +RawString* String::ScrubNameRetainPrivate(const String& name) { |
| +#if defined(PRODUCT) |
| + return name.raw(); |
| +#else // defined(PRODUCT) |
| intptr_t len = name.Length(); |
| intptr_t start = 0; |
| intptr_t at_pos = -1; // Position of '@' in the name, if any. |
| @@ -362,6 +370,7 @@ RawString* String::IdentifierPrettyNameRetainPrivate(const String& name) { |
| } |
| return result.raw(); |
| +#endif // defined(PRODUCT) |
| } |
| @@ -1917,14 +1926,14 @@ RawString* Class::Name() const { |
| } |
| -RawString* Class::PrettyName() const { |
| - return GeneratePrettyName(); |
| +RawString* Class::ScrubbedName() const { |
| + return String::ScrubName(String::Handle(Name())); |
| } |
| RawString* Class::UserVisibleName() const { |
| #if defined(PRODUCT) |
| - return raw_ptr()->name_; |
| + return GenerateUserVisibleName(); |
| #else // defined(PRODUCT) |
| ASSERT(raw_ptr()->user_name_ != String::null()); |
| return raw_ptr()->user_name_; |
| @@ -3161,6 +3170,7 @@ RawClass* Class::NewExternalTypedDataClass(intptr_t class_id) { |
| void Class::set_name(const String& value) const { |
| + ASSERT(raw_ptr()->name_ == String::null()); |
| ASSERT(value.IsSymbol()); |
| StorePointer(&raw_ptr()->name_, value.raw()); |
| NOT_IN_PRODUCT( |
| @@ -3182,16 +3192,11 @@ void Class::set_user_name(const String& value) const { |
| ) |
| -RawString* Class::GeneratePrettyName() const { |
| - const String& name = String::Handle(Name()); |
| - return String::IdentifierPrettyName(name); |
| -} |
| - |
| - |
| RawString* Class::GenerateUserVisibleName() const { |
| if (FLAG_show_internal_names) { |
| return Name(); |
| } |
| +#if !defined(PRODUCT) |
|
Cutch
2016/02/25 00:10:07
NOT_IN_PRODUCT(
....
);
regis
2016/02/25 17:47:27
Done.
|
| switch (id()) { |
| case kNullCid: |
| return Symbols::Null().raw(); |
| @@ -3323,9 +3328,10 @@ RawString* Class::GenerateUserVisibleName() const { |
| case kTypedDataFloat64ArrayCid: |
| case kExternalTypedDataFloat64ArrayCid: |
| return Symbols::Float64List().raw(); |
| +#endif // !defined(PRODUCT) |
|
Ivan Posva
2016/02/25 00:22:14
I don't think this will compile in PRODUCT, becaus
regis
2016/02/25 00:34:12
Indeed, it does not compile. A debug build does no
|
| default: |
| const String& name = String::Handle(Name()); |
| - return String::IdentifierPrettyName(name); |
| + return String::ScrubName(name); |
| } |
| UNREACHABLE(); |
| } |
| @@ -6655,68 +6661,36 @@ bool Function::HasOptimizedCode() const { |
| } |
| -RawString* Function::PrettyName() const { |
| - const String& str = String::Handle(name()); |
| - return String::IdentifierPrettyName(str); |
| -} |
| - |
| - |
| -const char* Function::QualifiedUserVisibleNameCString() const { |
| - const String& str = String::Handle(QualifiedUserVisibleName()); |
| - return str.ToCString(); |
| -} |
| - |
| - |
| -RawString* Function::UserVisibleName() const { |
| - return PrettyName(); |
| +RawString* Function::ScrubbedName() const { |
| + if (FLAG_show_internal_names) { |
| + return name(); |
| + } |
| + return String::ScrubName(String::Handle(name())); |
| } |
| -RawString* Function::QualifiedPrettyName() const { |
| - String& tmp = String::Handle(); |
| - const Class& cls = Class::Handle(Owner()); |
| - |
| +RawString* Function::QualifiedName(NameVisibility name_visibility) const { |
| + ASSERT(name_visibility != kInternalName); // We never request it. |
| + // A function's scrubbed name and its user visible name are identical. |
| + String& result = String::Handle(ScrubbedName()); |
| if (IsClosureFunction()) { |
| - if (IsLocalFunction() && !IsImplicitClosureFunction()) { |
| - const Function& parent = Function::Handle(parent_function()); |
| - tmp = parent.QualifiedPrettyName(); |
| - } else { |
| - return PrettyName(); |
| - } |
| - } else { |
| - if (cls.IsTopLevel()) { |
| - return PrettyName(); |
| - } else { |
| - tmp = cls.PrettyName(); |
| + Function& fun = Function::Handle(raw()); |
| + while (fun.IsLocalFunction() && !fun.IsImplicitClosureFunction()) { |
| + fun = fun.parent_function(); |
| + result = String::Concat(Symbols::Dot(), result, Heap::kOld); |
| + result = String::Concat( |
| + String::Handle(fun.ScrubbedName()), result, Heap::kOld); |
| } |
| } |
| - tmp = String::Concat(tmp, Symbols::Dot(), Heap::kOld); |
| - const String& suffix = String::Handle(PrettyName()); |
| - return String::Concat(tmp, suffix, Heap::kOld); |
| -} |
| - |
| - |
| -RawString* Function::QualifiedUserVisibleName() const { |
| - String& tmp = String::Handle(); |
| const Class& cls = Class::Handle(Owner()); |
| - |
| - if (IsClosureFunction()) { |
| - if (IsLocalFunction() && !IsImplicitClosureFunction()) { |
| - const Function& parent = Function::Handle(parent_function()); |
| - tmp = parent.QualifiedUserVisibleName(); |
| - } else { |
| - return UserVisibleName(); |
| - } |
| - } else { |
| - if (cls.IsTopLevel()) { |
| - return UserVisibleName(); |
| - } else { |
| - tmp = cls.UserVisibleName(); |
| - } |
| + if (!cls.IsTopLevel()) { |
| + result = String::Concat(Symbols::Dot(), result, Heap::kOld); |
| + const String& cls_name = String::Handle( |
| + name_visibility == kScrubbedName ? cls.ScrubbedName() |
| + : cls.UserVisibleName()); |
| + result = String::Concat(cls_name, result, Heap::kOld); |
| } |
| - tmp = String::Concat(tmp, Symbols::Dot()); |
| - const String& suffix = String::Handle(UserVisibleName()); |
| - return String::Concat(tmp, suffix); |
| + return result.raw(); |
| } |
| @@ -7208,14 +7182,11 @@ RawField* Field::Clone(const Class& new_owner) const { |
| } |
| -RawString* Field::PrettyName() const { |
| - const String& str = String::Handle(name()); |
| - return String::IdentifierPrettyName(str); |
| -} |
| - |
| - |
| -RawString* Field::UserVisibleName() const { |
| - return PrettyName(); |
| +RawString* Field::ScrubbedName() const { |
| + if (FLAG_show_internal_names) { |
| + return name(); |
| + } |
| + return String::ScrubName(String::Handle(name())); |
| } |
| @@ -8972,7 +8943,7 @@ static RawString* MakeFunctionMetaName(const Function& func) { |
| GrowableHandlePtrArray<const String> pieces(Thread::Current()->zone(), 3); |
| pieces.Add(cname); |
| pieces.Add(Symbols::At()); |
| - pieces.Add(String::Handle(func.QualifiedPrettyName())); |
| + pieces.Add(String::Handle(func.QualifiedScrubbedName())); |
| return Symbols::FromConcatAll(pieces); |
| } |
| @@ -13032,7 +13003,6 @@ const char* Code::ToCString() const { |
| } |
| -// Called by disassembler. |
| RawString* Code::Name() const { |
| const Object& obj = Object::Handle(owner()); |
| if (obj.IsNull()) { |
| @@ -13044,36 +13014,23 @@ RawString* Code::Name() const { |
| } else if (obj.IsClass()) { |
| // Allocation stub. |
| const Class& cls = Class::Cast(obj); |
| - String& cls_name = String::Handle(cls.Name()); |
| + String& cls_name = String::Handle(cls.ScrubbedName()); |
| ASSERT(!cls_name.IsNull()); |
| return Symbols::FromConcat(Symbols::AllocationStubFor(), cls_name); |
| } else { |
| ASSERT(obj.IsFunction()); |
| // Dart function. |
| - return Function::Cast(obj).name(); |
| + return Function::Cast(obj).ScrubbedName(); |
| } |
| } |
| -RawString* Code::PrettyName() const { |
| +RawString* Code::QualifiedName() const { |
| const Object& obj = Object::Handle(owner()); |
| - if (obj.IsNull()) { |
| - // Regular stub. |
| - const char* name = StubCode::NameOfStub(EntryPoint()); |
| - ASSERT(name != NULL); |
| - const String& stub_name = String::Handle(String::New(name)); |
| - return String::Concat(Symbols::StubPrefix(), stub_name); |
| - } else if (obj.IsClass()) { |
| - // Allocation stub. |
| - const Class& cls = Class::Cast(obj); |
| - String& cls_name = String::Handle(cls.Name()); |
| - ASSERT(!cls_name.IsNull()); |
| - return String::Concat(Symbols::AllocationStubFor(), cls_name); |
| - } else { |
| - ASSERT(obj.IsFunction()); |
| - // Dart function. |
| - return Function::Cast(obj).QualifiedPrettyName(); |
| + if (obj.IsFunction()) { |
| + return Function::Cast(obj).QualifiedScrubbedName(); |
| } |
| + return Name(); |
| } |
| @@ -14785,13 +14742,12 @@ bool AbstractType::TestAndAddBuddyToTrail(TrailPtr* trail, |
| RawString* AbstractType::BuildName(NameVisibility name_visibility) const { |
| + ASSERT(name_visibility != kScrubbedName); |
| Zone* zone = Thread::Current()->zone(); |
| if (IsBoundedType()) { |
| const AbstractType& type = AbstractType::Handle( |
| BoundedType::Cast(*this).type()); |
| - if (name_visibility == kPrettyName) { |
| - return type.BuildName(kPrettyName); |
| - } else if (name_visibility == kUserVisibleName) { |
| + if (name_visibility == kUserVisibleName) { |
| return type.BuildName(kUserVisibleName); |
| } |
| GrowableHandlePtrArray<const String> pieces(zone, 5); |
| @@ -14861,8 +14817,6 @@ RawString* AbstractType::BuildName(NameVisibility name_visibility) const { |
| } |
| if (name_visibility == kInternalName) { |
| class_name = cls.Name(); |
| - } else if (name_visibility == kPrettyName) { |
| - class_name = cls.PrettyName(); |
| } else { |
| ASSERT(name_visibility == kUserVisibleName); |
| // Map internal types to their corresponding public interfaces. |