@@ -112,6 +112,15 @@ class ExpressionTagger extends ExpressionVisitor<String>
112
112
}
113
113
114
114
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" ;
115
124
}
116
125
117
126
const TextSerializer <InvalidExpression > invalidExpressionSerializer =
@@ -689,6 +698,48 @@ FunctionExpression wrapFunctionExpression(FunctionNode node) {
689
698
return new FunctionExpression (node);
690
699
}
691
700
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
+
692
743
Case <Expression > expressionSerializer =
693
744
new Case .uninitialized (const ExpressionTagger ());
694
745
@@ -1067,18 +1118,10 @@ YieldStatement wrapYieldStatement(Expression expression) {
1067
1118
return new YieldStatement (expression);
1068
1119
}
1069
1120
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)));
1082
1125
1083
1126
TextSerializer <Block > blockSerializer =
1084
1127
new Wrapped (unwrapBlock, wrapBlock, const BlockSerializer ());
@@ -1535,6 +1578,33 @@ Library wrapLibraryNode(Tuple2<Uri, List<Procedure>> tuple) {
1535
1578
1536
1579
Case <Library > librarySerializer = new Case .uninitialized (const LibraryTagger ());
1537
1580
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
+
1538
1608
void initializeSerializers () {
1539
1609
expressionSerializer.registerTags ({
1540
1610
"string" : stringLiteralSerializer,
@@ -1581,6 +1651,15 @@ void initializeSerializers() {
1581
1651
"invoke-constructor" : constructorInvocationSerializer,
1582
1652
"invoke-const-constructor" : constConstructorInvocationSerializer,
1583
1653
"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,
1584
1663
});
1585
1664
dartTypeSerializer.registerTags ({
1586
1665
"invalid" : invalidTypeSerializer,
0 commit comments