| OLD | NEW |
| 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, 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.serialization.impact; | 5 library dart2js.serialization.impact; |
| 6 | 6 |
| 7 import '../dart_types.dart'; | 7 import '../dart_types.dart'; |
| 8 import '../common/resolution.dart'; | 8 import '../common/resolution.dart'; |
| 9 import '../constants/expressions.dart'; | 9 import '../constants/expressions.dart'; |
| 10 import '../elements/elements.dart'; | 10 import '../elements/elements.dart'; |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 55 useEncoder.setBool(Key.IS_EMPTY, use.isEmpty); | 55 useEncoder.setBool(Key.IS_EMPTY, use.isEmpty); |
| 56 } | 56 } |
| 57 } | 57 } |
| 58 } | 58 } |
| 59 | 59 |
| 60 @override | 60 @override |
| 61 void visitDynamicUse(DynamicUse dynamicUse) { | 61 void visitDynamicUse(DynamicUse dynamicUse) { |
| 62 ObjectEncoder object = dynamicUses.createObject(); | 62 ObjectEncoder object = dynamicUses.createObject(); |
| 63 object.setEnum(Key.KIND, dynamicUse.selector.kind); | 63 object.setEnum(Key.KIND, dynamicUse.selector.kind); |
| 64 | 64 |
| 65 object.setInt(Key.ARGUMENTS, | 65 object.setInt( |
| 66 dynamicUse.selector.callStructure.argumentCount); | 66 Key.ARGUMENTS, dynamicUse.selector.callStructure.argumentCount); |
| 67 object.setStrings(Key.NAMED_ARGUMENTS, | 67 object.setStrings( |
| 68 dynamicUse.selector.callStructure.namedArguments); | 68 Key.NAMED_ARGUMENTS, dynamicUse.selector.callStructure.namedArguments); |
| 69 | 69 |
| 70 object.setString(Key.NAME, | 70 object.setString(Key.NAME, dynamicUse.selector.memberName.text); |
| 71 dynamicUse.selector.memberName.text); | 71 object.setBool(Key.IS_SETTER, dynamicUse.selector.memberName.isSetter); |
| 72 object.setBool(Key.IS_SETTER, | |
| 73 dynamicUse.selector.memberName.isSetter); | |
| 74 if (dynamicUse.selector.memberName.library != null) { | 72 if (dynamicUse.selector.memberName.library != null) { |
| 75 object.setElement(Key.LIBRARY, | 73 object.setElement(Key.LIBRARY, dynamicUse.selector.memberName.library); |
| 76 dynamicUse.selector.memberName.library); | |
| 77 } | 74 } |
| 78 } | 75 } |
| 79 | 76 |
| 80 @override | 77 @override |
| 81 void visitStaticUse(StaticUse staticUse) { | 78 void visitStaticUse(StaticUse staticUse) { |
| 82 if (staticUse.element.isGenerativeConstructor && | 79 if (staticUse.element.isGenerativeConstructor && |
| 83 staticUse.element.enclosingClass.isUnnamedMixinApplication) { | 80 staticUse.element.enclosingClass.isUnnamedMixinApplication) { |
| 84 // TODO(johnniwinther): Handle static use of forwarding constructors. | 81 // TODO(johnniwinther): Handle static use of forwarding constructors. |
| 85 return; | 82 return; |
| 86 } | 83 } |
| (...skipping 15 matching lines...) Expand all Loading... |
| 102 implements ResolutionImpact { | 99 implements ResolutionImpact { |
| 103 final Iterable<String> constSymbolNames; | 100 final Iterable<String> constSymbolNames; |
| 104 final Iterable<ConstantExpression> constantLiterals; | 101 final Iterable<ConstantExpression> constantLiterals; |
| 105 final Iterable<DynamicUse> dynamicUses; | 102 final Iterable<DynamicUse> dynamicUses; |
| 106 final EnumSet<Feature> _features; | 103 final EnumSet<Feature> _features; |
| 107 final Iterable<ListLiteralUse> listLiterals; | 104 final Iterable<ListLiteralUse> listLiterals; |
| 108 final Iterable<MapLiteralUse> mapLiterals; | 105 final Iterable<MapLiteralUse> mapLiterals; |
| 109 final Iterable<StaticUse> staticUses; | 106 final Iterable<StaticUse> staticUses; |
| 110 final Iterable<TypeUse> typeUses; | 107 final Iterable<TypeUse> typeUses; |
| 111 | 108 |
| 112 DeserializedResolutionImpact({ | 109 DeserializedResolutionImpact( |
| 113 this.constSymbolNames, | 110 {this.constSymbolNames, |
| 114 this.constantLiterals, | 111 this.constantLiterals, |
| 115 this.dynamicUses, | 112 this.dynamicUses, |
| 116 EnumSet<Feature> features, | 113 EnumSet<Feature> features, |
| 117 this.listLiterals, | 114 this.listLiterals, |
| 118 this.mapLiterals, | 115 this.mapLiterals, |
| 119 this.staticUses, | 116 this.staticUses, |
| 120 this.typeUses}) | 117 this.typeUses}) |
| 121 : this._features = features; | 118 : this._features = features; |
| 122 | 119 |
| 123 Iterable<Feature> get features => _features.iterable(Feature.values); | 120 Iterable<Feature> get features => _features.iterable(Feature.values); |
| 124 } | 121 } |
| 125 | 122 |
| 126 class ImpactDeserializer { | 123 class ImpactDeserializer { |
| 127 /// Deserializes a [WorldImpact] from [objectDecoder]. | 124 /// Deserializes a [WorldImpact] from [objectDecoder]. |
| 128 static ResolutionImpact deserializeImpact(ObjectDecoder objectDecoder) { | 125 static ResolutionImpact deserializeImpact(ObjectDecoder objectDecoder) { |
| 129 ListDecoder staticUseDecoder = objectDecoder.getList(Key.STATIC_USES); | 126 ListDecoder staticUseDecoder = objectDecoder.getList(Key.STATIC_USES); |
| 130 List<StaticUse> staticUses = <StaticUse>[]; | 127 List<StaticUse> staticUses = <StaticUse>[]; |
| 131 for (int index = 0; index < staticUseDecoder.length; index++) { | 128 for (int index = 0; index < staticUseDecoder.length; index++) { |
| 132 ObjectDecoder object = staticUseDecoder.getObject(index); | 129 ObjectDecoder object = staticUseDecoder.getObject(index); |
| 133 StaticUseKind kind = object.getEnum(Key.KIND, StaticUseKind.values); | 130 StaticUseKind kind = object.getEnum(Key.KIND, StaticUseKind.values); |
| 134 Element element = object.getElement(Key.ELEMENT); | 131 Element element = object.getElement(Key.ELEMENT); |
| 135 staticUses.add(new StaticUse.internal(element, kind)); | 132 staticUses.add(new StaticUse.internal(element, kind)); |
| 136 } | 133 } |
| 137 | 134 |
| 138 ListDecoder dynamicUseDecoder = objectDecoder.getList(Key.DYNAMIC_USES); | 135 ListDecoder dynamicUseDecoder = objectDecoder.getList(Key.DYNAMIC_USES); |
| 139 List<DynamicUse> dynamicUses = <DynamicUse>[]; | 136 List<DynamicUse> dynamicUses = <DynamicUse>[]; |
| 140 for (int index = 0; index < dynamicUseDecoder.length; index++) { | 137 for (int index = 0; index < dynamicUseDecoder.length; index++) { |
| 141 ObjectDecoder object = dynamicUseDecoder.getObject(index); | 138 ObjectDecoder object = dynamicUseDecoder.getObject(index); |
| 142 SelectorKind kind = object.getEnum(Key.KIND, SelectorKind.values); | 139 SelectorKind kind = object.getEnum(Key.KIND, SelectorKind.values); |
| 143 int argumentCount = object.getInt(Key.ARGUMENTS); | 140 int argumentCount = object.getInt(Key.ARGUMENTS); |
| 144 List<String> namedArguments = | 141 List<String> namedArguments = |
| 145 object.getStrings(Key.NAMED_ARGUMENTS, isOptional: true); | 142 object.getStrings(Key.NAMED_ARGUMENTS, isOptional: true); |
| 146 String name = object.getString(Key.NAME); | 143 String name = object.getString(Key.NAME); |
| 147 bool isSetter = object.getBool(Key.IS_SETTER); | 144 bool isSetter = object.getBool(Key.IS_SETTER); |
| 148 LibraryElement library = object.getElement(Key.LIBRARY, isOptional: true); | 145 LibraryElement library = object.getElement(Key.LIBRARY, isOptional: true); |
| 149 dynamicUses.add( | 146 dynamicUses.add(new DynamicUse( |
| 150 new DynamicUse( | 147 new Selector(kind, new Name(name, library, isSetter: isSetter), |
| 151 new Selector( | 148 new CallStructure(argumentCount, namedArguments)), |
| 152 kind, | 149 null)); |
| 153 new Name(name, library, isSetter: isSetter), | |
| 154 new CallStructure(argumentCount, namedArguments)), | |
| 155 null)); | |
| 156 } | 150 } |
| 157 | 151 |
| 158 ListDecoder typeUseDecoder = objectDecoder.getList(Key.TYPE_USES); | 152 ListDecoder typeUseDecoder = objectDecoder.getList(Key.TYPE_USES); |
| 159 List<TypeUse> typeUses = <TypeUse>[]; | 153 List<TypeUse> typeUses = <TypeUse>[]; |
| 160 for (int index = 0; index < typeUseDecoder.length; index++) { | 154 for (int index = 0; index < typeUseDecoder.length; index++) { |
| 161 ObjectDecoder object = typeUseDecoder.getObject(index); | 155 ObjectDecoder object = typeUseDecoder.getObject(index); |
| 162 TypeUseKind kind = object.getEnum(Key.KIND, TypeUseKind.values); | 156 TypeUseKind kind = object.getEnum(Key.KIND, TypeUseKind.values); |
| 163 DartType type = object.getType(Key.TYPE); | 157 DartType type = object.getType(Key.TYPE); |
| 164 typeUses.add(new TypeUse.internal(type, kind)); | 158 typeUses.add(new TypeUse.internal(type, kind)); |
| 165 } | 159 } |
| (...skipping 10 matching lines...) Expand all Loading... |
| 176 ListDecoder listLiteralDecoder = | 170 ListDecoder listLiteralDecoder = |
| 177 objectDecoder.getList(Key.LISTS, isOptional: true); | 171 objectDecoder.getList(Key.LISTS, isOptional: true); |
| 178 List<ListLiteralUse> listLiterals = const <ListLiteralUse>[]; | 172 List<ListLiteralUse> listLiterals = const <ListLiteralUse>[]; |
| 179 if (listLiteralDecoder != null) { | 173 if (listLiteralDecoder != null) { |
| 180 listLiterals = <ListLiteralUse>[]; | 174 listLiterals = <ListLiteralUse>[]; |
| 181 for (int i = 0; i < listLiteralDecoder.length; i++) { | 175 for (int i = 0; i < listLiteralDecoder.length; i++) { |
| 182 ObjectDecoder useDecoder = listLiteralDecoder.getObject(i); | 176 ObjectDecoder useDecoder = listLiteralDecoder.getObject(i); |
| 183 DartType type = useDecoder.getType(Key.TYPE); | 177 DartType type = useDecoder.getType(Key.TYPE); |
| 184 bool isConstant = useDecoder.getBool(Key.IS_CONST); | 178 bool isConstant = useDecoder.getBool(Key.IS_CONST); |
| 185 bool isEmpty = useDecoder.getBool(Key.IS_EMPTY); | 179 bool isEmpty = useDecoder.getBool(Key.IS_EMPTY); |
| 186 listLiterals.add(new ListLiteralUse( | 180 listLiterals.add( |
| 187 type, isConstant: isConstant, isEmpty: isEmpty)); | 181 new ListLiteralUse(type, isConstant: isConstant, isEmpty: isEmpty)); |
| 188 } | 182 } |
| 189 } | 183 } |
| 190 | 184 |
| 191 ListDecoder mapLiteralDecoder = | 185 ListDecoder mapLiteralDecoder = |
| 192 objectDecoder.getList(Key.MAPS, isOptional: true); | 186 objectDecoder.getList(Key.MAPS, isOptional: true); |
| 193 List<MapLiteralUse> mapLiterals = const <MapLiteralUse>[]; | 187 List<MapLiteralUse> mapLiterals = const <MapLiteralUse>[]; |
| 194 if (mapLiteralDecoder != null) { | 188 if (mapLiteralDecoder != null) { |
| 195 mapLiterals = <MapLiteralUse>[]; | 189 mapLiterals = <MapLiteralUse>[]; |
| 196 for (int i = 0; i < mapLiteralDecoder.length; i++) { | 190 for (int i = 0; i < mapLiteralDecoder.length; i++) { |
| 197 ObjectDecoder useDecoder = mapLiteralDecoder.getObject(i); | 191 ObjectDecoder useDecoder = mapLiteralDecoder.getObject(i); |
| 198 DartType type = useDecoder.getType(Key.TYPE); | 192 DartType type = useDecoder.getType(Key.TYPE); |
| 199 bool isConstant = useDecoder.getBool(Key.IS_CONST); | 193 bool isConstant = useDecoder.getBool(Key.IS_CONST); |
| 200 bool isEmpty = useDecoder.getBool(Key.IS_EMPTY); | 194 bool isEmpty = useDecoder.getBool(Key.IS_EMPTY); |
| 201 mapLiterals.add(new MapLiteralUse( | 195 mapLiterals.add( |
| 202 type, isConstant: isConstant, isEmpty: isEmpty)); | 196 new MapLiteralUse(type, isConstant: isConstant, isEmpty: isEmpty)); |
| 203 } | 197 } |
| 204 } | 198 } |
| 205 | 199 |
| 206 return new DeserializedResolutionImpact( | 200 return new DeserializedResolutionImpact( |
| 207 constSymbolNames: constSymbolNames, | 201 constSymbolNames: constSymbolNames, |
| 208 constantLiterals: constantLiterals, | 202 constantLiterals: constantLiterals, |
| 209 dynamicUses: dynamicUses, | 203 dynamicUses: dynamicUses, |
| 210 features: features, | 204 features: features, |
| 211 listLiterals: listLiterals, | 205 listLiterals: listLiterals, |
| 212 mapLiterals: mapLiterals, | 206 mapLiterals: mapLiterals, |
| 213 staticUses: staticUses, | 207 staticUses: staticUses, |
| 214 typeUses: typeUses); | 208 typeUses: typeUses); |
| 215 } | 209 } |
| 216 } | 210 } |
| OLD | NEW |