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

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

Issue 1809533004: Support serialization of WorldImpact (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: 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
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 ce297225db7ffda9bbd8d138868891a4c96543a6..3576da23b313a678a2c14932763de39eb395b9f5 100644
--- a/pkg/compiler/lib/src/serialization/element_serialization.dart
+++ b/pkg/compiler/lib/src/serialization/element_serialization.dart
@@ -34,6 +34,7 @@ enum SerializedElementKind {
INSTANCE_FUNCTION,
INSTANCE_GETTER,
INSTANCE_SETTER,
+ LOCAL_FUNCTION,
TYPEDEF,
TYPEVARIABLE,
PARAMETER,
@@ -80,16 +81,16 @@ abstract class ElementSerializer {
class SerializerUtil {
/// Serialize the declared members of [element] into [encoder].
- static void serializeMembers(ScopeContainerElement element,
+ static void serializeMembers(Iterable<Element> members,
ObjectEncoder encoder) {
MapEncoder mapEncoder = encoder.createMap(Key.MEMBERS);
- element.forEachLocalMember((Element member) {
+ for (Element member in members) {
String name = member.name;
if (member.isSetter) {
name = '$name,=';
}
mapEncoder.setElement(name, member);
- });
+ }
}
/// Serialize the source position of [element] into [encoder].
@@ -151,6 +152,16 @@ class LibrarySerializer implements ElementSerializer {
return null;
}
+ static List<Element> getMembers(LibraryElement element) {
+ List<Element> members = <Element>[];
+ element.implementation.forEachLocalMember((Element member) {
+ if (!member.isPatch) {
+ members.add(member);
+ }
+ });
+ return members;
+ }
+
static List<CompilationUnitElement> getCompilationUnits(
LibraryElement element) {
List<CompilationUnitElement> compilationUnits = <CompilationUnitElement>[];
@@ -194,7 +205,7 @@ class LibrarySerializer implements ElementSerializer {
encoder.setUri(
Key.CANONICAL_URI, element.canonicalUri, element.canonicalUri);
encoder.setString(Key.LIBRARY_NAME, element.libraryName);
- SerializerUtil.serializeMembers(element, encoder);
+ SerializerUtil.serializeMembers(getMembers(element), encoder);
encoder.setElement(Key.COMPILATION_UNIT, element.entryCompilationUnit);
encoder.setElements(Key.COMPILATION_UNITS, getCompilationUnits(element));
encoder.setElements(Key.IMPORTS, getImports(element));
@@ -247,6 +258,19 @@ class ClassSerializer implements ElementSerializer {
return null;
}
+ static List<Element> getMembers(ClassElement element) {
+ List<Element> members = <Element>[];
+ element.forEachLocalMember(members.add);
+ if (element.isPatched) {
+ element.implementation.forEachLocalMember((Element member) {
+ if (!member.isPatch) {
+ members.add(member);
+ }
+ });
+ }
+ return members;
+ }
+
void serialize(ClassElement element,
ObjectEncoder encoder,
SerializedElementKind kind) {
@@ -267,11 +291,13 @@ class ClassSerializer implements ElementSerializer {
element.allSupertypesAndSelf.supertypes.toList());
supertypes.setInts(Key.OFFSETS, element.allSupertypesAndSelf.levelOffsets);
encoder.setTypes(Key.INTERFACES, element.interfaces.toList());
- SerializerUtil.serializeMembers(element, encoder);
+ SerializerUtil.serializeMembers(getMembers(element), encoder);
+ encoder.setBool(Key.IS_PROXY, element.isProxy);
if (kind == SerializedElementKind.ENUM) {
EnumClassElement enumClass = element;
encoder.setElements(Key.FIELDS, enumClass.enumValues);
}
+
}
}
@@ -352,6 +378,9 @@ class FunctionSerializer implements ElementSerializer {
if (element.isInstanceMember) {
return SerializedElementKind.INSTANCE_FUNCTION;
}
+ if (element.isLocal) {
+ return SerializedElementKind.LOCAL_FUNCTION;
+ }
}
if (element.isGetter) {
if (element.isTopLevel) return SerializedElementKind.TOPLEVEL_GETTER;
@@ -387,6 +416,11 @@ class FunctionSerializer implements ElementSerializer {
encoder.setElement(Key.COMPILATION_UNIT, element.compilationUnit);
}
encoder.setBool(Key.IS_EXTERNAL, element.isExternal);
+ if (element.isLocal) {
+ LocalFunctionElement localFunction = element;
+ encoder.setElement(
+ Key.EXECUTABLE_CONTEXT, localFunction.executableContext);
+ }
}
}
@@ -573,6 +607,8 @@ class ElementDeserializer {
return new StaticFunctionElementZ(decoder);
case SerializedElementKind.INSTANCE_FUNCTION:
return new InstanceFunctionElementZ(decoder);
+ case SerializedElementKind.LOCAL_FUNCTION:
+ return new LocalFunctionElementZ(decoder);
case SerializedElementKind.TOPLEVEL_GETTER:
return new TopLevelGetterElementZ(decoder);
case SerializedElementKind.STATIC_GETTER:

Powered by Google App Engine
This is Rietveld 408576698