| OLD | NEW | 
|      1 // Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file |      1 // Copyright (c) 2014, 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 engine.resolver; |      5 library engine.resolver; | 
|      6  |      6  | 
|      7 import 'dart:collection'; |      7 import 'dart:collection'; | 
|      8  |      8  | 
|      9 import '../task/strong/info.dart' show InferredType, StaticInfo; |      9 import '../task/strong/info.dart' show InferredType, StaticInfo; | 
|     10 import 'ast.dart'; |     10 import 'ast.dart'; | 
| (...skipping 11729 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  11740  |  11740  | 
|  11741   @override |  11741   @override | 
|  11742   Object visitLabel(Label node) => null; |  11742   Object visitLabel(Label node) => null; | 
|  11743  |  11743  | 
|  11744   @override |  11744   @override | 
|  11745   Object visitLibraryIdentifier(LibraryIdentifier node) => null; |  11745   Object visitLibraryIdentifier(LibraryIdentifier node) => null; | 
|  11746  |  11746  | 
|  11747   @override |  11747   @override | 
|  11748   Object visitListLiteral(ListLiteral node) { |  11748   Object visitListLiteral(ListLiteral node) { | 
|  11749     DartType contextType = InferenceContext.getType(node); |  11749     DartType contextType = InferenceContext.getType(node); | 
|  11750     if (node.typeArguments == null && contextType is InterfaceType) { |  11750     List<DartType> targs = null; | 
 |  11751     if (node.typeArguments != null) { | 
 |  11752       targs = node.typeArguments.arguments.map((t) => t.type).toList(); | 
 |  11753     } else if (contextType is InterfaceType) { | 
|  11751       InterfaceType listD = |  11754       InterfaceType listD = | 
|  11752           typeProvider.listType.substitute4([typeProvider.dynamicType]); |  11755           typeProvider.listType.substitute4([typeProvider.dynamicType]); | 
|  11753       List<DartType> targs = inferenceContext.matchTypes(listD, contextType); |  11756       targs = inferenceContext.matchTypes(listD, contextType); | 
|  11754       if (targs != null && |  11757     } | 
|  11755           targs.length == 1 && |  11758     if (targs != null && | 
|  11756           targs.any((t) => !t.isDynamic)) { |  11759         targs.length == 1 && | 
|  11757         DartType eType = targs[0]; |  11760         !targs[0].isDynamic) { | 
|  11758         InterfaceType listT = typeProvider.listType.substitute4([eType]); |  11761       DartType eType = targs[0]; | 
|  11759         for (Expression child in node.elements) { |  11762       InterfaceType listT = typeProvider.listType.substitute4([eType]); | 
|  11760           InferenceContext.setType(child, eType); |  11763       for (Expression child in node.elements) { | 
|  11761         } |  11764         InferenceContext.setType(child, eType); | 
|  11762         InferenceContext.setType(node, listT); |  | 
|  11763       } else { |  | 
|  11764         InferenceContext.clearType(node); |  | 
|  11765       } |  11765       } | 
 |  11766       InferenceContext.setType(node, listT); | 
 |  11767     } else { | 
 |  11768       InferenceContext.clearType(node); | 
|  11766     } |  11769     } | 
|  11767     super.visitListLiteral(node); |  11770     super.visitListLiteral(node); | 
|  11768     return null; |  11771     return null; | 
|  11769   } |  11772   } | 
|  11770  |  11773  | 
|  11771   @override |  11774   @override | 
|  11772   Object visitMapLiteral(MapLiteral node) { |  11775   Object visitMapLiteral(MapLiteral node) { | 
|  11773     DartType contextType = InferenceContext.getType(node); |  11776     DartType contextType = InferenceContext.getType(node); | 
|  11774     if (node.typeArguments == null && contextType is InterfaceType) { |  11777     List<DartType> targs = null; | 
 |  11778     if (node.typeArguments != null) { | 
 |  11779       targs = node.typeArguments.arguments.map((t) => t.type).toList(); | 
 |  11780     } else if (contextType is InterfaceType) { | 
|  11775       InterfaceType mapD = typeProvider.mapType |  11781       InterfaceType mapD = typeProvider.mapType | 
|  11776           .substitute4([typeProvider.dynamicType, typeProvider.dynamicType]); |  11782           .substitute4([typeProvider.dynamicType, typeProvider.dynamicType]); | 
|  11777       List<DartType> targs = inferenceContext.matchTypes(mapD, contextType); |  11783       targs = inferenceContext.matchTypes(mapD, contextType); | 
|  11778       if (targs != null && |  11784     } | 
|  11779           targs.length == 2 && |  11785     if (targs != null && | 
|  11780           targs.any((t) => !t.isDynamic)) { |  11786         targs.length == 2 && | 
|  11781         DartType kType = targs[0]; |  11787         targs.any((t) => !t.isDynamic)) { | 
|  11782         DartType vType = targs[1]; |  11788       DartType kType = targs[0]; | 
|  11783         InterfaceType mapT = typeProvider.mapType.substitute4([kType, vType]); |  11789       DartType vType = targs[1]; | 
|  11784         for (MapLiteralEntry entry in node.entries) { |  11790       InterfaceType mapT = typeProvider.mapType.substitute4([kType, vType]); | 
|  11785           InferenceContext.setType(entry.key, kType); |  11791       for (MapLiteralEntry entry in node.entries) { | 
|  11786           InferenceContext.setType(entry.value, vType); |  11792         InferenceContext.setType(entry.key, kType); | 
|  11787         } |  11793         InferenceContext.setType(entry.value, vType); | 
|  11788         InferenceContext.setType(node, mapT); |  | 
|  11789       } else { |  | 
|  11790         InferenceContext.clearType(node); |  | 
|  11791       } |  11794       } | 
 |  11795       InferenceContext.setType(node, mapT); | 
 |  11796     } else { | 
 |  11797       InferenceContext.clearType(node); | 
|  11792     } |  11798     } | 
|  11793     super.visitMapLiteral(node); |  11799     super.visitMapLiteral(node); | 
|  11794     return null; |  11800     return null; | 
|  11795   } |  11801   } | 
|  11796  |  11802  | 
|  11797   @override |  11803   @override | 
|  11798   Object visitMethodDeclaration(MethodDeclaration node) { |  11804   Object visitMethodDeclaration(MethodDeclaration node) { | 
|  11799     ExecutableElement outerFunction = _enclosingFunction; |  11805     ExecutableElement outerFunction = _enclosingFunction; | 
|  11800     try { |  11806     try { | 
|  11801       _enclosingFunction = node.element; |  11807       _enclosingFunction = node.element; | 
| (...skipping 4262 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  16064     nonFields.add(node); |  16070     nonFields.add(node); | 
|  16065     return null; |  16071     return null; | 
|  16066   } |  16072   } | 
|  16067  |  16073  | 
|  16068   @override |  16074   @override | 
|  16069   Object visitNode(AstNode node) => node.accept(TypeResolverVisitor_this); |  16075   Object visitNode(AstNode node) => node.accept(TypeResolverVisitor_this); | 
|  16070  |  16076  | 
|  16071   @override |  16077   @override | 
|  16072   Object visitWithClause(WithClause node) => null; |  16078   Object visitWithClause(WithClause node) => null; | 
|  16073 } |  16079 } | 
| OLD | NEW |