OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, 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 compiler.src.inferrer.type_graph_nodes; | 5 library compiler.src.inferrer.type_graph_nodes; |
6 | 6 |
7 import 'dart:collection' show IterableBase; | 7 import 'dart:collection' show IterableBase; |
8 | 8 |
9 import '../common.dart'; | 9 import '../common.dart'; |
10 import '../common/names.dart' show Identifiers; | 10 import '../common/names.dart' show Identifiers; |
(...skipping 476 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
487 } else { | 487 } else { |
488 return inferrer | 488 return inferrer |
489 .typeOfNativeBehavior( | 489 .typeOfNativeBehavior( |
490 native.NativeBehavior.ofMethod(element, inferrer.compiler)) | 490 native.NativeBehavior.ofMethod(element, inferrer.compiler)) |
491 .type; | 491 .type; |
492 } | 492 } |
493 } | 493 } |
494 } | 494 } |
495 | 495 |
496 Compiler compiler = inferrer.compiler; | 496 Compiler compiler = inferrer.compiler; |
497 if (element.declaration == compiler.intEnvironment) { | 497 if (element.isConstructor) { |
498 giveUp(inferrer); | 498 ConstructorElement constructor = element; |
499 return compiler.typesTask.intType.nullable(); | 499 if (constructor.isIntFromEnvironmentConstructor) { |
500 } else if (element.declaration == compiler.boolEnvironment) { | 500 giveUp(inferrer); |
501 giveUp(inferrer); | 501 return compiler.typesTask.intType.nullable(); |
502 return compiler.typesTask.boolType.nullable(); | 502 } else if (constructor.isBoolFromEnvironmentConstructor) { |
503 } else if (element.declaration == compiler.stringEnvironment) { | 503 giveUp(inferrer); |
504 giveUp(inferrer); | 504 return compiler.typesTask.boolType.nullable(); |
505 return compiler.typesTask.stringType.nullable(); | 505 } else if (constructor.isStringFromEnvironmentConstructor) { |
| 506 giveUp(inferrer); |
| 507 return compiler.typesTask.stringType.nullable(); |
| 508 } |
506 } | 509 } |
507 return null; | 510 return null; |
508 } | 511 } |
509 | 512 |
510 TypeMask potentiallyNarrowType( | 513 TypeMask potentiallyNarrowType( |
511 TypeMask mask, TypeGraphInferrerEngine inferrer) { | 514 TypeMask mask, TypeGraphInferrerEngine inferrer) { |
512 Compiler compiler = inferrer.compiler; | 515 Compiler compiler = inferrer.compiler; |
513 if (!compiler.options.trustTypeAnnotations && | 516 if (!compiler.options.trustTypeAnnotations && |
514 !compiler.options.enableTypeAssertions && | 517 !compiler.options.enableTypeAssertions && |
515 !inferrer.annotations.trustTypeAnnotations(element)) { | 518 !inferrer.annotations.trustTypeAnnotations(element)) { |
(...skipping 1195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1711 } else if (annotation.isVoid) { | 1714 } else if (annotation.isVoid) { |
1712 otherType = compiler.typesTask.nullType; | 1715 otherType = compiler.typesTask.nullType; |
1713 } else { | 1716 } else { |
1714 assert(annotation.isInterfaceType); | 1717 assert(annotation.isInterfaceType); |
1715 otherType = new TypeMask.nonNullSubtype(annotation.element, compiler.world); | 1718 otherType = new TypeMask.nonNullSubtype(annotation.element, compiler.world); |
1716 } | 1719 } |
1717 if (isNullable) otherType = otherType.nullable(); | 1720 if (isNullable) otherType = otherType.nullable(); |
1718 if (type == null) return otherType; | 1721 if (type == null) return otherType; |
1719 return type.intersection(otherType, compiler.world); | 1722 return type.intersection(otherType, compiler.world); |
1720 } | 1723 } |
OLD | NEW |