Chromium Code Reviews| 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 /// Implementation of the element model used for deserialiation. | 5 /// Implementation of the element model used for deserialiation. |
| 6 /// | 6 /// |
| 7 /// These classes are created by [ElementDeserializer] triggered by the | 7 /// These classes are created by [ElementDeserializer] triggered by the |
| 8 /// [Deserializer]. | 8 /// [Deserializer]. |
| 9 | 9 |
| 10 library dart2js.serialization.modelz; | 10 library dart2js.serialization.modelz; |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 23 import '../resolution/class_members.dart' as class_members; | 23 import '../resolution/class_members.dart' as class_members; |
| 24 import '../resolution/scope.dart' show Scope; | 24 import '../resolution/scope.dart' show Scope; |
| 25 import '../resolution/tree_elements.dart' show TreeElements; | 25 import '../resolution/tree_elements.dart' show TreeElements; |
| 26 import '../script.dart'; | 26 import '../script.dart'; |
| 27 import '../serialization/constant_serialization.dart'; | 27 import '../serialization/constant_serialization.dart'; |
| 28 import '../tokens/token.dart' show Token; | 28 import '../tokens/token.dart' show Token; |
| 29 import '../tree/tree.dart'; | 29 import '../tree/tree.dart'; |
| 30 import '../util/util.dart' show Link, LinkBuilder; | 30 import '../util/util.dart' show Link, LinkBuilder; |
| 31 import 'keys.dart'; | 31 import 'keys.dart'; |
| 32 import 'serialization.dart'; | 32 import 'serialization.dart'; |
| 33 import 'serialization_util.dart'; | |
| 33 | 34 |
| 34 /// Compute a [Link] from an [Iterable]. | 35 /// Compute a [Link] from an [Iterable]. |
| 35 Link toLink(Iterable iterable) { | 36 Link toLink(Iterable iterable) { |
| 36 LinkBuilder builder = new LinkBuilder(); | 37 LinkBuilder builder = new LinkBuilder(); |
| 37 for (var element in iterable) { | 38 for (var element in iterable) { |
| 38 builder.addLast(element); | 39 builder.addLast(element); |
| 39 } | 40 } |
| 40 return builder.toLink(); | 41 return builder.toLink(); |
| 41 } | 42 } |
| 42 | 43 |
| (...skipping 1015 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1058 with | 1059 with |
| 1059 AnalyzableElementMixin, | 1060 AnalyzableElementMixin, |
| 1060 AstElementMixin, | 1061 AstElementMixin, |
| 1061 ClassMemberMixin, | 1062 ClassMemberMixin, |
| 1062 FunctionTypedElementMixin, | 1063 FunctionTypedElementMixin, |
| 1063 ParametersMixin, | 1064 ParametersMixin, |
| 1064 TypedElementMixin, | 1065 TypedElementMixin, |
| 1065 MemberElementMixin | 1066 MemberElementMixin |
| 1066 implements ConstructorElement { | 1067 implements ConstructorElement { |
| 1067 ConstantConstructor _constantConstructor; | 1068 ConstantConstructor _constantConstructor; |
| 1069 ConstructorElement _effectiveTarget; | |
| 1068 | 1070 |
| 1069 ConstructorElementZ(ObjectDecoder decoder) : super(decoder); | 1071 ConstructorElementZ(ObjectDecoder decoder) : super(decoder); |
| 1070 | 1072 |
| 1071 accept(ElementVisitor visitor, arg) { | 1073 accept(ElementVisitor visitor, arg) { |
| 1072 return visitor.visitConstructorElement(this, arg); | 1074 return visitor.visitConstructorElement(this, arg); |
| 1073 } | 1075 } |
| 1074 | 1076 |
| 1075 @override | 1077 @override |
| 1076 bool get isConst => _decoder.getBool(Key.IS_CONST); | 1078 bool get isConst => _decoder.getBool(Key.IS_CONST); |
| 1077 | 1079 |
| (...skipping 18 matching lines...) Expand all Loading... | |
| 1096 } | 1098 } |
| 1097 _constantConstructor = ConstantConstructorDeserializer.deserialize(data); | 1099 _constantConstructor = ConstantConstructorDeserializer.deserialize(data); |
| 1098 } | 1100 } |
| 1099 return _constantConstructor; | 1101 return _constantConstructor; |
| 1100 } | 1102 } |
| 1101 | 1103 |
| 1102 @override | 1104 @override |
| 1103 AsyncMarker get asyncMarker => AsyncMarker.SYNC; | 1105 AsyncMarker get asyncMarker => AsyncMarker.SYNC; |
| 1104 | 1106 |
| 1105 @override | 1107 @override |
| 1106 InterfaceType computeEffectiveTargetType(InterfaceType newType) { | |
| 1107 return _unsupported('computeEffectiveTargetType'); | |
| 1108 } | |
| 1109 | |
| 1110 @override | |
| 1111 ConstructorElement get definingConstructor { | 1108 ConstructorElement get definingConstructor { |
| 1112 return _unsupported('definingConstructor'); | 1109 String name = |
| 1110 _decoder.getString(Key.DEFINING_CONSTRUCTOR, isOptional: true); | |
| 1111 if (name != null) { | |
| 1112 return enclosingClass.superclass.lookupConstructor(name); | |
| 1113 } | |
| 1114 return null; | |
| 1113 } | 1115 } |
| 1114 | 1116 |
| 1115 @override | 1117 @override |
| 1116 ConstructorElement get effectiveTarget { | 1118 ConstructorElement get effectiveTarget { |
| 1117 return _unsupported('effectiveTarget'); | 1119 if (_effectiveTarget == null) { |
| 1120 _effectiveTarget = | |
| 1121 _decoder.getElement(Key.EFFECTIVE_TARGET, isOptional: true); | |
| 1122 if (_effectiveTarget == null) { | |
| 1123 _effectiveTarget = this; | |
| 1124 } | |
| 1125 } | |
| 1126 return _effectiveTarget; | |
| 1118 } | 1127 } |
| 1119 | 1128 |
| 1120 @override | 1129 @override |
| 1121 ConstructorElement get immediateRedirectionTarget { | 1130 ConstructorElement get immediateRedirectionTarget => null; |
| 1122 return _unsupported('immediateRedirectionTarget'); | |
| 1123 } | |
| 1124 | 1131 |
| 1125 @override | 1132 @override |
| 1126 bool get isEffectiveTargetMalformed { | 1133 bool get isEffectiveTargetMalformed { |
| 1127 return _unsupported('isEffectiveTargetMalformed'); | 1134 return _unsupported('isEffectiveTargetMalformed'); |
| 1128 } | 1135 } |
| 1129 | 1136 |
| 1130 @override | 1137 @override |
| 1131 bool get isRedirectingFactory => _unsupported('isRedirectingFactory'); | |
| 1132 | |
| 1133 @override | |
| 1134 bool get isRedirectingGenerative => _unsupported('isRedirectingGenerative'); | |
| 1135 | |
| 1136 @override | |
| 1137 bool get isCyclicRedirection => _unsupported('isCyclicRedirection'); | 1138 bool get isCyclicRedirection => _unsupported('isCyclicRedirection'); |
| 1138 | 1139 |
| 1139 @override | 1140 @override |
| 1140 PrefixElement get redirectionDeferredPrefix { | 1141 bool get isRedirectingFactory => false; |
| 1141 return _unsupported('redirectionDeferredPrefix'); | 1142 |
| 1142 } | 1143 @override |
| 1144 bool get isRedirectingGenerative => false; | |
| 1145 | |
| 1146 @override | |
| 1147 PrefixElement get redirectionDeferredPrefix => null; | |
| 1148 | |
| 1149 @override | |
| 1150 InterfaceType computeEffectiveTargetType(InterfaceType newType) => newType; | |
| 1143 } | 1151 } |
| 1144 | 1152 |
| 1145 class GenerativeConstructorElementZ extends ConstructorElementZ { | 1153 class GenerativeConstructorElementZ extends ConstructorElementZ { |
| 1146 GenerativeConstructorElementZ(ObjectDecoder decoder) : super(decoder); | 1154 GenerativeConstructorElementZ(ObjectDecoder decoder) : super(decoder); |
| 1147 | 1155 |
| 1148 @override | 1156 @override |
| 1149 ElementKind get kind => ElementKind.GENERATIVE_CONSTRUCTOR; | 1157 ElementKind get kind => ElementKind.GENERATIVE_CONSTRUCTOR; |
| 1150 | 1158 |
| 1151 @override | 1159 @override |
| 1152 bool get isEffectiveTargetMalformed => | 1160 bool get isRedirectingGenerative => _decoder.getBool(Key.IS_REDIRECTING); |
| 1153 _unsupported('isEffectiveTargetMalformed'); | |
| 1154 } | 1161 } |
| 1155 | 1162 |
| 1156 class FactoryConstructorElementZ extends ConstructorElementZ { | 1163 class FactoryConstructorElementZ extends ConstructorElementZ { |
| 1157 FactoryConstructorElementZ(ObjectDecoder decoder) : super(decoder); | 1164 FactoryConstructorElementZ(ObjectDecoder decoder) : super(decoder); |
| 1158 | 1165 |
| 1159 @override | 1166 @override |
| 1160 ElementKind get kind => ElementKind.FACTORY_CONSTRUCTOR; | 1167 ElementKind get kind => ElementKind.FACTORY_CONSTRUCTOR; |
| 1168 } | |
| 1169 | |
| 1170 class RedirectingFactoryConstructorElementZ extends ConstructorElementZ { | |
| 1171 InterfaceType _effectiveTargetType; | |
| 1172 ConstructorElement _immediateRedirectionTarget; | |
| 1173 PrefixElement _redirectionDeferredPrefix; | |
| 1174 | |
| 1175 RedirectingFactoryConstructorElementZ(ObjectDecoder decoder) : super(decoder); | |
| 1176 | |
| 1177 @override | |
| 1178 ElementKind get kind => ElementKind.FACTORY_CONSTRUCTOR; | |
| 1161 | 1179 |
| 1162 @override | 1180 @override |
| 1163 bool get isEffectiveTargetMalformed => | 1181 bool get isRedirectingFactory => true; |
| 1164 _unsupported('isEffectiveTargetMalformed'); | 1182 |
| 1183 void _ensureEffectiveTarget() { | |
| 1184 if (_effectiveTarget == null) { | |
| 1185 _effectiveTarget = | |
| 1186 _decoder.getElement(Key.EFFECTIVE_TARGET, isOptional: true); | |
| 1187 if (_effectiveTarget == null) { | |
| 1188 _effectiveTarget = this; | |
| 1189 _effectiveTargetType = enclosingClass.thisType; | |
| 1190 } else { | |
| 1191 _effectiveTargetType = _decoder.getType(Key.EFFECTIVE_TARGET_TYPE); | |
| 1192 } | |
| 1193 } | |
| 1194 } | |
| 1195 | |
| 1196 @override | |
| 1197 ConstructorElement get effectiveTarget { | |
| 1198 _ensureEffectiveTarget(); | |
| 1199 return _effectiveTarget; | |
| 1200 } | |
| 1201 | |
| 1202 @override | |
| 1203 InterfaceType computeEffectiveTargetType(InterfaceType newType) { | |
| 1204 _ensureEffectiveTarget(); | |
| 1205 return _effectiveTargetType.substByContext(newType); | |
| 1206 } | |
| 1207 | |
| 1208 void _ensureRedirection() { | |
| 1209 if (_immediateRedirectionTarget == null) { | |
| 1210 _immediateRedirectionTarget = | |
| 1211 _decoder.getElement(Key.IMMEDIATE_REDIRECTION_TARGET); | |
| 1212 _redirectionDeferredPrefix = | |
| 1213 _decoder.getElement(Key.PREFIX, isOptional: true); | |
| 1214 } | |
| 1215 } | |
| 1216 | |
| 1217 @override | |
| 1218 ConstructorElement get immediateRedirectionTarget { | |
|
Siggi Cherem (dart-lang)
2016/04/29 20:20:23
optional suggestion, probably not worth it.
I'd e
Johnni Winther
2016/04/30 09:04:46
I think it's only really worthwhile to deserialize
Siggi Cherem (dart-lang)
2016/05/02 16:58:35
Yeah, I look forward to the new format. At that po
| |
| 1219 _ensureRedirection(); | |
| 1220 return _immediateRedirectionTarget; | |
| 1221 } | |
| 1222 | |
| 1223 @override | |
| 1224 PrefixElement get redirectionDeferredPrefix { | |
| 1225 _ensureRedirection(); | |
| 1226 return _redirectionDeferredPrefix; | |
| 1227 } | |
| 1165 } | 1228 } |
| 1166 | 1229 |
| 1167 class ForwardingConstructorElementZ extends ElementZ | 1230 class ForwardingConstructorElementZ extends ElementZ |
| 1168 with AnalyzableElementMixin, AstElementMixin | 1231 with AnalyzableElementMixin, AstElementMixin |
| 1169 implements ConstructorElement { | 1232 implements ConstructorElement { |
| 1170 final MixinApplicationElement enclosingClass; | 1233 final MixinApplicationElement enclosingClass; |
| 1171 final ConstructorElement definingConstructor; | 1234 final ConstructorElement definingConstructor; |
| 1172 | 1235 |
| 1173 ForwardingConstructorElementZ(this.enclosingClass, this.definingConstructor); | 1236 ForwardingConstructorElementZ(this.enclosingClass, this.definingConstructor); |
| 1174 | 1237 |
| (...skipping 845 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2020 } | 2083 } |
| 2021 | 2084 |
| 2022 @override | 2085 @override |
| 2023 ElementKind get kind => ElementKind.PREFIX; | 2086 ElementKind get kind => ElementKind.PREFIX; |
| 2024 | 2087 |
| 2025 @override | 2088 @override |
| 2026 Element lookupLocalMember(String memberName) { | 2089 Element lookupLocalMember(String memberName) { |
| 2027 return _unsupported('lookupLocalMember'); | 2090 return _unsupported('lookupLocalMember'); |
| 2028 } | 2091 } |
| 2029 } | 2092 } |
| OLD | NEW |