@@ -1103,6 +1103,11 @@ class StatementTagger extends StatementVisitor<String>
1103
1103
String visitAssertBlock (AssertBlock node) => "assert-block" ;
1104
1104
String visitLabeledStatement (LabeledStatement node) => "label" ;
1105
1105
String visitBreakStatement (BreakStatement node) => "break" ;
1106
+ String visitTryFinally (TryFinally node) => "try-finally" ;
1107
+ String visitTryCatch (TryCatch node) => "try-catch" ;
1108
+ String visitSwitchStatement (SwitchStatement node) => "switch" ;
1109
+ String visitContinueSwitchStatement (ContinueSwitchStatement node) =>
1110
+ "continue" ;
1106
1111
}
1107
1112
1108
1113
TextSerializer <ExpressionStatement > expressionStatementSerializer = new Wrapped (
@@ -1354,6 +1359,64 @@ BreakStatement wrapBreakStatement(LabeledStatement node) {
1354
1359
return new BreakStatement (node);
1355
1360
}
1356
1361
1362
+ TextSerializer <TryFinally > tryFinallySerializer = Wrapped (
1363
+ (w) => Tuple2 (w.body, w.finalizer),
1364
+ (u) => TryFinally (u.first, u.second),
1365
+ Tuple2Serializer (statementSerializer, statementSerializer));
1366
+
1367
+ TextSerializer <TryCatch > tryCatchSerializer = Wrapped (
1368
+ (w) => Tuple2 (w.body, w.catches),
1369
+ (u) => TryCatch (u.first, u.second),
1370
+ Tuple2Serializer (statementSerializer, ListSerializer (catchSerializer)));
1371
+
1372
+ TextSerializer <Catch > catchSerializer = Wrapped (
1373
+ (w) => Tuple4 (w.guard, w.exception, w.stackTrace, w.body),
1374
+ (u) => Catch (u.second, u.fourth, stackTrace: u.third, guard: u.first),
1375
+ Tuple4Serializer (
1376
+ dartTypeSerializer,
1377
+ Optional (variableDeclarationSerializer),
1378
+ Optional (variableDeclarationSerializer),
1379
+ statementSerializer));
1380
+
1381
+ TextSerializer <SwitchStatement > switchStatementSerializer = Wrapped (
1382
+ (w) => Tuple2 (w.expression, w.cases),
1383
+ (u) => SwitchStatement (u.first, u.second),
1384
+ Tuple2Serializer (
1385
+ expressionSerializer,
1386
+ Zip (
1387
+ Bind (ListSerializer <SwitchCase >(switchCaseSerializer),
1388
+ ListSerializer (statementSerializer)),
1389
+ (SwitchCase c, Statement b) => c..body = b,
1390
+ (SwitchCase z) => Tuple2 (z, z.body))));
1391
+
1392
+ class SwitchCaseTagger implements Tagger <SwitchCase > {
1393
+ String tag (SwitchCase node) {
1394
+ return node.isDefault ? "default" : "case" ;
1395
+ }
1396
+ }
1397
+
1398
+ TextSerializer <SwitchCase > switchCaseCaseSerializer = Wrapped (
1399
+ (w) => Tuple2 ("L" , w),
1400
+ (u) => u.second,
1401
+ Binder (Wrapped (
1402
+ (w) => w.expressions,
1403
+ (u) => SwitchCase (u, List .filled (u.length, 0 ), null ),
1404
+ ListSerializer (expressionSerializer))));
1405
+
1406
+ TextSerializer <SwitchCase > switchCaseDefaultSerializer = Wrapped (
1407
+ (w) => Tuple2 ("L" , w),
1408
+ (u) => u.second,
1409
+ Binder (
1410
+ Wrapped ((w) => null , (u) => SwitchCase .defaultCase (null ), Nothing ())));
1411
+
1412
+ TextSerializer <SwitchCase > switchCaseSerializer = Case (SwitchCaseTagger (), {
1413
+ "case" : switchCaseCaseSerializer,
1414
+ "default" : switchCaseDefaultSerializer,
1415
+ });
1416
+
1417
+ TextSerializer <ContinueSwitchStatement > continueSwitchStatementSerializer =
1418
+ Wrapped ((w) => w.target, (u) => ContinueSwitchStatement (u), ScopedUse ());
1419
+
1357
1420
Case <Statement > statementSerializer =
1358
1421
new Case .uninitialized (const StatementTagger ());
1359
1422
@@ -1822,6 +1885,10 @@ void initializeSerializers() {
1822
1885
"assert-block" : assertBlockSerializer,
1823
1886
"label" : labeledStatementSerializer,
1824
1887
"break" : breakSerializer,
1888
+ "try-finally" : tryFinallySerializer,
1889
+ "try-catch" : tryCatchSerializer,
1890
+ "switch" : switchStatementSerializer,
1891
+ "continue" : continueSwitchStatementSerializer,
1825
1892
});
1826
1893
functionNodeSerializer.registerTags ({
1827
1894
"sync" : syncFunctionNodeSerializer,
0 commit comments