| OLD | NEW | 
|---|
|  | (Empty) | 
| 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 |  | 
| 3 // BSD-style license that can be found in the LICENSE file. |  | 
| 4 |  | 
| 5 library analyzer2dart.convertedWorld; |  | 
| 6 |  | 
| 7 import 'dart:collection'; |  | 
| 8 |  | 
| 9 import 'package:analyzer/analyzer.dart'; |  | 
| 10 import 'package:compiler/src/dart_types.dart' as dart2js; |  | 
| 11 import 'package:compiler/src/elements/elements.dart' as dart2js; |  | 
| 12 import 'package:analyzer/src/generated/element.dart' as analyzer; |  | 
| 13 import 'package:compiler/src/cps_ir/cps_ir_nodes.dart' as ir; |  | 
| 14 |  | 
| 15 import 'closed_world.dart'; |  | 
| 16 import 'element_converter.dart'; |  | 
| 17 import 'cps_generator.dart'; |  | 
| 18 import 'util.dart'; |  | 
| 19 |  | 
| 20 /// A [ClosedWorld] converted to the dart2js element model. |  | 
| 21 abstract class ConvertedWorld { |  | 
| 22   Iterable<dart2js.LibraryElement> get libraries; |  | 
| 23   Iterable<dart2js.AstElement> get resolvedElements; |  | 
| 24   Iterable<dart2js.ClassElement> get instantiatedClasses; |  | 
| 25   dart2js.FunctionElement get mainFunction; |  | 
| 26   ir.Node getIr(dart2js.Element element); |  | 
| 27   dart2js.DartTypes get dartTypes; |  | 
| 28 } |  | 
| 29 |  | 
| 30 class _ConvertedWorldImpl implements ConvertedWorld { |  | 
| 31   final dart2js.FunctionElement mainFunction; |  | 
| 32   Map<dart2js.AstElement, ir.Node> executableElements = |  | 
| 33       new HashMap<dart2js.AstElement, ir.Node>(); |  | 
| 34   final List<dart2js.ClassElement> instantiatedClasses = |  | 
| 35       <dart2js.ClassElement>[]; |  | 
| 36 |  | 
| 37   _ConvertedWorldImpl(this.mainFunction); |  | 
| 38 |  | 
| 39   // TODO(johnniwinther): Add all used libraries and all SDK libraries to the |  | 
| 40   // set of libraries in the converted world. |  | 
| 41   Iterable<dart2js.LibraryElement> get libraries => [mainFunction.library]; |  | 
| 42 |  | 
| 43   Iterable<dart2js.AstElement> get resolvedElements => executableElements.keys; |  | 
| 44 |  | 
| 45   ir.Node getIr(dart2js.Element element) => executableElements[element]; |  | 
| 46 |  | 
| 47   final dart2js.DartTypes dartTypes = new _DartTypes(); |  | 
| 48 } |  | 
| 49 |  | 
| 50 ConvertedWorld convertWorld(ClosedWorld closedWorld) { |  | 
| 51   ElementConverter converter = new ElementConverter(); |  | 
| 52   _ConvertedWorldImpl convertedWorld = new _ConvertedWorldImpl( |  | 
| 53       converter.convertElement(closedWorld.mainFunction)); |  | 
| 54 |  | 
| 55   void convert(analyzer.Element analyzerElement, AstNode node) { |  | 
| 56     // Skip conversion of SDK sources since we don't generate code for it |  | 
| 57     // anyway. |  | 
| 58     if (analyzerElement.source.isInSystemLibrary) return; |  | 
| 59 |  | 
| 60     dart2js.AstElement dart2jsElement = |  | 
| 61         converter.convertElement(analyzerElement); |  | 
| 62     CpsElementVisitor visitor = new CpsElementVisitor(converter, node); |  | 
| 63     ir.Node cpsNode = analyzerElement.accept(visitor); |  | 
| 64     convertedWorld.executableElements[dart2jsElement] = cpsNode; |  | 
| 65     if (cpsNode == null && !analyzerElement.isSynthetic) { |  | 
| 66       String message = |  | 
| 67          'No CPS node generated for $analyzerElement (${node.runtimeType}).'; |  | 
| 68       reportSourceMessage(analyzerElement.source, node, message); |  | 
| 69       throw new UnimplementedError(message); |  | 
| 70     } |  | 
| 71   } |  | 
| 72 |  | 
| 73   void convertClass(analyzer.ClassElement analyzerElement, _) { |  | 
| 74     // Skip conversion of SDK sources since we don't generate code for it |  | 
| 75     // anyway. |  | 
| 76     if (analyzerElement.source.isInSystemLibrary) return; |  | 
| 77     convertedWorld.instantiatedClasses.add( |  | 
| 78         converter.convertElement(analyzerElement)); |  | 
| 79   } |  | 
| 80 |  | 
| 81   closedWorld.executableElements.forEach(convert); |  | 
| 82   closedWorld.variables.forEach(convert); |  | 
| 83   closedWorld.fields.forEach(convert); |  | 
| 84   closedWorld.instantiatedClasses.forEach(convertClass); |  | 
| 85 |  | 
| 86   return convertedWorld; |  | 
| 87 } |  | 
| 88 |  | 
| 89 // TODO(johnniwinther): Implement [coreTypes] using [TypeProvider]. |  | 
| 90 class _DartTypes implements dart2js.DartTypes { |  | 
| 91   @override |  | 
| 92   get coreTypes => throw new UnsupportedError("coreTypes"); |  | 
| 93 |  | 
| 94   @override |  | 
| 95   bool isSubtype(dart2js.DartType t, dart2js.DartType s) { |  | 
| 96     throw new UnsupportedError("isSubtype"); |  | 
| 97   } |  | 
| 98 } |  | 
| OLD | NEW | 
|---|