@@ -112,6 +112,15 @@ class ExpressionTagger extends ExpressionVisitor<String>
112112 }
113113
114114 String visitFunctionExpression (FunctionExpression _) => "fun" ;
115+ String visitListConcatenation (ListConcatenation _) => "lists" ;
116+ String visitSetConcatenation (SetConcatenation _) => "sets" ;
117+ String visitMapConcatenation (MapConcatenation _) => "maps" ;
118+ String visitBlockExpression (BlockExpression _) => "let-block" ;
119+ String visitInstantiation (Instantiation _) => "apply" ;
120+ String visitNullCheck (NullCheck _) => "not-null" ;
121+ String visitFileUriExpression (FileUriExpression _) => "with-uri" ;
122+ String visitCheckLibraryIsLoaded (CheckLibraryIsLoaded _) => "is-loaded" ;
123+ String visitLoadLibrary (LoadLibrary _) => "load" ;
115124}
116125
117126const TextSerializer <InvalidExpression > invalidExpressionSerializer =
@@ -689,6 +698,48 @@ FunctionExpression wrapFunctionExpression(FunctionNode node) {
689698 return new FunctionExpression (node);
690699}
691700
701+ TextSerializer <ListConcatenation > listConcatenationSerializer = Wrapped (
702+ (lc) => Tuple2 (lc.typeArgument, lc.lists),
703+ (t) => ListConcatenation (t.second, typeArgument: t.first),
704+ Tuple2Serializer (dartTypeSerializer, ListSerializer (expressionSerializer)));
705+
706+ TextSerializer <SetConcatenation > setConcatenationSerializer = Wrapped (
707+ (sc) => Tuple2 (sc.typeArgument, sc.sets),
708+ (t) => SetConcatenation (t.second, typeArgument: t.first),
709+ Tuple2Serializer (dartTypeSerializer, ListSerializer (expressionSerializer)));
710+
711+ TextSerializer <MapConcatenation > mapConcatenationSerializer = Wrapped (
712+ (mc) => Tuple3 (mc.keyType, mc.valueType, mc.maps),
713+ (t) => MapConcatenation (t.third, keyType: t.first, valueType: t.second),
714+ Tuple3Serializer (dartTypeSerializer, dartTypeSerializer,
715+ ListSerializer (expressionSerializer)));
716+
717+ TextSerializer <BlockExpression > blockExpressionSerializer = Wrapped (
718+ (be) => Tuple2 (be.body, be.value),
719+ (t) => BlockExpression (t.first, t.second),
720+ Tuple2Serializer (blockSerializer, expressionSerializer));
721+
722+ TextSerializer <Instantiation > instantiationSerializer = Wrapped (
723+ (i) => Tuple2 (i.expression, i.typeArguments),
724+ (t) => Instantiation (t.first, t.second),
725+ Tuple2Serializer (expressionSerializer, ListSerializer (dartTypeSerializer)));
726+
727+ TextSerializer <NullCheck > nullCheckSerializer =
728+ Wrapped ((nc) => nc.operand, (op) => NullCheck (op), expressionSerializer);
729+
730+ TextSerializer <FileUriExpression > fileUriExpressionSerializer = Wrapped (
731+ (fue) => Tuple2 (fue.expression, fue.fileUri),
732+ (t) => FileUriExpression (t.first, t.second),
733+ Tuple2Serializer (expressionSerializer, const UriSerializer ()));
734+
735+ TextSerializer <CheckLibraryIsLoaded > checkLibraryIsLoadedSerializer = Wrapped (
736+ (clil) => clil.import,
737+ (i) => CheckLibraryIsLoaded (i),
738+ libraryDependencySerializer);
739+
740+ TextSerializer <LoadLibrary > loadLibrarySerializer = Wrapped (
741+ (ll) => ll.import, (i) => LoadLibrary (i), libraryDependencySerializer);
742+
692743Case <Expression > expressionSerializer =
693744 new Case .uninitialized (const ExpressionTagger ());
694745
@@ -1067,18 +1118,10 @@ YieldStatement wrapYieldStatement(Expression expression) {
10671118 return new YieldStatement (expression);
10681119}
10691120
1070- TextSerializer <AssertStatement > assertStatementSerializer = new Wrapped (
1071- unwrapAssertStatement,
1072- wrapAssertStatement,
1073- new Tuple2Serializer (expressionSerializer, expressionSerializer));
1074-
1075- Tuple2 <Expression , Expression > unwrapAssertStatement (AssertStatement node) {
1076- return new Tuple2 <Expression , Expression >(node.condition, node.message);
1077- }
1078-
1079- AssertStatement wrapAssertStatement (Tuple2 <Expression , Expression > tuple) {
1080- return new AssertStatement (tuple.first, message: tuple.second);
1081- }
1121+ TextSerializer <AssertStatement > assertStatementSerializer = Wrapped (
1122+ (a) => Tuple2 (a.condition, a.message),
1123+ (t) => AssertStatement (t.first, message: t.second),
1124+ Tuple2Serializer (expressionSerializer, Optional (expressionSerializer)));
10821125
10831126TextSerializer <Block > blockSerializer =
10841127 new Wrapped (unwrapBlock, wrapBlock, const BlockSerializer ());
@@ -1535,6 +1578,33 @@ Library wrapLibraryNode(Tuple2<Uri, List<Procedure>> tuple) {
15351578
15361579Case <Library > librarySerializer = new Case .uninitialized (const LibraryTagger ());
15371580
1581+ class ShowHideTagger implements Tagger <Combinator > {
1582+ String tag (Combinator node) => node.isShow ? "show" : "hide" ;
1583+ }
1584+
1585+ TextSerializer <Combinator > showSerializer = Wrapped (
1586+ (c) => c.names, (ns) => Combinator (true , ns), ListSerializer (DartString ()));
1587+
1588+ TextSerializer <Combinator > hideSerializer = Wrapped ((c) => c.names,
1589+ (ns) => Combinator (false , ns), ListSerializer (DartString ()));
1590+
1591+ Case <Combinator > showHideSerializer = new Case (ShowHideTagger (), {
1592+ "show" : showSerializer,
1593+ "hide" : hideSerializer,
1594+ });
1595+
1596+ TextSerializer <LibraryDependency > libraryDependencySerializer = Wrapped (
1597+ (ld) => Tuple5 (ld.importedLibraryReference.canonicalName, ld.name,
1598+ ld.combinators, ld.flags, ld.annotations),
1599+ (t) => LibraryDependency .byReference (
1600+ t.fourth, t.fifth, t.first.getReference (), t.second, t.third),
1601+ Tuple5Serializer (
1602+ CanonicalNameSerializer (),
1603+ Optional (DartString ()),
1604+ ListSerializer (showHideSerializer),
1605+ DartInt (),
1606+ ListSerializer (expressionSerializer)));
1607+
15381608void initializeSerializers () {
15391609 expressionSerializer.registerTags ({
15401610 "string" : stringLiteralSerializer,
@@ -1581,6 +1651,15 @@ void initializeSerializers() {
15811651 "invoke-constructor" : constructorInvocationSerializer,
15821652 "invoke-const-constructor" : constConstructorInvocationSerializer,
15831653 "fun" : functionExpressionSerializer,
1654+ "lists" : listConcatenationSerializer,
1655+ "sets" : setConcatenationSerializer,
1656+ "maps" : mapConcatenationSerializer,
1657+ "let-block" : blockExpressionSerializer,
1658+ "apply" : instantiationSerializer,
1659+ "not-null" : nullCheckSerializer,
1660+ "with-uri" : fileUriExpressionSerializer,
1661+ "is-loaded" : checkLibraryIsLoadedSerializer,
1662+ "load" : loadLibrarySerializer,
15841663 });
15851664 dartTypeSerializer.registerTags ({
15861665 "invalid" : invalidTypeSerializer,
0 commit comments