OLD | NEW |
1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2017, 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 library dart2js.kernel.element_map; | 5 library dart2js.kernel.element_map; |
6 | 6 |
7 import 'package:kernel/ast.dart' as ir; | 7 import 'package:kernel/ast.dart' as ir; |
8 | 8 |
9 import '../common.dart'; | 9 import '../common.dart'; |
10 import '../common/resolution.dart'; | 10 import '../common/resolution.dart'; |
(...skipping 406 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
417 _ensureThisAndRawType(cls, env); | 417 _ensureThisAndRawType(cls, env); |
418 return env.thisType; | 418 return env.thisType; |
419 } | 419 } |
420 | 420 |
421 InterfaceType _getRawType(KClass cls) { | 421 InterfaceType _getRawType(KClass cls) { |
422 _KClassEnv env = _classEnvs[cls.classIndex]; | 422 _KClassEnv env = _classEnvs[cls.classIndex]; |
423 _ensureThisAndRawType(cls, env); | 423 _ensureThisAndRawType(cls, env); |
424 return env.rawType; | 424 return env.rawType; |
425 } | 425 } |
426 | 426 |
| 427 InterfaceType _asInstanceOf(InterfaceType type, KClass cls) { |
| 428 OrderedTypeSet orderedTypeSet = _getOrderedTypeSet(type.element); |
| 429 InterfaceType supertype = |
| 430 orderedTypeSet.asInstanceOf(cls, _getHierarchyDepth(cls)); |
| 431 if (supertype != null) { |
| 432 supertype = _substByContext(supertype, type); |
| 433 } |
| 434 return supertype; |
| 435 } |
| 436 |
427 void _ensureSupertypes(KClass cls, _KClassEnv env) { | 437 void _ensureSupertypes(KClass cls, _KClassEnv env) { |
428 if (env.orderedTypeSet == null) { | 438 if (env.orderedTypeSet == null) { |
429 _ensureThisAndRawType(cls, env); | 439 _ensureThisAndRawType(cls, env); |
430 | 440 |
431 ir.Class node = env.cls; | 441 ir.Class node = env.cls; |
432 | 442 |
433 if (node.supertype == null) { | 443 if (node.supertype == null) { |
434 env.orderedTypeSet = new OrderedTypeSet.singleton(env.thisType); | 444 env.orderedTypeSet = new OrderedTypeSet.singleton(env.thisType); |
435 } else { | 445 } else { |
436 InterfaceType processSupertype(ir.Supertype node) { | 446 InterfaceType processSupertype(ir.Supertype node) { |
(...skipping 457 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
894 InterfaceType getThisType(ClassEntity cls) { | 904 InterfaceType getThisType(ClassEntity cls) { |
895 return elementMap._getThisType(cls); | 905 return elementMap._getThisType(cls); |
896 } | 906 } |
897 | 907 |
898 @override | 908 @override |
899 InterfaceType getRawType(ClassEntity cls) { | 909 InterfaceType getRawType(ClassEntity cls) { |
900 return elementMap._getRawType(cls); | 910 return elementMap._getRawType(cls); |
901 } | 911 } |
902 | 912 |
903 @override | 913 @override |
| 914 bool isGenericClass(ClassEntity cls) { |
| 915 return getThisType(cls).typeArguments.isNotEmpty; |
| 916 } |
| 917 |
| 918 @override |
904 DartType getTypeVariableBound(TypeVariableEntity typeVariable) { | 919 DartType getTypeVariableBound(TypeVariableEntity typeVariable) { |
905 throw new UnimplementedError( | 920 throw new UnimplementedError( |
906 'KernelElementEnvironment.getTypeVariableBound'); | 921 'KernelElementEnvironment.getTypeVariableBound'); |
907 } | 922 } |
908 | 923 |
909 @override | 924 @override |
910 InterfaceType createInterfaceType( | 925 InterfaceType createInterfaceType( |
911 ClassEntity cls, List<DartType> typeArguments) { | 926 ClassEntity cls, List<DartType> typeArguments) { |
912 return new InterfaceType(cls, typeArguments); | 927 return new InterfaceType(cls, typeArguments); |
913 } | 928 } |
(...skipping 368 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1282 } | 1297 } |
1283 | 1298 |
1284 InterfaceType getMixinTypeForClass(KClass cls) { | 1299 InterfaceType getMixinTypeForClass(KClass cls) { |
1285 _KClassEnv env = builder._classEnvs[cls.classIndex]; | 1300 _KClassEnv env = builder._classEnvs[cls.classIndex]; |
1286 ir.Supertype mixedInType = env.cls.mixedInType; | 1301 ir.Supertype mixedInType = env.cls.mixedInType; |
1287 if (mixedInType == null) return null; | 1302 if (mixedInType == null) return null; |
1288 return builder.createInterfaceType( | 1303 return builder.createInterfaceType( |
1289 mixedInType.classNode, mixedInType.typeArguments); | 1304 mixedInType.classNode, mixedInType.typeArguments); |
1290 } | 1305 } |
1291 } | 1306 } |
OLD | NEW |