| Index: pkg/compiler/lib/src/serialization/element_serialization.dart
|
| diff --git a/pkg/compiler/lib/src/serialization/element_serialization.dart b/pkg/compiler/lib/src/serialization/element_serialization.dart
|
| index 7069b51ff565b21f1e0846630d7f7686978132ce..a0ec36e518453a615fdcb9698d059acb3a72100d 100644
|
| --- a/pkg/compiler/lib/src/serialization/element_serialization.dart
|
| +++ b/pkg/compiler/lib/src/serialization/element_serialization.dart
|
| @@ -5,12 +5,14 @@
|
| library dart2js.serialization.elements;
|
|
|
| import '../common.dart';
|
| +import '../common/names.dart';
|
| import '../constants/constructors.dart';
|
| import '../constants/expressions.dart';
|
| import '../dart_types.dart';
|
| import '../diagnostics/messages.dart';
|
| import '../elements/elements.dart';
|
| -import '../elements/modelx.dart' show ErroneousElementX;
|
| +import '../elements/modelx.dart'
|
| + show DeferredLoaderGetterElementX, ErroneousElementX;
|
| import 'constant_serialization.dart';
|
| import 'keys.dart';
|
| import 'modelz.dart';
|
| @@ -51,6 +53,7 @@ enum SerializedElementKind {
|
| IMPORT,
|
| EXPORT,
|
| PREFIX,
|
| + DEFERRED_LOAD_LIBRARY,
|
| LOCAL_VARIABLE,
|
| EXTERNAL_LIBRARY,
|
| EXTERNAL_LIBRARY_MEMBER,
|
| @@ -69,6 +72,8 @@ const List<ElementSerializer> ELEMENT_SERIALIZERS = const [
|
| const ErrorSerializer(),
|
| const LibrarySerializer(),
|
| const CompilationUnitSerializer(),
|
| + const PrefixSerializer(),
|
| + const DeferredLoadLibrarySerializer(),
|
| const ClassSerializer(),
|
| const ConstructorSerializer(),
|
| const FieldSerializer(),
|
| @@ -78,7 +83,6 @@ const List<ElementSerializer> ELEMENT_SERIALIZERS = const [
|
| const ParameterSerializer(),
|
| const ImportSerializer(),
|
| const ExportSerializer(),
|
| - const PrefixSerializer(),
|
| const LocalVariableSerializer(),
|
| ];
|
|
|
| @@ -500,6 +504,9 @@ class FunctionSerializer implements ElementSerializer {
|
| const FunctionSerializer();
|
|
|
| SerializedElementKind getSerializedKind(Element element) {
|
| + if (element.isDeferredLoaderGetter) {
|
| + return null;
|
| + }
|
| if (element.isFunction) {
|
| if (element.isTopLevel) return SerializedElementKind.TOPLEVEL_FUNCTION;
|
| if (element.isStatic) return SerializedElementKind.STATIC_FUNCTION;
|
| @@ -713,10 +720,27 @@ class PrefixSerializer implements ElementSerializer {
|
| encoder.setString(Key.NAME, element.name);
|
| encoder.setElement(Key.LIBRARY, element.library);
|
| encoder.setElement(Key.COMPILATION_UNIT, element.compilationUnit);
|
| - if (element.deferredImport != null) {
|
| + encoder.setBool(Key.IS_DEFERRED, element.isDeferred);
|
| + if (element.isDeferred) {
|
| encoder.setElement(Key.IMPORT, element.deferredImport);
|
| + encoder.setElement(Key.GETTER, element.loadLibrary);
|
| }
|
| - encoder.setBool(Key.IS_DEFERRED, element.isDeferred);
|
| + }
|
| +}
|
| +
|
| +class DeferredLoadLibrarySerializer implements ElementSerializer {
|
| + const DeferredLoadLibrarySerializer();
|
| +
|
| + SerializedElementKind getSerializedKind(Element element) {
|
| + if (element.isDeferredLoaderGetter) {
|
| + return SerializedElementKind.DEFERRED_LOAD_LIBRARY;
|
| + }
|
| + return null;
|
| + }
|
| +
|
| + void serialize(GetterElement element, ObjectEncoder encoder,
|
| + SerializedElementKind kind) {
|
| + encoder.setElement(Key.PREFIX, element.enclosingElement);
|
| }
|
| }
|
|
|
| @@ -809,6 +833,8 @@ class ElementDeserializer {
|
| return new ExportElementZ(decoder);
|
| case SerializedElementKind.PREFIX:
|
| return new PrefixElementZ(decoder);
|
| + case SerializedElementKind.DEFERRED_LOAD_LIBRARY:
|
| + return new DeferredLoaderGetterElementX(decoder.getElement(Key.PREFIX));
|
| case SerializedElementKind.LOCAL_VARIABLE:
|
| return new LocalVariableElementZ(decoder);
|
| case SerializedElementKind.EXTERNAL_LIBRARY:
|
|
|