@@ -121,6 +121,8 @@ class ExpressionTagger extends ExpressionVisitor<String>
121
121
String visitFileUriExpression (FileUriExpression _) => "with-uri" ;
122
122
String visitCheckLibraryIsLoaded (CheckLibraryIsLoaded _) => "is-loaded" ;
123
123
String visitLoadLibrary (LoadLibrary _) => "load" ;
124
+ String visitConstantExpression (ConstantExpression _) => "const" ;
125
+ String visitInstanceCreation (InstanceCreation _) => "object" ;
124
126
}
125
127
126
128
const TextSerializer <InvalidExpression > invalidExpressionSerializer =
@@ -740,6 +742,29 @@ TextSerializer<CheckLibraryIsLoaded> checkLibraryIsLoadedSerializer = Wrapped(
740
742
TextSerializer <LoadLibrary > loadLibrarySerializer = Wrapped (
741
743
(ll) => ll.import, (i) => LoadLibrary (i), libraryDependencySerializer);
742
744
745
+ TextSerializer <ConstantExpression > constantExpressionSerializer = Wrapped (
746
+ (ce) => Tuple2 (ce.constant, ce.type),
747
+ (t) => ConstantExpression (t.first, t.second),
748
+ Tuple2Serializer (constantSerializer, dartTypeSerializer));
749
+
750
+ TextSerializer <InstanceCreation > instanceCreationSerializer = Wrapped (
751
+ (ic) => Tuple6 (
752
+ ic.classReference.canonicalName,
753
+ ic.typeArguments,
754
+ ic.fieldValues.keys.map ((r) => r.canonicalName).toList (),
755
+ ic.fieldValues.values.toList (),
756
+ ic.asserts,
757
+ ic.unusedArguments),
758
+ (t) => InstanceCreation (t.first.getReference (), t.second,
759
+ Map .fromIterables (t.third, t.fourth), t.fifth, t.sixth),
760
+ Tuple6Serializer (
761
+ CanonicalNameSerializer (),
762
+ ListSerializer (dartTypeSerializer),
763
+ ListSerializer (CanonicalNameSerializer ()),
764
+ ListSerializer (expressionSerializer),
765
+ ListSerializer (assertStatementSerializer),
766
+ ListSerializer (expressionSerializer)));
767
+
743
768
Case <Expression > expressionSerializer =
744
769
new Case .uninitialized (const ExpressionTagger ());
745
770
@@ -1605,6 +1630,109 @@ TextSerializer<LibraryDependency> libraryDependencySerializer = Wrapped(
1605
1630
DartInt (),
1606
1631
ListSerializer (expressionSerializer)));
1607
1632
1633
+ class ConstantTagger extends ConstantVisitor <String >
1634
+ implements Tagger <Constant > {
1635
+ const ConstantTagger ();
1636
+
1637
+ String tag (Constant node) => node.accept (this );
1638
+
1639
+ String visitBoolConstant (BoolConstant node) => "const-bool" ;
1640
+ String visitDoubleConstant (DoubleConstant node) => "const-double" ;
1641
+ String visitInstanceConstant (InstanceConstant node) => "const-object" ;
1642
+ String visitIntConstant (IntConstant node) => "const-int" ;
1643
+ String visitListConstant (ListConstant node) => "const-list" ;
1644
+ String visitMapConstant (MapConstant node) => "const-map" ;
1645
+ String visitNullConstant (NullConstant node) => "const-null" ;
1646
+ String visitPartialInstantiationConstant (PartialInstantiationConstant node) =>
1647
+ "const-apply" ;
1648
+ String visitSetConstant (SetConstant node) => "const-set" ;
1649
+ String visitStringConstant (StringConstant node) => "const-string" ;
1650
+ String visitSymbolConstant (SymbolConstant node) => "const-symbol" ;
1651
+ String visitTearOffConstant (TearOffConstant node) => "const-tearoff" ;
1652
+ String visitTypeLiteralConstant (TypeLiteralConstant node) => "const-type" ;
1653
+ String visitUnevaluatedConstant (UnevaluatedConstant node) => "const-expr" ;
1654
+ }
1655
+
1656
+ TextSerializer <BoolConstant > boolConstantSerializer =
1657
+ Wrapped ((w) => w.value, (u) => BoolConstant (u), DartBool ());
1658
+
1659
+ TextSerializer <DoubleConstant > doubleConstantSerializer =
1660
+ Wrapped ((w) => w.value, (u) => DoubleConstant (u), DartDouble ());
1661
+
1662
+ TextSerializer <IntConstant > intConstantSerializer =
1663
+ Wrapped ((w) => w.value, (u) => IntConstant (u), DartInt ());
1664
+
1665
+ TextSerializer <ListConstant > listConstantSerializer = Wrapped (
1666
+ (w) => Tuple2 (w.typeArgument, w.entries),
1667
+ (u) => ListConstant (u.first, u.second),
1668
+ Tuple2Serializer (dartTypeSerializer, ListSerializer (constantSerializer)));
1669
+
1670
+ TextSerializer <MapConstant > mapConstantSerializer = Wrapped (
1671
+ (w) => Tuple3 (w.keyType, w.valueType, w.entries),
1672
+ (u) => MapConstant (u.first, u.second, u.third),
1673
+ Tuple3Serializer (
1674
+ dartTypeSerializer,
1675
+ dartTypeSerializer,
1676
+ Zip (
1677
+ Tuple2Serializer (ListSerializer (constantSerializer),
1678
+ ListSerializer (constantSerializer)),
1679
+ (k, v) => ConstantMapEntry (k, v),
1680
+ (z) => Tuple2 (z.key, z.value))));
1681
+
1682
+ TextSerializer <NullConstant > nullConstantSerializer =
1683
+ Wrapped ((w) => null , (u) => NullConstant (), Nothing ());
1684
+
1685
+ TextSerializer <PartialInstantiationConstant >
1686
+ partialInstantiationConstantSerializer = Wrapped (
1687
+ (w) => Tuple2 (w.tearOffConstant, w.types),
1688
+ (u) => PartialInstantiationConstant (u.first, u.second),
1689
+ Tuple2Serializer (
1690
+ tearOffConstantSerializer, ListSerializer (dartTypeSerializer)));
1691
+
1692
+ TextSerializer <SetConstant > setConstantSerializer = Wrapped (
1693
+ (w) => Tuple2 (w.typeArgument, w.entries),
1694
+ (u) => SetConstant (u.first, u.second),
1695
+ Tuple2Serializer (dartTypeSerializer, ListSerializer (constantSerializer)));
1696
+
1697
+ TextSerializer <StringConstant > stringConstantSerializer =
1698
+ Wrapped ((w) => w.value, (u) => StringConstant (u), DartString ());
1699
+
1700
+ TextSerializer <SymbolConstant > symbolConstantSerializer = Wrapped (
1701
+ (w) => Tuple2 (w.name, w.libraryReference? .canonicalName),
1702
+ (u) => SymbolConstant (u.first, u.second? .getReference ()),
1703
+ Tuple2Serializer (DartString (), Optional (CanonicalNameSerializer ())));
1704
+
1705
+ TextSerializer <TearOffConstant > tearOffConstantSerializer = Wrapped (
1706
+ (w) => w.procedureReference.canonicalName,
1707
+ (u) => TearOffConstant .byReference (u.getReference ()),
1708
+ CanonicalNameSerializer ());
1709
+
1710
+ TextSerializer <TypeLiteralConstant > typeLiteralConstantSerializer =
1711
+ Wrapped ((w) => w.type, (u) => TypeLiteralConstant (u), dartTypeSerializer);
1712
+
1713
+ TextSerializer <UnevaluatedConstant > unevaluatedConstantSerializer = Wrapped (
1714
+ (w) => w.expression, (u) => UnevaluatedConstant (u), expressionSerializer);
1715
+
1716
+ TextSerializer <InstanceConstant > instanceConstantSerializer =
1717
+ Wrapped <
1718
+ Tuple4 <CanonicalName , List <DartType >, List <CanonicalName >,
1719
+ List <Constant >>,
1720
+ InstanceConstant >(
1721
+ (w) => Tuple4 (
1722
+ w.classReference.canonicalName,
1723
+ w.typeArguments,
1724
+ w.fieldValues.keys.map ((r) => r.canonicalName).toList (),
1725
+ w.fieldValues.values.toList ()),
1726
+ (u) => InstanceConstant (u.first.getReference (), u.second,
1727
+ Map .fromIterables (u.third.map ((c) => c.getReference ()), u.fourth)),
1728
+ Tuple4Serializer (
1729
+ CanonicalNameSerializer (),
1730
+ ListSerializer (dartTypeSerializer),
1731
+ ListSerializer (CanonicalNameSerializer ()),
1732
+ ListSerializer (constantSerializer)));
1733
+
1734
+ Case <Constant > constantSerializer = Case .uninitialized (ConstantTagger ());
1735
+
1608
1736
void initializeSerializers () {
1609
1737
expressionSerializer.registerTags ({
1610
1738
"string" : stringLiteralSerializer,
@@ -1660,6 +1788,8 @@ void initializeSerializers() {
1660
1788
"with-uri" : fileUriExpressionSerializer,
1661
1789
"is-loaded" : checkLibraryIsLoadedSerializer,
1662
1790
"load" : loadLibrarySerializer,
1791
+ "const" : constantExpressionSerializer,
1792
+ "object" : instanceCreationSerializer,
1663
1793
});
1664
1794
dartTypeSerializer.registerTags ({
1665
1795
"invalid" : invalidTypeSerializer,
@@ -1705,4 +1835,20 @@ void initializeSerializers() {
1705
1835
"legacy" : libraryContentsSerializer,
1706
1836
"null-safe" : libraryContentsSerializer,
1707
1837
});
1838
+ constantSerializer.registerTags ({
1839
+ "const-bool" : boolConstantSerializer,
1840
+ "const-double" : doubleConstantSerializer,
1841
+ "const-int" : intConstantSerializer,
1842
+ "const-list" : listConstantSerializer,
1843
+ "const-map" : mapConstantSerializer,
1844
+ "const-null" : nullConstantSerializer,
1845
+ "const-apply" : partialInstantiationConstantSerializer,
1846
+ "const-set" : setConstantSerializer,
1847
+ "const-string" : stringConstantSerializer,
1848
+ "const-symbol" : symbolConstantSerializer,
1849
+ "const-tearoff" : tearOffConstantSerializer,
1850
+ "const-type" : typeLiteralConstantSerializer,
1851
+ "const-expr" : unevaluatedConstantSerializer,
1852
+ "const-object" : instanceConstantSerializer,
1853
+ });
1708
1854
}
0 commit comments