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: |