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

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

Issue 1072443005: Deal with type arguments of generic local functions in VM mirrors. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 8 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « runtime/lib/mirrors.cc ('k') | runtime/vm/bootstrap_natives.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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" show UnmodifiableListView, UnmodifiableMapView; 7 import "dart:collection" show UnmodifiableListView, UnmodifiableMapView;
8 8
9 final emptyList = new UnmodifiableListView([]); 9 final emptyList = new UnmodifiableListView([]);
10 final emptyMap = new UnmodifiableMapView({}); 10 final emptyMap = new UnmodifiableMapView({});
(...skipping 1339 matching lines...) Expand 10 before | Expand all | Expand 10 after
1350 final bool isShow; 1350 final bool isShow;
1351 1351
1352 _LocalCombinatorMirror(identifierString, this.isShow) 1352 _LocalCombinatorMirror(identifierString, this.isShow)
1353 : this.identifiers = [_s(identifierString)]; 1353 : this.identifiers = [_s(identifierString)];
1354 1354
1355 bool get isHide => !isShow; 1355 bool get isHide => !isShow;
1356 } 1356 }
1357 1357
1358 class _LocalMethodMirror extends _LocalDeclarationMirror 1358 class _LocalMethodMirror extends _LocalDeclarationMirror
1359 implements MethodMirror { 1359 implements MethodMirror {
1360 final _instantiatorForLocal;
regis 2015/04/08 20:58:06 I do not understand the meaning of "ForLocal".
rmacnak 2015/04/08 21:35:05 I was only setting this for local functions, then
1360 final bool isStatic; 1361 final bool isStatic;
1361 final bool isAbstract; 1362 final bool isAbstract;
1362 final bool isGetter; 1363 final bool isGetter;
1363 final bool isSetter; 1364 final bool isSetter;
1364 final bool isConstructor; 1365 final bool isConstructor;
1365 final bool isConstConstructor; 1366 final bool isConstConstructor;
1366 final bool isGenerativeConstructor; 1367 final bool isGenerativeConstructor;
1367 final bool isRedirectingConstructor; 1368 final bool isRedirectingConstructor;
1368 final bool isFactoryConstructor; 1369 final bool isFactoryConstructor;
1369 final bool isOperator; 1370 final bool isOperator;
1370 1371
1371 static const _operators = const ["%", "&", "*", "+", "-", "/", "<", "<<", 1372 static const _operators = const ["%", "&", "*", "+", "-", "/", "<", "<<",
1372 "<=", "==", ">", ">=", ">>", "[]", "[]=", "^", "|", "~", "unary-", "~/"]; 1373 "<=", "==", ">", ">=", ">>", "[]", "[]=", "^", "|", "~", "unary-", "~/"];
1373 1374
1374 _LocalMethodMirror(reflectee, 1375 _LocalMethodMirror(reflectee,
1375 String simpleName, 1376 String simpleName,
1376 this._owner, 1377 this._owner,
1378 this._instantiatorForLocal,
1377 this.isStatic, 1379 this.isStatic,
1378 this.isAbstract, 1380 this.isAbstract,
1379 this.isGetter, 1381 this.isGetter,
1380 this.isSetter, 1382 this.isSetter,
1381 this.isConstructor, 1383 this.isConstructor,
1382 this.isConstConstructor, 1384 this.isConstConstructor,
1383 this.isGenerativeConstructor, 1385 this.isGenerativeConstructor,
1384 this.isRedirectingConstructor, 1386 this.isRedirectingConstructor,
1385 this.isFactoryConstructor) 1387 this.isFactoryConstructor)
1386 : this.isOperator = _operators.contains(simpleName), 1388 : this.isOperator = _operators.contains(simpleName),
1387 super(reflectee, _s(simpleName)); 1389 super(reflectee, _s(simpleName));
1388 1390
1389 DeclarationMirror _owner; 1391 DeclarationMirror _owner;
1390 DeclarationMirror get owner { 1392 DeclarationMirror get owner {
1391 // For nested closures it is possible, that the mirror for the owner has not 1393 // For nested closures it is possible, that the mirror for the owner has not
1392 // been created yet. 1394 // been created yet.
1393 if (_owner == null) { 1395 if (_owner == null) {
1394 _owner = _MethodMirror_owner(_reflectee); 1396 _owner = _MethodMirror_owner(_reflectee, _instantiatorForLocal);
1395 } 1397 }
1396 return _owner; 1398 return _owner;
1397 } 1399 }
1398 1400
1399 bool get isPrivate => _n(simpleName).startsWith('_') || 1401 bool get isPrivate => _n(simpleName).startsWith('_') ||
1400 _n(constructorName).startsWith('_'); 1402 _n(constructorName).startsWith('_');
1401 1403
1402 bool get isTopLevel => owner is LibraryMirror; 1404 bool get isTopLevel => owner is LibraryMirror;
1403 bool get isSynthetic => false; 1405 bool get isSynthetic => false;
1404 1406
1405 Type get _instantiator { 1407 Type get _instantiator {
1408 if (_instantiatorForLocal != null) {
1409 return _instantiatorForLocal;
1410 }
1406 var o = owner; 1411 var o = owner;
1407 while (o is MethodMirror) o = o.owner; 1412 while (o is MethodMirror) o = o.owner;
1408 return o._instantiator; 1413 return o._instantiator;
1409 } 1414 }
1410 1415
1411 TypeMirror _returnType = null; 1416 TypeMirror _returnType = null;
1412 TypeMirror get returnType { 1417 TypeMirror get returnType {
1413 if (_returnType == null) { 1418 if (_returnType == null) {
1414 if (isConstructor) { 1419 if (isConstructor) {
1415 _returnType = owner; 1420 _returnType = owner;
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
1466 var cn = _n(constructorName); 1471 var cn = _n(constructorName);
1467 if(cn == ''){ 1472 if(cn == ''){
1468 _simpleName = _s(ownerName); 1473 _simpleName = _s(ownerName);
1469 } else { 1474 } else {
1470 _simpleName = _s(ownerName + "." + cn); 1475 _simpleName = _s(ownerName + "." + cn);
1471 } 1476 }
1472 } 1477 }
1473 1478
1474 String toString() => "MethodMirror on '${MirrorSystem.getName(simpleName)}'"; 1479 String toString() => "MethodMirror on '${MirrorSystem.getName(simpleName)}'";
1475 1480
1476 static dynamic _MethodMirror_owner(reflectee) 1481 static dynamic _MethodMirror_owner(reflectee, instantiator)
1477 native "MethodMirror_owner"; 1482 native "MethodMirror_owner";
1478 1483
1479 static dynamic _MethodMirror_return_type(reflectee, instantiator) 1484 static dynamic _MethodMirror_return_type(reflectee, instantiator)
1480 native "MethodMirror_return_type"; 1485 native "MethodMirror_return_type";
1481 1486
1482 List<ParameterMirror> _MethodMirror_parameters(reflectee) 1487 List<ParameterMirror> _MethodMirror_parameters(reflectee)
1483 native "MethodMirror_parameters"; 1488 native "MethodMirror_parameters";
1484 1489
1485 static String _MethodMirror_source(reflectee) 1490 static String _MethodMirror_source(reflectee)
1486 native "MethodMirror_source"; 1491 native "MethodMirror_source";
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
1564 SourceLocation get location { 1569 SourceLocation get location {
1565 throw new UnsupportedError("ParameterMirror.location unimplemented"); 1570 throw new UnsupportedError("ParameterMirror.location unimplemented");
1566 } 1571 }
1567 1572
1568 List<InstanceMirror> get metadata { 1573 List<InstanceMirror> get metadata {
1569 if (_unmirroredMetadata == null) return emptyList; 1574 if (_unmirroredMetadata == null) return emptyList;
1570 return new UnmodifiableListView(_unmirroredMetadata.map(reflect)); 1575 return new UnmodifiableListView(_unmirroredMetadata.map(reflect));
1571 } 1576 }
1572 1577
1573 Type get _instantiator { 1578 Type get _instantiator {
1574 var o = owner; 1579 return owner._instantiator;
1575 while (o is MethodMirror) o = o.owner;
1576 return o._instantiator;
1577 } 1580 }
1578 1581
1579 TypeMirror _type = null; 1582 TypeMirror _type = null;
1580 TypeMirror get type { 1583 TypeMirror get type {
1581 if (_type == null) { 1584 if (_type == null) {
1582 _type = reflectType( 1585 _type = reflectType(
1583 _ParameterMirror_type(_reflectee, _position, _instantiator)); 1586 _ParameterMirror_type(_reflectee, _position, _instantiator));
1584 } 1587 }
1585 return _type; 1588 return _type;
1586 } 1589 }
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
1688 if (typeMirror == null) { 1691 if (typeMirror == null) {
1689 typeMirror = makeLocalTypeMirror(key); 1692 typeMirror = makeLocalTypeMirror(key);
1690 _instanitationCache[key] = typeMirror; 1693 _instanitationCache[key] = typeMirror;
1691 if (typeMirror is ClassMirror && !typeMirror._isGeneric) { 1694 if (typeMirror is ClassMirror && !typeMirror._isGeneric) {
1692 _declarationCache[key] = typeMirror; 1695 _declarationCache[key] = typeMirror;
1693 } 1696 }
1694 } 1697 }
1695 return typeMirror; 1698 return typeMirror;
1696 } 1699 }
1697 } 1700 }
OLDNEW
« no previous file with comments | « runtime/lib/mirrors.cc ('k') | runtime/vm/bootstrap_natives.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698