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

Side by Side Diff: runtime/lib/mirrors_impl.dart

Issue 53883002: Ensure constructorName symbols include private manglings. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 1 month 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
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 // VM-specific implementation of the dart:mirrors library. 5 // VM-specific implementation of the dart:mirrors library.
6 6
7 import "dart:collection"; 7 import "dart:collection";
8 8
9 final emptyList = new UnmodifiableListView([]); 9 final emptyList = new UnmodifiableListView([]);
10 final emptyMap = new _UnmodifiableMapView({}); 10 final emptyMap = new _UnmodifiableMapView({});
(...skipping 568 matching lines...) Expand 10 before | Expand all | Expand 10 after
579 if (_superinterfaces == null) { 579 if (_superinterfaces == null) {
580 _superinterfaces = isOriginalDeclaration 580 _superinterfaces = isOriginalDeclaration
581 ? _nativeInterfaces(_reflectedType) 581 ? _nativeInterfaces(_reflectedType)
582 : _nativeInterfacesInstantiated(_reflectedType); 582 : _nativeInterfacesInstantiated(_reflectedType);
583 _superinterfaces = 583 _superinterfaces =
584 new UnmodifiableListView(_superinterfaces.map(reflectType)); 584 new UnmodifiableListView(_superinterfaces.map(reflectType));
585 } 585 }
586 return _superinterfaces; 586 return _superinterfaces;
587 } 587 }
588 588
589 _unmangleQualified(Symbol s) {
590 return _n(s).split('.').map((n) => MirrorSystem.getName(_s(n))).join('.');
591 }
592
589 get _mixinApplicationName { 593 get _mixinApplicationName {
590 var mixins = new List<ClassMirror>(); 594 var mixins = new List<ClassMirror>();
591 var klass = this; 595 var klass = this;
592 while (_nativeMixin(klass._reflectedType) != null) { 596 while (_nativeMixin(klass._reflectedType) != null) {
593 mixins.add(klass.mixin); 597 mixins.add(klass.mixin);
594 klass = klass.superclass; 598 klass = klass.superclass;
595 } 599 }
600 // Strip out the private manglings early, but the VM's unmangling routine
601 // can't cope with them.
596 return _s( 602 return _s(
597 _n(klass.qualifiedName) 603 _unmangleQualified(klass.qualifiedName)
598 + ' with ' 604 + ' with '
599 + mixins.reversed.map((m)=>_n(m.qualifiedName)).join(', ')); 605 + mixins.reversed.map((m)=>_unmangleQualified(m.qualifiedName)).join(', ') );
600 } 606 }
601 607
602 var _mixin; 608 var _mixin;
603 ClassMirror get mixin { 609 ClassMirror get mixin {
604 if (_mixin == null) { 610 if (_mixin == null) {
605 if (_isMixinTypedef) { 611 if (_isMixinTypedef) {
606 Type mixinType = _nativeMixinInstantiated(_trueSuperclass._reflectedType , 612 Type mixinType = _nativeMixinInstantiated(_trueSuperclass._reflectedType ,
607 _instantiator); 613 _instantiator);
608 _mixin = reflectType(mixinType); 614 _mixin = reflectType(mixinType);
609 } else { 615 } else {
(...skipping 719 matching lines...) Expand 10 before | Expand all | Expand 10 after
1329 if (_constructorName == null) { 1335 if (_constructorName == null) {
1330 if (!isConstructor) { 1336 if (!isConstructor) {
1331 _constructorName = _s(''); 1337 _constructorName = _s('');
1332 } else { 1338 } else {
1333 var parts = MirrorSystem.getName(simpleName).split('.'); 1339 var parts = MirrorSystem.getName(simpleName).split('.');
1334 if (parts.length > 2) { 1340 if (parts.length > 2) {
1335 throw new MirrorException( 1341 throw new MirrorException(
1336 'Internal error in MethodMirror.constructorName: ' 1342 'Internal error in MethodMirror.constructorName: '
1337 'malformed name <$simpleName>'); 1343 'malformed name <$simpleName>');
1338 } else if (parts.length == 2) { 1344 } else if (parts.length == 2) {
1339 _constructorName = _s(parts[1]); 1345 LibraryMirror definingLibrary = owner.owner;
1346 _constructorName = MirrorSystem.getSymbol(parts[1], definingLibrary);
1340 } else { 1347 } else {
1341 _constructorName = _s(''); 1348 _constructorName = _s('');
1342 } 1349 }
1343 } 1350 }
1344 } 1351 }
1345 return _constructorName; 1352 return _constructorName;
1346 } 1353 }
1347 1354
1348 String _source = null; 1355 String _source = null;
1349 String get source { 1356 String get source {
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after
1575 if (typeMirror == null) { 1582 if (typeMirror == null) {
1576 typeMirror = makeLocalTypeMirror(key); 1583 typeMirror = makeLocalTypeMirror(key);
1577 _instanitationCache[key] = typeMirror; 1584 _instanitationCache[key] = typeMirror;
1578 if (typeMirror is ClassMirror && !typeMirror._isGeneric) { 1585 if (typeMirror is ClassMirror && !typeMirror._isGeneric) {
1579 _declarationCache[key] = typeMirror; 1586 _declarationCache[key] = typeMirror;
1580 } 1587 }
1581 } 1588 }
1582 return typeMirror; 1589 return typeMirror;
1583 } 1590 }
1584 } 1591 }
OLDNEW
« no previous file with comments | « no previous file | runtime/lib/mirrors_patch.dart » ('j') | tests/lib/mirrors/constructor_private_name_test.dart » ('J')

Powered by Google App Engine
This is Rietveld 408576698