[Kernel] Add serializers for public names
This will enable serialization of expressions blocked on names.
Supporting private names requires a map from from serialized library
ID to library. More generally, we need to support something like the
dill file's canonical names.
Change-Id: I7d470e6a49b167f7755d130ea6c3e543e188da65
Reviewed-on: https://dart-review.googlesource.com/c/88703
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
Reviewed-by: Daniel Hillerström <hillerstrom@google.com>
Commit-Queue: Kevin Millikin <kmillikin@google.com>
diff --git a/pkg/kernel/lib/text/text_serializer.dart b/pkg/kernel/lib/text/text_serializer.dart
index 0f55b44a..2848583 100644
--- a/pkg/kernel/lib/text/text_serializer.dart
+++ b/pkg/kernel/lib/text/text_serializer.dart
@@ -14,6 +14,40 @@
String tag(T node);
}
+class NameTagger implements Tagger<Name> {
+ const NameTagger();
+
+ String tag(Name name) => name.isPrivate ? "private" : "public";
+}
+
+TextSerializer<Name> publicName =
+ new Wrapped(unwrapPublicName, wrapPublicName, const DartString());
+
+String unwrapPublicName(Name name) => name.name;
+
+Name wrapPublicName(String name) => new Name(name);
+
+TextSerializer<Name> privateName = new Wrapped(unwrapPrivateName,
+ wrapPrivateName, Tuple2Serializer(const DartString(), const DartString()));
+
+Tuple2<String, String> unwrapPrivateName(Name name) {
+ return new Tuple2(name.library.importUri.toString(), name.name);
+}
+
+Name wrapPrivateName(Tuple2<String, String> tuple) {
+ // We need a map from import URI to libraries. More generally, we will need
+ // a way to map any 'named' node to the node's reference.
+ throw UnimplementedError('deserialization of private names');
+}
+
+TextSerializer<Name> nameSerializer = new Case(const NameTagger(), [
+ "public",
+ "private",
+], [
+ publicName,
+ privateName
+]);
+
class ExpressionTagger extends ExpressionVisitor<String>
implements Tagger<Expression> {
const ExpressionTagger();