Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(35)

Unified Diff: pkg/compiler/lib/src/serialization/element_serialization.dart

Issue 1802883002: Use JS backend in serialization_analysis_test (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Serialize ClassElement.isUnnamedMixinApplication and test added properties. Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « pkg/compiler/lib/src/native/enqueue.dart ('k') | pkg/compiler/lib/src/serialization/keys.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 173dd1e9d2f9f8461465b4ba94f0a203a8e0b056..98ba42aacee435b634a791ee2e815e65ea8f16a5 100644
--- a/pkg/compiler/lib/src/serialization/element_serialization.dart
+++ b/pkg/compiler/lib/src/serialization/element_serialization.dart
@@ -19,6 +19,7 @@ enum SerializedElementKind {
LIBRARY,
COMPILATION_UNIT,
CLASS,
+ ENUM,
GENERATIVE_CONSTRUCTOR,
FACTORY_CONSTRUCTOR,
TOPLEVEL_FIELD,
@@ -116,24 +117,25 @@ class SerializerUtil {
}
/// Returns a function that adds the underlying declared elements for a
- /// particular element into [list].
+ /// particular element into [set].
///
/// For instance, for an [AbstractFieldElement] the getter and setter elements
/// are added, if available.
- static flattenElements(List<Element> list) {
+ static flattenElements(Set<Element> set) {
return (Element element) {
+ if (element.isPatch) return;
// TODO(johnniwinther): Handle ambiguous elements.
if (element.isAmbiguous) return;
if (element.isAbstractField) {
AbstractFieldElement abstractField = element;
if (abstractField.getter != null) {
- list.add(abstractField.getter);
+ set.add(abstractField.getter);
}
if (abstractField.setter != null) {
- list.add(abstractField.setter);
+ set.add(abstractField.setter);
}
} else {
- list.add(element);
+ set.add(element);
}
};
}
@@ -149,6 +151,43 @@ class LibrarySerializer implements ElementSerializer {
return null;
}
+ static List<CompilationUnitElement> getCompilationUnits(
+ LibraryElement element) {
+ List<CompilationUnitElement> compilationUnits = <CompilationUnitElement>[];
+ compilationUnits.addAll(element.compilationUnits.toList());
+ if (element.isPatched) {
+ compilationUnits.addAll(element.implementation.compilationUnits.toList());
+ }
+ return compilationUnits;
+ }
+
+ static List<ImportElement> getImports(LibraryElement element) {
+ List<ImportElement> imports = <ImportElement>[];
+ imports.addAll(element.imports);
+ if (element.isPatched) {
+ imports.addAll(element.implementation.imports);
+ }
+ return imports;
+ }
+
+ static List<Element> getImportedElements(
+ LibraryElement element) {
+ Set<Element> importedElements = new Set<Element>();
+ element.forEachImport(SerializerUtil.flattenElements(importedElements));
+ if (element.isPatched) {
+ element.implementation.forEachImport(
+ SerializerUtil.flattenElements(importedElements));
+ }
+ return importedElements.toList();
+ }
+
+ static List<Element> getExportedElements(
+ LibraryElement element) {
+ Set<Element> exportedElements = new Set<Element>();
+ element.forEachExport(SerializerUtil.flattenElements(exportedElements));
+ return exportedElements.toList();
+ }
+
void serialize(LibraryElement element,
ObjectEncoder encoder,
SerializedElementKind kind) {
@@ -157,18 +196,13 @@ class LibrarySerializer implements ElementSerializer {
encoder.setString(Key.LIBRARY_NAME, element.libraryName);
SerializerUtil.serializeMembers(element, encoder);
encoder.setElement(Key.COMPILATION_UNIT, element.entryCompilationUnit);
- encoder.setElements(
- Key.COMPILATION_UNITS, element.compilationUnits.toList());
- encoder.setElements(Key.IMPORTS, element.imports);
+ encoder.setElements(Key.COMPILATION_UNITS, getCompilationUnits(element));
+ encoder.setElements(Key.IMPORTS, getImports(element));
encoder.setElements(Key.EXPORTS, element.exports);
- List<Element> importedElements = <Element>[];
- element.forEachImport(SerializerUtil.flattenElements(importedElements));
- encoder.setElements(Key.IMPORT_SCOPE, importedElements);
+ encoder.setElements(Key.IMPORT_SCOPE, getImportedElements(element));
- List<Element> exportedElements = <Element>[];
- element.forEachExport(SerializerUtil.flattenElements(exportedElements));
- encoder.setElements(Key.EXPORT_SCOPE, exportedElements);
+ encoder.setElements(Key.EXPORT_SCOPE, getExportedElements(element));
}
}
@@ -190,7 +224,11 @@ class CompilationUnitSerializer implements ElementSerializer {
encoder.setUri(
Key.URI, element.library.canonicalUri, element.script.resourceUri);
List<Element> elements = <Element>[];
- element.forEachLocalMember((e) => elements.add(e));
+ element.forEachLocalMember((e) {
+ if (!element.isPatch) {
+ elements.add(e);
+ }
+ });
encoder.setElements(Key.ELEMENTS, elements);
}
}
@@ -200,6 +238,10 @@ class ClassSerializer implements ElementSerializer {
SerializedElementKind getSerializedKind(Element element) {
if (element.isClass) {
+ ClassElement cls = element;
+ if (cls.isEnumClass) {
+ return SerializedElementKind.ENUM;
+ }
return SerializedElementKind.CLASS;
}
return null;
@@ -214,6 +256,9 @@ class ClassSerializer implements ElementSerializer {
SerializerUtil.serializePosition(element, encoder);
encoder.setTypes(Key.TYPE_VARIABLES, element.typeVariables);
encoder.setBool(Key.IS_ABSTRACT, element.isAbstract);
+ if (element.isUnnamedMixinApplication) {
+ encoder.setBool(Key.IS_UNNAMED_MIXIN_APPLICATION, true);
+ }
if (element.supertype != null) {
encoder.setType(Key.SUPERTYPE, element.supertype);
}
@@ -226,6 +271,10 @@ class ClassSerializer implements ElementSerializer {
supertypes.setInts(Key.OFFSETS, element.allSupertypesAndSelf.levelOffsets);
encoder.setTypes(Key.INTERFACES, element.interfaces.toList());
SerializerUtil.serializeMembers(element, encoder);
+ if (kind == SerializedElementKind.ENUM) {
+ EnumClassElement enumClass = element;
+ encoder.setElements(Key.FIELDS, enumClass.enumValues);
+ }
}
}
@@ -340,6 +389,7 @@ class FunctionSerializer implements ElementSerializer {
encoder.setElement(Key.LIBRARY, element.library);
encoder.setElement(Key.COMPILATION_UNIT, element.compilationUnit);
}
+ encoder.setBool(Key.IS_EXTERNAL, element.isExternal);
}
}
@@ -508,6 +558,8 @@ class ElementDeserializer {
return new CompilationUnitElementZ(decoder);
case SerializedElementKind.CLASS:
return new ClassElementZ(decoder);
+ case SerializedElementKind.ENUM:
+ return new EnumClassElementZ(decoder);
case SerializedElementKind.TOPLEVEL_FIELD:
return new TopLevelFieldElementZ(decoder);
case SerializedElementKind.STATIC_FIELD:
« no previous file with comments | « pkg/compiler/lib/src/native/enqueue.dart ('k') | pkg/compiler/lib/src/serialization/keys.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698