diff --git a/compiler/lib/src/main/resources/META-INF/native-image/reflect-config.json b/compiler/lib/src/main/resources/META-INF/native-image/reflect-config.json index fd75eaeaf..cd72d37e2 100644 --- a/compiler/lib/src/main/resources/META-INF/native-image/reflect-config.json +++ b/compiler/lib/src/main/resources/META-INF/native-image/reflect-config.json @@ -27,111 +27,79 @@ }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1", - "fields":[{"name":"0bitmap$420"}] + "fields":[{"name":"0bitmap$422"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1133", - "fields":[{"name":"0bitmap$1170"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1141", + "fields":[{"name":"0bitmap$1178"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1134", - "fields":[{"name":"0bitmap$1087"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1142", + "fields":[{"name":"0bitmap$1095"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1135", - "fields":[{"name":"0bitmap$1072"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1143", + "fields":[{"name":"0bitmap$1080"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1174", - "fields":[{"name":"0bitmap$1083"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1175", - "fields":[{"name":"0bitmap$1077"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1176", - "fields":[{"name":"0bitmap$1073"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1177", - "fields":[{"name":"0bitmap$1074"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1182", + "fields":[{"name":"0bitmap$1091"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1178", - "fields":[{"name":"0bitmap$1075"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1183", + "fields":[{"name":"0bitmap$1085"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1179", - "fields":[{"name":"0bitmap$1076"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1184", + "fields":[{"name":"0bitmap$1081"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1181", + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1185", "fields":[{"name":"0bitmap$1082"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1186", - "fields":[{"name":"0bitmap$1086"}] + "fields":[{"name":"0bitmap$1083"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1187", "fields":[{"name":"0bitmap$1084"}] }, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1188", - "fields":[{"name":"0bitmap$1085"}] -}, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1189", - "fields":[{"name":"0bitmap$1153"}] + "fields":[{"name":"0bitmap$1090"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1190", - "fields":[{"name":"0bitmap$1123"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1194", + "fields":[{"name":"0bitmap$1094"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1229", - "fields":[{"name":"0bitmap$1147"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1195", + "fields":[{"name":"0bitmap$1092"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1230", - "fields":[{"name":"0bitmap$1127"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1196", + "fields":[{"name":"0bitmap$1093"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1235", - "fields":[{"name":"0bitmap$1141"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1197", + "fields":[{"name":"0bitmap$1161"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1236", - "fields":[{"name":"0bitmap$1128"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1198", + "fields":[{"name":"0bitmap$1131"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1237", - "fields":[{"name":"0bitmap$1129"}] + "fields":[{"name":"0bitmap$1155"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1238", - "fields":[{"name":"0bitmap$1130"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1239", - "fields":[{"name":"0bitmap$1131"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1240", - "fields":[{"name":"0bitmap$1132"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1241", - "fields":[{"name":"0bitmap$1133"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1242", - "fields":[{"name":"0bitmap$1134"}] + "fields":[{"name":"0bitmap$1135"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1243", - "fields":[{"name":"0bitmap$1135"}] + "fields":[{"name":"0bitmap$1149"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1244", @@ -153,449 +121,461 @@ "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1248", "fields":[{"name":"0bitmap$1140"}] }, +{ + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1249", + "fields":[{"name":"0bitmap$1141"}] +}, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1250", + "fields":[{"name":"0bitmap$1142"}] +}, +{ + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1251", + "fields":[{"name":"0bitmap$1143"}] +}, +{ + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1252", + "fields":[{"name":"0bitmap$1144"}] +}, +{ + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1253", + "fields":[{"name":"0bitmap$1145"}] +}, +{ + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1254", "fields":[{"name":"0bitmap$1146"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1255", - "fields":[{"name":"0bitmap$1152"}] + "fields":[{"name":"0bitmap$1147"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1260", - "fields":[{"name":"0bitmap$1169"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1256", + "fields":[{"name":"0bitmap$1148"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1261", - "fields":[{"name":"0bitmap$1163"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1258", + "fields":[{"name":"0bitmap$1154"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1272", - "fields":[{"name":"0bitmap$1168"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1263", + "fields":[{"name":"0bitmap$1160"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1273", - "fields":[{"name":"0bitmap$1164"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1268", + "fields":[{"name":"0bitmap$1177"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1274", - "fields":[{"name":"0bitmap$1165"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1269", + "fields":[{"name":"0bitmap$1171"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1275", - "fields":[{"name":"0bitmap$1166"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1280", + "fields":[{"name":"0bitmap$1176"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1276", - "fields":[{"name":"0bitmap$1167"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1281", + "fields":[{"name":"0bitmap$1172"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1277", - "fields":[{"name":"0bitmap$1200"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1282", + "fields":[{"name":"0bitmap$1173"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1278", - "fields":[{"name":"0bitmap$1182"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1283", + "fields":[{"name":"0bitmap$1174"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1293", - "fields":[{"name":"0bitmap$1185"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1284", + "fields":[{"name":"0bitmap$1175"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1294", - "fields":[{"name":"0bitmap$1183"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1285", + "fields":[{"name":"0bitmap$1208"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1295", - "fields":[{"name":"0bitmap$1184"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1286", + "fields":[{"name":"0bitmap$1190"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1297", - "fields":[{"name":"0bitmap$1199"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1301", + "fields":[{"name":"0bitmap$1193"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1298", - "fields":[{"name":"0bitmap$1198"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1302", + "fields":[{"name":"0bitmap$1191"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1299", - "fields":[{"name":"0bitmap$1186"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1303", + "fields":[{"name":"0bitmap$1192"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1300", - "fields":[{"name":"0bitmap$1192"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1305", + "fields":[{"name":"0bitmap$1207"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1307", - "fields":[{"name":"0bitmap$1197"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1306", + "fields":[{"name":"0bitmap$1206"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1308", - "fields":[{"name":"0bitmap$1196"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1307", + "fields":[{"name":"0bitmap$1194"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1309", - "fields":[{"name":"0bitmap$1193"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1308", + "fields":[{"name":"0bitmap$1200"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1310", - "fields":[{"name":"0bitmap$1194"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1315", + "fields":[{"name":"0bitmap$1205"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1311", - "fields":[{"name":"0bitmap$1195"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1316", + "fields":[{"name":"0bitmap$1204"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1313", + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1317", "fields":[{"name":"0bitmap$1201"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1314", - "fields":[{"name":"0bitmap$1216"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1318", + "fields":[{"name":"0bitmap$1202"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1315", - "fields":[{"name":"0bitmap$1207"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1319", + "fields":[{"name":"0bitmap$1203"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1321", - "fields":[{"name":"0bitmap$1210"}] + "fields":[{"name":"0bitmap$1209"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1322", - "fields":[{"name":"0bitmap$1209"}] + "fields":[{"name":"0bitmap$1224"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1324", + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1323", "fields":[{"name":"0bitmap$1215"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1325", - "fields":[{"name":"0bitmap$1211"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1329", + "fields":[{"name":"0bitmap$1218"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1326", - "fields":[{"name":"0bitmap$1212"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1330", + "fields":[{"name":"0bitmap$1217"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1327", - "fields":[{"name":"0bitmap$1213"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1332", + "fields":[{"name":"0bitmap$1223"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1328", - "fields":[{"name":"0bitmap$1214"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1333", + "fields":[{"name":"0bitmap$1219"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1329", - "fields":[{"name":"0bitmap$1320"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1334", + "fields":[{"name":"0bitmap$1220"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1330", - "fields":[{"name":"0bitmap$1217"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1335", + "fields":[{"name":"0bitmap$1221"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1331", - "fields":[{"name":"0bitmap$1268"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1336", + "fields":[{"name":"0bitmap$1222"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1332", - "fields":[{"name":"0bitmap$1253"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1337", + "fields":[{"name":"0bitmap$1328"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1371", - "fields":[{"name":"0bitmap$1264"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1338", + "fields":[{"name":"0bitmap$1225"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1372", - "fields":[{"name":"0bitmap$1258"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1339", + "fields":[{"name":"0bitmap$1276"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1373", - "fields":[{"name":"0bitmap$1254"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1340", + "fields":[{"name":"0bitmap$1261"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1374", - "fields":[{"name":"0bitmap$1255"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1379", + "fields":[{"name":"0bitmap$1272"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1375", - "fields":[{"name":"0bitmap$1256"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1380", + "fields":[{"name":"0bitmap$1266"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1376", - "fields":[{"name":"0bitmap$1257"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1381", + "fields":[{"name":"0bitmap$1262"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1378", + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1382", "fields":[{"name":"0bitmap$1263"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1383", - "fields":[{"name":"0bitmap$1267"}] + "fields":[{"name":"0bitmap$1264"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1384", "fields":[{"name":"0bitmap$1265"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1385", - "fields":[{"name":"0bitmap$1266"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1386", + "fields":[{"name":"0bitmap$1271"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1386", - "fields":[{"name":"0bitmap$1319"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1391", + "fields":[{"name":"0bitmap$1275"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1387", - "fields":[{"name":"0bitmap$1304"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1392", + "fields":[{"name":"0bitmap$1273"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1426", - "fields":[{"name":"0bitmap$1315"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1393", + "fields":[{"name":"0bitmap$1274"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1427", - "fields":[{"name":"0bitmap$1309"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1394", + "fields":[{"name":"0bitmap$1327"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1428", - "fields":[{"name":"0bitmap$1305"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1395", + "fields":[{"name":"0bitmap$1312"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1429", - "fields":[{"name":"0bitmap$1306"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1434", + "fields":[{"name":"0bitmap$1323"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1430", - "fields":[{"name":"0bitmap$1307"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1435", + "fields":[{"name":"0bitmap$1317"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1431", - "fields":[{"name":"0bitmap$1308"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1436", + "fields":[{"name":"0bitmap$1313"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1433", + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1437", "fields":[{"name":"0bitmap$1314"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1438", - "fields":[{"name":"0bitmap$1318"}] + "fields":[{"name":"0bitmap$1315"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1439", "fields":[{"name":"0bitmap$1316"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1440", - "fields":[{"name":"0bitmap$1317"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1443", - "fields":[{"name":"0bitmap$1351"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1441", + "fields":[{"name":"0bitmap$1322"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1444", - "fields":[{"name":"0bitmap$1336"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1446", + "fields":[{"name":"0bitmap$1326"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1459", - "fields":[{"name":"0bitmap$1350"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1447", + "fields":[{"name":"0bitmap$1324"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1460", - "fields":[{"name":"0bitmap$1349"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1448", + "fields":[{"name":"0bitmap$1325"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1461", - "fields":[{"name":"0bitmap$1337"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1451", + "fields":[{"name":"0bitmap$1359"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1462", - "fields":[{"name":"0bitmap$1343"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1452", + "fields":[{"name":"0bitmap$1344"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1469", - "fields":[{"name":"0bitmap$1348"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1467", + "fields":[{"name":"0bitmap$1358"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$147", - "fields":[{"name":"0bitmap$266"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1468", + "fields":[{"name":"0bitmap$1357"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1475", - "fields":[{"name":"0bitmap$1372"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1469", + "fields":[{"name":"0bitmap$1345"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1476", - "fields":[{"name":"0bitmap$1361"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1470", + "fields":[{"name":"0bitmap$1351"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$148", - "fields":[{"name":"0bitmap$183"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1477", + "fields":[{"name":"0bitmap$1356"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1487", - "fields":[{"name":"0bitmap$1362"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1483", + "fields":[{"name":"0bitmap$1380"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1488", - "fields":[{"name":"0bitmap$1366"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1484", + "fields":[{"name":"0bitmap$1369"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$149", - "fields":[{"name":"0bitmap$168"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1493", - "fields":[{"name":"0bitmap$1367"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1494", - "fields":[{"name":"0bitmap$1368"}] + "fields":[{"name":"0bitmap$268"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1495", - "fields":[{"name":"0bitmap$1371"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1498", - "fields":[{"name":"0bitmap$1373"}] + "fields":[{"name":"0bitmap$1370"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1499", - "fields":[{"name":"0bitmap$1396"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1496", + "fields":[{"name":"0bitmap$1374"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1500", - "fields":[{"name":"0bitmap$1374"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$150", + "fields":[{"name":"0bitmap$185"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1501", - "fields":[{"name":"0bitmap$1395"}] + "fields":[{"name":"0bitmap$1375"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1502", - "fields":[{"name":"0bitmap$1384"}] + "fields":[{"name":"0bitmap$1376"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1503", - "fields":[{"name":"0bitmap$1383"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1504", - "fields":[{"name":"0bitmap$1375"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1505", - "fields":[{"name":"0bitmap$1376"}] + "fields":[{"name":"0bitmap$1379"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1506", - "fields":[{"name":"0bitmap$1377"}] + "fields":[{"name":"0bitmap$1381"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1507", - "fields":[{"name":"0bitmap$1378"}] + "fields":[{"name":"0bitmap$1404"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1508", - "fields":[{"name":"0bitmap$1379"}] + "fields":[{"name":"0bitmap$1382"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1509", - "fields":[{"name":"0bitmap$1380"}] + "fields":[{"name":"0bitmap$1403"}] +}, +{ + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$151", + "fields":[{"name":"0bitmap$170"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1510", - "fields":[{"name":"0bitmap$1381"}] + "fields":[{"name":"0bitmap$1392"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1511", - "fields":[{"name":"0bitmap$1382"}] + "fields":[{"name":"0bitmap$1391"}] +}, +{ + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1512", + "fields":[{"name":"0bitmap$1383"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1513", - "fields":[{"name":"0bitmap$1385"}] + "fields":[{"name":"0bitmap$1384"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1514", - "fields":[{"name":"0bitmap$1389"}] + "fields":[{"name":"0bitmap$1385"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1515", - "fields":[{"name":"0bitmap$1388"}] + "fields":[{"name":"0bitmap$1386"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1516", - "fields":[{"name":"0bitmap$1386"}] + "fields":[{"name":"0bitmap$1387"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1517", - "fields":[{"name":"0bitmap$1387"}] + "fields":[{"name":"0bitmap$1388"}] +}, +{ + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1518", + "fields":[{"name":"0bitmap$1389"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1519", "fields":[{"name":"0bitmap$1390"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1520", - "fields":[{"name":"0bitmap$1391"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1521", + "fields":[{"name":"0bitmap$1393"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1521", - "fields":[{"name":"0bitmap$1394"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1522", + "fields":[{"name":"0bitmap$1397"}] +}, +{ + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1523", + "fields":[{"name":"0bitmap$1396"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1524", - "fields":[{"name":"0bitmap$1420"}] + "fields":[{"name":"0bitmap$1394"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1525", - "fields":[{"name":"0bitmap$1410"}] + "fields":[{"name":"0bitmap$1395"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1540", - "fields":[{"name":"0bitmap$1419"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1527", + "fields":[{"name":"0bitmap$1398"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1541", - "fields":[{"name":"0bitmap$1418"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1528", + "fields":[{"name":"0bitmap$1399"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1542", - "fields":[{"name":"0bitmap$1411"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1529", + "fields":[{"name":"0bitmap$1402"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1543", - "fields":[{"name":"0bitmap$1412"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1532", + "fields":[{"name":"0bitmap$1428"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1544", - "fields":[{"name":"0bitmap$1413"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1533", + "fields":[{"name":"0bitmap$1418"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1545", - "fields":[{"name":"0bitmap$1414"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1548", + "fields":[{"name":"0bitmap$1427"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1546", - "fields":[{"name":"0bitmap$1415"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1549", + "fields":[{"name":"0bitmap$1426"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1547", - "fields":[{"name":"0bitmap$1416"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1550", + "fields":[{"name":"0bitmap$1419"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1548", - "fields":[{"name":"0bitmap$1417"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1551", + "fields":[{"name":"0bitmap$1420"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1552", - "fields":[{"name":"0bitmap$1442"}] + "fields":[{"name":"0bitmap$1421"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1553", - "fields":[{"name":"0bitmap$1424"}] + "fields":[{"name":"0bitmap$1422"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1554", @@ -603,39 +583,31 @@ }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1555", - "fields":[{"name":"0bitmap$1441"}] + "fields":[{"name":"0bitmap$1424"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1556", - "fields":[{"name":"0bitmap$1437"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1557", - "fields":[{"name":"0bitmap$1426"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1558", "fields":[{"name":"0bitmap$1425"}] }, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1559", - "fields":[{"name":"0bitmap$1436"}] -}, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1560", - "fields":[{"name":"0bitmap$1430"}] + "fields":[{"name":"0bitmap$1450"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1561", - "fields":[{"name":"0bitmap$1429"}] + "fields":[{"name":"0bitmap$1432"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1562", - "fields":[{"name":"0bitmap$1428"}] + "fields":[{"name":"0bitmap$1431"}] +}, +{ + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1563", + "fields":[{"name":"0bitmap$1449"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1564", - "fields":[{"name":"0bitmap$1435"}] + "fields":[{"name":"0bitmap$1445"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1565", @@ -646,68 +618,64 @@ "fields":[{"name":"0bitmap$1433"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1569", - "fields":[{"name":"0bitmap$1440"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1570", - "fields":[{"name":"0bitmap$1439"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1567", + "fields":[{"name":"0bitmap$1444"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1571", + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1568", "fields":[{"name":"0bitmap$1438"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1572", - "fields":[{"name":"0bitmap$1508"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1569", + "fields":[{"name":"0bitmap$1437"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1573", - "fields":[{"name":"0bitmap$1478"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1570", + "fields":[{"name":"0bitmap$1436"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1612", - "fields":[{"name":"0bitmap$1502"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1572", + "fields":[{"name":"0bitmap$1443"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1613", - "fields":[{"name":"0bitmap$1482"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1573", + "fields":[{"name":"0bitmap$1442"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1618", - "fields":[{"name":"0bitmap$1496"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1574", + "fields":[{"name":"0bitmap$1441"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1619", - "fields":[{"name":"0bitmap$1483"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1577", + "fields":[{"name":"0bitmap$1448"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1620", - "fields":[{"name":"0bitmap$1484"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1578", + "fields":[{"name":"0bitmap$1447"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1621", - "fields":[{"name":"0bitmap$1485"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1579", + "fields":[{"name":"0bitmap$1446"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1622", - "fields":[{"name":"0bitmap$1486"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1580", + "fields":[{"name":"0bitmap$1516"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1623", - "fields":[{"name":"0bitmap$1487"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1581", + "fields":[{"name":"0bitmap$1486"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1624", - "fields":[{"name":"0bitmap$1488"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1620", + "fields":[{"name":"0bitmap$1510"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1625", - "fields":[{"name":"0bitmap$1489"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1621", + "fields":[{"name":"0bitmap$1490"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1626", - "fields":[{"name":"0bitmap$1490"}] + "fields":[{"name":"0bitmap$1504"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1627", @@ -730,152 +698,152 @@ "fields":[{"name":"0bitmap$1495"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1633", - "fields":[{"name":"0bitmap$1501"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1632", + "fields":[{"name":"0bitmap$1496"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1638", - "fields":[{"name":"0bitmap$1507"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1633", + "fields":[{"name":"0bitmap$1497"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1643", - "fields":[{"name":"0bitmap$1511"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1634", + "fields":[{"name":"0bitmap$1498"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1644", - "fields":[{"name":"0bitmap$1510"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1635", + "fields":[{"name":"0bitmap$1499"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1646", - "fields":[{"name":"0bitmap$1512"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1636", + "fields":[{"name":"0bitmap$1500"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1647", - "fields":[{"name":"0bitmap$1513"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1637", + "fields":[{"name":"0bitmap$1501"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1648", - "fields":[{"name":"0bitmap$1514"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1638", + "fields":[{"name":"0bitmap$1502"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1649", - "fields":[{"name":"0bitmap$1544"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1639", + "fields":[{"name":"0bitmap$1503"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1650", - "fields":[{"name":"0bitmap$1526"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1641", + "fields":[{"name":"0bitmap$1509"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1665", - "fields":[{"name":"0bitmap$1529"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1646", + "fields":[{"name":"0bitmap$1515"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1666", - "fields":[{"name":"0bitmap$1527"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1651", + "fields":[{"name":"0bitmap$1519"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1667", - "fields":[{"name":"0bitmap$1528"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1652", + "fields":[{"name":"0bitmap$1518"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1669", - "fields":[{"name":"0bitmap$1543"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1654", + "fields":[{"name":"0bitmap$1520"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1670", - "fields":[{"name":"0bitmap$1542"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1655", + "fields":[{"name":"0bitmap$1521"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1671", - "fields":[{"name":"0bitmap$1530"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1656", + "fields":[{"name":"0bitmap$1522"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1672", - "fields":[{"name":"0bitmap$1536"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1657", + "fields":[{"name":"0bitmap$1552"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1679", - "fields":[{"name":"0bitmap$1541"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1658", + "fields":[{"name":"0bitmap$1534"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1680", - "fields":[{"name":"0bitmap$1540"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1673", + "fields":[{"name":"0bitmap$1537"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1681", - "fields":[{"name":"0bitmap$1537"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1674", + "fields":[{"name":"0bitmap$1535"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1682", - "fields":[{"name":"0bitmap$1538"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1675", + "fields":[{"name":"0bitmap$1536"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1683", - "fields":[{"name":"0bitmap$1539"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1677", + "fields":[{"name":"0bitmap$1551"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1685", - "fields":[{"name":"0bitmap$1634"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1678", + "fields":[{"name":"0bitmap$1550"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1686", - "fields":[{"name":"0bitmap$1585"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1679", + "fields":[{"name":"0bitmap$1538"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1730", - "fields":[{"name":"0bitmap$1627"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1680", + "fields":[{"name":"0bitmap$1544"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1731", - "fields":[{"name":"0bitmap$1626"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1687", + "fields":[{"name":"0bitmap$1549"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1775", - "fields":[{"name":"0bitmap$1630"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1688", + "fields":[{"name":"0bitmap$1548"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1776", - "fields":[{"name":"0bitmap$1628"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1689", + "fields":[{"name":"0bitmap$1545"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1777", - "fields":[{"name":"0bitmap$1629"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1690", + "fields":[{"name":"0bitmap$1546"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1778", - "fields":[{"name":"0bitmap$1633"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1691", + "fields":[{"name":"0bitmap$1547"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1779", - "fields":[{"name":"0bitmap$1631"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1693", + "fields":[{"name":"0bitmap$1642"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1780", - "fields":[{"name":"0bitmap$1632"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1694", + "fields":[{"name":"0bitmap$1593"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1781", - "fields":[{"name":"0bitmap$1651"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1738", + "fields":[{"name":"0bitmap$1635"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1782", - "fields":[{"name":"0bitmap$1647"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1739", + "fields":[{"name":"0bitmap$1634"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1783", - "fields":[{"name":"0bitmap$1636"}] + "fields":[{"name":"0bitmap$1638"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1784", - "fields":[{"name":"0bitmap$1635"}] + "fields":[{"name":"0bitmap$1636"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1785", - "fields":[{"name":"0bitmap$1646"}] + "fields":[{"name":"0bitmap$1637"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1786", - "fields":[{"name":"0bitmap$1640"}] + "fields":[{"name":"0bitmap$1641"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1787", @@ -883,207 +851,211 @@ }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1788", - "fields":[{"name":"0bitmap$1638"}] + "fields":[{"name":"0bitmap$1640"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1790", - "fields":[{"name":"0bitmap$1645"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1789", + "fields":[{"name":"0bitmap$1659"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1795", - "fields":[{"name":"0bitmap$1650"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1790", + "fields":[{"name":"0bitmap$1655"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1798", - "fields":[{"name":"0bitmap$1706"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1791", + "fields":[{"name":"0bitmap$1644"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1799", - "fields":[{"name":"0bitmap$1668"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1792", + "fields":[{"name":"0bitmap$1643"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1800", + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1793", "fields":[{"name":"0bitmap$1654"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1801", - "fields":[{"name":"0bitmap$1653"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1794", + "fields":[{"name":"0bitmap$1648"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1803", - "fields":[{"name":"0bitmap$1656"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1795", + "fields":[{"name":"0bitmap$1647"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1805", - "fields":[{"name":"0bitmap$1667"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1796", + "fields":[{"name":"0bitmap$1646"}] +}, +{ + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1798", + "fields":[{"name":"0bitmap$1653"}] +}, +{ + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1803", + "fields":[{"name":"0bitmap$1658"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1806", - "fields":[{"name":"0bitmap$1666"}] + "fields":[{"name":"0bitmap$1714"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1807", - "fields":[{"name":"0bitmap$1660"}] + "fields":[{"name":"0bitmap$1676"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1808", - "fields":[{"name":"0bitmap$1659"}] + "fields":[{"name":"0bitmap$1662"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1809", - "fields":[{"name":"0bitmap$1658"}] + "fields":[{"name":"0bitmap$1661"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1811", - "fields":[{"name":"0bitmap$1665"}] + "fields":[{"name":"0bitmap$1664"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1816", - "fields":[{"name":"0bitmap$1688"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1813", + "fields":[{"name":"0bitmap$1675"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1817", - "fields":[{"name":"0bitmap$1671"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1814", + "fields":[{"name":"0bitmap$1674"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1818", - "fields":[{"name":"0bitmap$1670"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1815", + "fields":[{"name":"0bitmap$1668"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1820", - "fields":[{"name":"0bitmap$1676"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1816", + "fields":[{"name":"0bitmap$1667"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1825", - "fields":[{"name":"0bitmap$1687"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1817", + "fields":[{"name":"0bitmap$1666"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1826", - "fields":[{"name":"0bitmap$1686"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1819", + "fields":[{"name":"0bitmap$1673"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1827", - "fields":[{"name":"0bitmap$1680"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1824", + "fields":[{"name":"0bitmap$1696"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1828", + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1825", "fields":[{"name":"0bitmap$1679"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1829", + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1826", "fields":[{"name":"0bitmap$1678"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1831", - "fields":[{"name":"0bitmap$1685"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1832", + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1828", "fields":[{"name":"0bitmap$1684"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1833", - "fields":[{"name":"0bitmap$1683"}] + "fields":[{"name":"0bitmap$1695"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1836", - "fields":[{"name":"0bitmap$1705"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1834", + "fields":[{"name":"0bitmap$1694"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1837", - "fields":[{"name":"0bitmap$1692"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1835", + "fields":[{"name":"0bitmap$1688"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1838", - "fields":[{"name":"0bitmap$1691"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1836", + "fields":[{"name":"0bitmap$1687"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1841", + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1837", + "fields":[{"name":"0bitmap$1686"}] +}, +{ + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1839", "fields":[{"name":"0bitmap$1693"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1842", - "fields":[{"name":"0bitmap$1704"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1840", + "fields":[{"name":"0bitmap$1692"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1843", - "fields":[{"name":"0bitmap$1703"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1841", + "fields":[{"name":"0bitmap$1691"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1844", - "fields":[{"name":"0bitmap$1697"}] + "fields":[{"name":"0bitmap$1713"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1845", - "fields":[{"name":"0bitmap$1696"}] + "fields":[{"name":"0bitmap$1700"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1846", - "fields":[{"name":"0bitmap$1695"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1848", - "fields":[{"name":"0bitmap$1702"}] + "fields":[{"name":"0bitmap$1699"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1853", - "fields":[{"name":"0bitmap$1727"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1849", + "fields":[{"name":"0bitmap$1701"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1854", - "fields":[{"name":"0bitmap$1716"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1850", + "fields":[{"name":"0bitmap$1712"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1865", - "fields":[{"name":"0bitmap$1717"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1851", + "fields":[{"name":"0bitmap$1711"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1866", - "fields":[{"name":"0bitmap$1721"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1852", + "fields":[{"name":"0bitmap$1705"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1867", - "fields":[{"name":"0bitmap$1720"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1853", + "fields":[{"name":"0bitmap$1704"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1868", - "fields":[{"name":"0bitmap$1718"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1854", + "fields":[{"name":"0bitmap$1703"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1869", - "fields":[{"name":"0bitmap$1719"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1856", + "fields":[{"name":"0bitmap$1710"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1871", - "fields":[{"name":"0bitmap$1722"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1861", + "fields":[{"name":"0bitmap$1735"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1872", - "fields":[{"name":"0bitmap$1723"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1862", + "fields":[{"name":"0bitmap$1724"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1873", - "fields":[{"name":"0bitmap$1726"}] + "fields":[{"name":"0bitmap$1725"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1876", - "fields":[{"name":"0bitmap$1730"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1874", + "fields":[{"name":"0bitmap$1729"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1877", + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1875", "fields":[{"name":"0bitmap$1728"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1878", - "fields":[{"name":"0bitmap$1729"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1876", + "fields":[{"name":"0bitmap$1726"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1879", - "fields":[{"name":"0bitmap$1733"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1877", + "fields":[{"name":"0bitmap$1727"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$188", - "fields":[{"name":"0bitmap$179"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1879", + "fields":[{"name":"0bitmap$1730"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1880", @@ -1091,87 +1063,87 @@ }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1881", - "fields":[{"name":"0bitmap$1732"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1882", - "fields":[{"name":"0bitmap$1741"}] + "fields":[{"name":"0bitmap$1734"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$189", - "fields":[{"name":"0bitmap$173"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1891", - "fields":[{"name":"0bitmap$1742"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1884", + "fields":[{"name":"0bitmap$1738"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1892", - "fields":[{"name":"0bitmap$1751"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1885", + "fields":[{"name":"0bitmap$1736"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$190", - "fields":[{"name":"0bitmap$169"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1886", + "fields":[{"name":"0bitmap$1737"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1902", - "fields":[{"name":"0bitmap$1754"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1887", + "fields":[{"name":"0bitmap$1741"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1903", - "fields":[{"name":"0bitmap$1752"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1888", + "fields":[{"name":"0bitmap$1739"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1904", - "fields":[{"name":"0bitmap$1753"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1889", + "fields":[{"name":"0bitmap$1740"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1905", - "fields":[{"name":"0bitmap$1757"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1890", + "fields":[{"name":"0bitmap$1749"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1906", - "fields":[{"name":"0bitmap$1756"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1899", + "fields":[{"name":"0bitmap$1750"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1908", - "fields":[{"name":"0bitmap$1769"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$190", + "fields":[{"name":"0bitmap$181"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1909", - "fields":[{"name":"0bitmap$1768"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1900", + "fields":[{"name":"0bitmap$1759"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$191", - "fields":[{"name":"0bitmap$170"}] + "fields":[{"name":"0bitmap$175"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1910", - "fields":[{"name":"0bitmap$1767"}] + "fields":[{"name":"0bitmap$1762"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1911", - "fields":[{"name":"0bitmap$1761"}] + "fields":[{"name":"0bitmap$1760"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1912", - "fields":[{"name":"0bitmap$1760"}] + "fields":[{"name":"0bitmap$1761"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1913", - "fields":[{"name":"0bitmap$1759"}] + "fields":[{"name":"0bitmap$1765"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1915", - "fields":[{"name":"0bitmap$1766"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1914", + "fields":[{"name":"0bitmap$1764"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1916", - "fields":[{"name":"0bitmap$1765"}] + "fields":[{"name":"0bitmap$1777"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1917", - "fields":[{"name":"0bitmap$1764"}] + "fields":[{"name":"0bitmap$1776"}] +}, +{ + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1918", + "fields":[{"name":"0bitmap$1775"}] +}, +{ + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1919", + "fields":[{"name":"0bitmap$1769"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$192", @@ -1179,91 +1151,111 @@ }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1920", - "fields":[{"name":"0bitmap$1781"}] + "fields":[{"name":"0bitmap$1768"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1921", - "fields":[{"name":"0bitmap$1780"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1922", - "fields":[{"name":"0bitmap$1779"}] + "fields":[{"name":"0bitmap$1767"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1923", - "fields":[{"name":"0bitmap$1773"}] + "fields":[{"name":"0bitmap$1774"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1924", - "fields":[{"name":"0bitmap$1772"}] + "fields":[{"name":"0bitmap$1773"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1925", - "fields":[{"name":"0bitmap$1771"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1927", - "fields":[{"name":"0bitmap$1778"}] + "fields":[{"name":"0bitmap$1772"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1928", - "fields":[{"name":"0bitmap$1777"}] + "fields":[{"name":"0bitmap$1789"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1929", - "fields":[{"name":"0bitmap$1776"}] + "fields":[{"name":"0bitmap$1788"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$193", "fields":[{"name":"0bitmap$172"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$195", - "fields":[{"name":"0bitmap$178"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1930", + "fields":[{"name":"0bitmap$1787"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$2", - "fields":[{"name":"0bitmap$2"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1931", + "fields":[{"name":"0bitmap$1781"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$200", - "fields":[{"name":"0bitmap$182"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1932", + "fields":[{"name":"0bitmap$1780"}] +}, +{ + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1933", + "fields":[{"name":"0bitmap$1779"}] +}, +{ + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1935", + "fields":[{"name":"0bitmap$1786"}] +}, +{ + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1936", + "fields":[{"name":"0bitmap$1785"}] +}, +{ + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$1937", + "fields":[{"name":"0bitmap$1784"}] +}, +{ + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$194", + "fields":[{"name":"0bitmap$173"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$201", + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$195", + "fields":[{"name":"0bitmap$174"}] +}, +{ + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$197", "fields":[{"name":"0bitmap$180"}] }, +{ + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$2", + "fields":[{"name":"0bitmap$2"}] +}, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$202", - "fields":[{"name":"0bitmap$181"}] + "fields":[{"name":"0bitmap$184"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$203", - "fields":[{"name":"0bitmap$249"}] + "fields":[{"name":"0bitmap$182"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$204", - "fields":[{"name":"0bitmap$219"}] + "fields":[{"name":"0bitmap$183"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$243", - "fields":[{"name":"0bitmap$243"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$205", + "fields":[{"name":"0bitmap$251"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$244", - "fields":[{"name":"0bitmap$223"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$206", + "fields":[{"name":"0bitmap$221"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$249", - "fields":[{"name":"0bitmap$237"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$245", + "fields":[{"name":"0bitmap$245"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$250", - "fields":[{"name":"0bitmap$224"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$246", + "fields":[{"name":"0bitmap$225"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$251", - "fields":[{"name":"0bitmap$225"}] + "fields":[{"name":"0bitmap$239"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$252", @@ -1310,72 +1302,72 @@ "fields":[{"name":"0bitmap$236"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$264", - "fields":[{"name":"0bitmap$242"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$263", + "fields":[{"name":"0bitmap$237"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$269", - "fields":[{"name":"0bitmap$248"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$264", + "fields":[{"name":"0bitmap$238"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$274", - "fields":[{"name":"0bitmap$265"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$266", + "fields":[{"name":"0bitmap$244"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$291", - "fields":[{"name":"0bitmap$296"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$271", + "fields":[{"name":"0bitmap$250"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$292", - "fields":[{"name":"0bitmap$278"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$276", + "fields":[{"name":"0bitmap$267"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$307", - "fields":[{"name":"0bitmap$281"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$293", + "fields":[{"name":"0bitmap$298"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$308", - "fields":[{"name":"0bitmap$279"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$294", + "fields":[{"name":"0bitmap$280"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$309", - "fields":[{"name":"0bitmap$280"}] + "fields":[{"name":"0bitmap$283"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$311", - "fields":[{"name":"0bitmap$295"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$310", + "fields":[{"name":"0bitmap$281"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$327", - "fields":[{"name":"0bitmap$297"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$311", + "fields":[{"name":"0bitmap$282"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$328", - "fields":[{"name":"0bitmap$312"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$313", + "fields":[{"name":"0bitmap$297"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$329", - "fields":[{"name":"0bitmap$303"}] + "fields":[{"name":"0bitmap$299"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$335", - "fields":[{"name":"0bitmap$306"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$330", + "fields":[{"name":"0bitmap$314"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$336", + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$331", "fields":[{"name":"0bitmap$305"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$338", - "fields":[{"name":"0bitmap$311"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$337", + "fields":[{"name":"0bitmap$308"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$339", + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$338", "fields":[{"name":"0bitmap$307"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$340", - "fields":[{"name":"0bitmap$308"}] + "fields":[{"name":"0bitmap$313"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$341", @@ -1387,63 +1379,55 @@ }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$343", - "fields":[{"name":"0bitmap$416"}] + "fields":[{"name":"0bitmap$311"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$4", - "fields":[{"name":"0bitmap$3"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$344", + "fields":[{"name":"0bitmap$312"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$455", - "fields":[{"name":"0bitmap$419"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$345", + "fields":[{"name":"0bitmap$418"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$457", - "fields":[{"name":"0bitmap$549"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$4", + "fields":[{"name":"0bitmap$3"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$5", - "fields":[{"name":"0bitmap$417"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$457", + "fields":[{"name":"0bitmap$421"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$598", - "fields":[{"name":"0bitmap$563"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$459", + "fields":[{"name":"0bitmap$553"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$599", - "fields":[{"name":"0bitmap$562"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$5", + "fields":[{"name":"0bitmap$419"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$6", - "fields":[{"name":"0bitmap$132"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$600", - "fields":[{"name":"0bitmap$551"}] + "fields":[{"name":"0bitmap$134"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$602", - "fields":[{"name":"0bitmap$561"}] + "fields":[{"name":"0bitmap$567"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$603", - "fields":[{"name":"0bitmap$560"}] + "fields":[{"name":"0bitmap$566"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$604", - "fields":[{"name":"0bitmap$552"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$605", - "fields":[{"name":"0bitmap$553"}] + "fields":[{"name":"0bitmap$555"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$606", - "fields":[{"name":"0bitmap$554"}] + "fields":[{"name":"0bitmap$565"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$607", - "fields":[{"name":"0bitmap$555"}] + "fields":[{"name":"0bitmap$564"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$608", @@ -1461,97 +1445,97 @@ "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$611", "fields":[{"name":"0bitmap$559"}] }, +{ + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$612", + "fields":[{"name":"0bitmap$560"}] +}, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$613", - "fields":[{"name":"0bitmap$698"}] + "fields":[{"name":"0bitmap$561"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$614", - "fields":[{"name":"0bitmap$697"}] + "fields":[{"name":"0bitmap$562"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$615", - "fields":[{"name":"0bitmap$614"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$616", - "fields":[{"name":"0bitmap$599"}] + "fields":[{"name":"0bitmap$563"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$655", - "fields":[{"name":"0bitmap$610"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$617", + "fields":[{"name":"0bitmap$702"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$656", - "fields":[{"name":"0bitmap$604"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$618", + "fields":[{"name":"0bitmap$701"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$657", - "fields":[{"name":"0bitmap$600"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$619", + "fields":[{"name":"0bitmap$618"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$658", - "fields":[{"name":"0bitmap$601"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$620", + "fields":[{"name":"0bitmap$603"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$659", - "fields":[{"name":"0bitmap$602"}] + "fields":[{"name":"0bitmap$614"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$660", - "fields":[{"name":"0bitmap$603"}] + "fields":[{"name":"0bitmap$608"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$662", - "fields":[{"name":"0bitmap$609"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$661", + "fields":[{"name":"0bitmap$604"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$667", - "fields":[{"name":"0bitmap$613"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$662", + "fields":[{"name":"0bitmap$605"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$668", - "fields":[{"name":"0bitmap$611"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$663", + "fields":[{"name":"0bitmap$606"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$669", - "fields":[{"name":"0bitmap$612"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$664", + "fields":[{"name":"0bitmap$607"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$670", - "fields":[{"name":"0bitmap$680"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$666", + "fields":[{"name":"0bitmap$613"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$671", - "fields":[{"name":"0bitmap$650"}] + "fields":[{"name":"0bitmap$617"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$710", - "fields":[{"name":"0bitmap$674"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$672", + "fields":[{"name":"0bitmap$615"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$711", - "fields":[{"name":"0bitmap$654"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$673", + "fields":[{"name":"0bitmap$616"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$716", - "fields":[{"name":"0bitmap$668"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$674", + "fields":[{"name":"0bitmap$684"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$717", - "fields":[{"name":"0bitmap$655"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$675", + "fields":[{"name":"0bitmap$654"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$718", - "fields":[{"name":"0bitmap$656"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$714", + "fields":[{"name":"0bitmap$678"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$719", - "fields":[{"name":"0bitmap$657"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$715", + "fields":[{"name":"0bitmap$658"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$720", - "fields":[{"name":"0bitmap$658"}] + "fields":[{"name":"0bitmap$672"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$721", @@ -1590,48 +1574,48 @@ "fields":[{"name":"0bitmap$667"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$731", - "fields":[{"name":"0bitmap$673"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$730", + "fields":[{"name":"0bitmap$668"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$736", - "fields":[{"name":"0bitmap$679"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$731", + "fields":[{"name":"0bitmap$669"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$741", - "fields":[{"name":"0bitmap$696"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$732", + "fields":[{"name":"0bitmap$670"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$758", - "fields":[{"name":"0bitmap$796"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$733", + "fields":[{"name":"0bitmap$671"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$759", - "fields":[{"name":"0bitmap$710"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$735", + "fields":[{"name":"0bitmap$677"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$760", - "fields":[{"name":"0bitmap$708"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$740", + "fields":[{"name":"0bitmap$683"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$761", - "fields":[{"name":"0bitmap$707"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$745", + "fields":[{"name":"0bitmap$700"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$762", - "fields":[{"name":"0bitmap$699"}] + "fields":[{"name":"0bitmap$802"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$763", - "fields":[{"name":"0bitmap$700"}] + "fields":[{"name":"0bitmap$714"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$764", - "fields":[{"name":"0bitmap$701"}] + "fields":[{"name":"0bitmap$712"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$765", - "fields":[{"name":"0bitmap$702"}] + "fields":[{"name":"0bitmap$711"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$766", @@ -1649,137 +1633,133 @@ "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$769", "fields":[{"name":"0bitmap$706"}] }, +{ + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$770", + "fields":[{"name":"0bitmap$707"}] +}, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$771", + "fields":[{"name":"0bitmap$708"}] +}, +{ + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$772", "fields":[{"name":"0bitmap$709"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$773", - "fields":[{"name":"0bitmap$726"}] + "fields":[{"name":"0bitmap$710"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$774", - "fields":[{"name":"0bitmap$720"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$775", + "fields":[{"name":"0bitmap$713"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$785", - "fields":[{"name":"0bitmap$724"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$777", + "fields":[{"name":"0bitmap$730"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$786", - "fields":[{"name":"0bitmap$723"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$778", + "fields":[{"name":"0bitmap$724"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$787", - "fields":[{"name":"0bitmap$721"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$789", + "fields":[{"name":"0bitmap$728"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$788", - "fields":[{"name":"0bitmap$722"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$790", + "fields":[{"name":"0bitmap$727"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$790", + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$791", "fields":[{"name":"0bitmap$725"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$792", - "fields":[{"name":"0bitmap$736"}] + "fields":[{"name":"0bitmap$726"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$803", - "fields":[{"name":"0bitmap$740"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$794", + "fields":[{"name":"0bitmap$729"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$808", - "fields":[{"name":"0bitmap$741"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$796", + "fields":[{"name":"0bitmap$740"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$809", - "fields":[{"name":"0bitmap$742"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$810", - "fields":[{"name":"0bitmap$743"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$811", - "fields":[{"name":"0bitmap$745"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$807", + "fields":[{"name":"0bitmap$744"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$812", - "fields":[{"name":"0bitmap$744"}] + "fields":[{"name":"0bitmap$745"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$813", - "fields":[{"name":"0bitmap$762"}] + "fields":[{"name":"0bitmap$746"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$814", - "fields":[{"name":"0bitmap$746"}] + "fields":[{"name":"0bitmap$747"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$815", - "fields":[{"name":"0bitmap$747"}] + "fields":[{"name":"0bitmap$749"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$816", - "fields":[{"name":"0bitmap$761"}] + "fields":[{"name":"0bitmap$748"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$817", - "fields":[{"name":"0bitmap$760"}] + "fields":[{"name":"0bitmap$751"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$818", - "fields":[{"name":"0bitmap$748"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$819", + "fields":[{"name":"0bitmap$768"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$819", - "fields":[{"name":"0bitmap$754"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$820", + "fields":[{"name":"0bitmap$752"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$826", - "fields":[{"name":"0bitmap$759"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$821", + "fields":[{"name":"0bitmap$753"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$832", - "fields":[{"name":"0bitmap$775"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$822", + "fields":[{"name":"0bitmap$767"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$833", - "fields":[{"name":"0bitmap$764"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$823", + "fields":[{"name":"0bitmap$766"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$835", - "fields":[{"name":"0bitmap$774"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$824", + "fields":[{"name":"0bitmap$754"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$836", - "fields":[{"name":"0bitmap$773"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$825", + "fields":[{"name":"0bitmap$760"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$837", + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$832", "fields":[{"name":"0bitmap$765"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$838", - "fields":[{"name":"0bitmap$766"}] + "fields":[{"name":"0bitmap$781"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$839", - "fields":[{"name":"0bitmap$767"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$840", - "fields":[{"name":"0bitmap$768"}] + "fields":[{"name":"0bitmap$770"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$841", - "fields":[{"name":"0bitmap$769"}] + "fields":[{"name":"0bitmap$780"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$842", - "fields":[{"name":"0bitmap$770"}] + "fields":[{"name":"0bitmap$779"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$843", @@ -1789,69 +1769,73 @@ "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$844", "fields":[{"name":"0bitmap$772"}] }, +{ + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$845", + "fields":[{"name":"0bitmap$773"}] +}, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$846", - "fields":[{"name":"0bitmap$793"}] + "fields":[{"name":"0bitmap$774"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$847", - "fields":[{"name":"0bitmap$777"}] + "fields":[{"name":"0bitmap$775"}] +}, +{ + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$848", + "fields":[{"name":"0bitmap$776"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$849", - "fields":[{"name":"0bitmap$778"}] + "fields":[{"name":"0bitmap$777"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$850", - "fields":[{"name":"0bitmap$792"}] + "fields":[{"name":"0bitmap$778"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$866", - "fields":[{"name":"0bitmap$794"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$852", + "fields":[{"name":"0bitmap$799"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$867", - "fields":[{"name":"0bitmap$795"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$853", + "fields":[{"name":"0bitmap$783"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$868", - "fields":[{"name":"0bitmap$818"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$855", + "fields":[{"name":"0bitmap$784"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$869", - "fields":[{"name":"0bitmap$817"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$856", + "fields":[{"name":"0bitmap$798"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$870", - "fields":[{"name":"0bitmap$806"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$872", + "fields":[{"name":"0bitmap$800"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$881", - "fields":[{"name":"0bitmap$807"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$873", + "fields":[{"name":"0bitmap$801"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$882", - "fields":[{"name":"0bitmap$811"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$883", - "fields":[{"name":"0bitmap$810"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$874", + "fields":[{"name":"0bitmap$824"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$884", - "fields":[{"name":"0bitmap$808"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$875", + "fields":[{"name":"0bitmap$823"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$885", - "fields":[{"name":"0bitmap$809"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$876", + "fields":[{"name":"0bitmap$812"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$887", - "fields":[{"name":"0bitmap$812"}] + "fields":[{"name":"0bitmap$813"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$888", - "fields":[{"name":"0bitmap$813"}] + "fields":[{"name":"0bitmap$817"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$889", @@ -1859,31 +1843,27 @@ }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$890", - "fields":[{"name":"0bitmap$815"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$891", "fields":[{"name":"0bitmap$814"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$892", - "fields":[{"name":"0bitmap$840"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$891", + "fields":[{"name":"0bitmap$815"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$893", - "fields":[{"name":"0bitmap$839"}] + "fields":[{"name":"0bitmap$818"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$894", - "fields":[{"name":"0bitmap$828"}] + "fields":[{"name":"0bitmap$819"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$895", - "fields":[{"name":"0bitmap$827"}] + "fields":[{"name":"0bitmap$822"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$896", - "fields":[{"name":"0bitmap$819"}] + "fields":[{"name":"0bitmap$821"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$897", @@ -1891,19 +1871,19 @@ }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$898", - "fields":[{"name":"0bitmap$821"}] + "fields":[{"name":"0bitmap$846"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$899", - "fields":[{"name":"0bitmap$822"}] + "fields":[{"name":"0bitmap$845"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$900", - "fields":[{"name":"0bitmap$823"}] + "fields":[{"name":"0bitmap$834"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$901", - "fields":[{"name":"0bitmap$824"}] + "fields":[{"name":"0bitmap$833"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$902", @@ -1913,33 +1893,41 @@ "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$903", "fields":[{"name":"0bitmap$826"}] }, +{ + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$904", + "fields":[{"name":"0bitmap$827"}] +}, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$905", - "fields":[{"name":"0bitmap$829"}] + "fields":[{"name":"0bitmap$828"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$906", - "fields":[{"name":"0bitmap$833"}] + "fields":[{"name":"0bitmap$829"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$911", - "fields":[{"name":"0bitmap$834"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$907", + "fields":[{"name":"0bitmap$830"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$912", - "fields":[{"name":"0bitmap$835"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$908", + "fields":[{"name":"0bitmap$831"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$913", - "fields":[{"name":"0bitmap$838"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$909", + "fields":[{"name":"0bitmap$832"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$916", - "fields":[{"name":"0bitmap$858"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$911", + "fields":[{"name":"0bitmap$835"}] +}, +{ + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$912", + "fields":[{"name":"0bitmap$839"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$917", - "fields":[{"name":"0bitmap$857"}] + "fields":[{"name":"0bitmap$840"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$918", @@ -1947,107 +1935,123 @@ }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$919", - "fields":[{"name":"0bitmap$842"}] + "fields":[{"name":"0bitmap$844"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$920", - "fields":[{"name":"0bitmap$856"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$922", + "fields":[{"name":"0bitmap$864"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$936", - "fields":[{"name":"0bitmap$877"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$923", + "fields":[{"name":"0bitmap$863"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$937", - "fields":[{"name":"0bitmap$876"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$924", + "fields":[{"name":"0bitmap$847"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$938", - "fields":[{"name":"0bitmap$860"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$925", + "fields":[{"name":"0bitmap$848"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$940", - "fields":[{"name":"0bitmap$861"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$926", + "fields":[{"name":"0bitmap$862"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$941", - "fields":[{"name":"0bitmap$875"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$942", + "fields":[{"name":"0bitmap$883"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$957", - "fields":[{"name":"0bitmap$907"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$943", + "fields":[{"name":"0bitmap$882"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$958", - "fields":[{"name":"0bitmap$901"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$959", - "fields":[{"name":"0bitmap$891"}] -}, -{ - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$975", - "fields":[{"name":"0bitmap$900"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$944", + "fields":[{"name":"0bitmap$866"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$976", - "fields":[{"name":"0bitmap$897"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$946", + "fields":[{"name":"0bitmap$867"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$977", - "fields":[{"name":"0bitmap$896"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$947", + "fields":[{"name":"0bitmap$881"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$978", - "fields":[{"name":"0bitmap$892"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$963", + "fields":[{"name":"0bitmap$913"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$979", - "fields":[{"name":"0bitmap$893"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$964", + "fields":[{"name":"0bitmap$907"}] }, { - "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$980", - "fields":[{"name":"0bitmap$894"}] + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$965", + "fields":[{"name":"0bitmap$897"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$981", - "fields":[{"name":"0bitmap$895"}] + "fields":[{"name":"0bitmap$906"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$982", - "fields":[{"name":"0bitmap$898"}] + "fields":[{"name":"0bitmap$903"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$983", - "fields":[{"name":"0bitmap$899"}] + "fields":[{"name":"0bitmap$902"}] +}, +{ + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$984", + "fields":[{"name":"0bitmap$898"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$985", - "fields":[{"name":"0bitmap$906"}] + "fields":[{"name":"0bitmap$899"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$986", - "fields":[{"name":"0bitmap$902"}] + "fields":[{"name":"0bitmap$900"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$987", - "fields":[{"name":"0bitmap$905"}] + "fields":[{"name":"0bitmap$901"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$988", - "fields":[{"name":"0bitmap$903"}] + "fields":[{"name":"0bitmap$904"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$989", - "fields":[{"name":"0bitmap$904"}] + "fields":[{"name":"0bitmap$905"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$991", - "fields":[{"name":"0bitmap$1321"}] + "fields":[{"name":"0bitmap$912"}] }, { "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$992", - "fields":[{"name":"0bitmap$1036"}] + "fields":[{"name":"0bitmap$908"}] +}, +{ + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$993", + "fields":[{"name":"0bitmap$911"}] +}, +{ + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$994", + "fields":[{"name":"0bitmap$909"}] +}, +{ + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$995", + "fields":[{"name":"0bitmap$910"}] +}, +{ + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$997", + "fields":[{"name":"0bitmap$1329"}] +}, +{ + "name":"fpp.compiler.codegen.AnalysisJsonEncoder$$anon$998", + "fields":[{"name":"0bitmap$1044"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$1", @@ -2059,27 +2063,27 @@ }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$100", - "fields":[{"name":"0bitmap$93"}] + "fields":[{"name":"0bitmap$92"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$101", - "fields":[{"name":"0bitmap$97"}] + "fields":[{"name":"0bitmap$96"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$102", - "fields":[{"name":"0bitmap$96"}] + "fields":[{"name":"0bitmap$95"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$103", - "fields":[{"name":"0bitmap$95"}] + "fields":[{"name":"0bitmap$99"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$104", - "fields":[{"name":"0bitmap$99"}] + "fields":[{"name":"0bitmap$98"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$105", - "fields":[{"name":"0bitmap$98"}] + "fields":[{"name":"0bitmap$97"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$106", @@ -2091,11 +2095,11 @@ }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$108", - "fields":[{"name":"0bitmap$107"}] + "fields":[{"name":"0bitmap$103"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$109", - "fields":[{"name":"0bitmap$106"}] + "fields":[{"name":"0bitmap$102"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$11", @@ -2103,59 +2107,59 @@ }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$110", - "fields":[{"name":"0bitmap$105"}] + "fields":[{"name":"0bitmap$109"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$111", - "fields":[{"name":"0bitmap$103"}] + "fields":[{"name":"0bitmap$108"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$112", - "fields":[{"name":"0bitmap$102"}] + "fields":[{"name":"0bitmap$107"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$113", - "fields":[{"name":"0bitmap$104"}] + "fields":[{"name":"0bitmap$105"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$115", - "fields":[{"name":"0bitmap$126"}] + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$114", + "fields":[{"name":"0bitmap$104"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$116", - "fields":[{"name":"0bitmap$112"}] + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$115", + "fields":[{"name":"0bitmap$106"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$117", - "fields":[{"name":"0bitmap$111"}] + "fields":[{"name":"0bitmap$128"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$118", - "fields":[{"name":"0bitmap$109"}] + "fields":[{"name":"0bitmap$114"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$119", - "fields":[{"name":"0bitmap$110"}] + "fields":[{"name":"0bitmap$113"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$12", "fields":[{"name":"0bitmap$12"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$121", - "fields":[{"name":"0bitmap$122"}] + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$120", + "fields":[{"name":"0bitmap$111"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$122", - "fields":[{"name":"0bitmap$121"}] + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$121", + "fields":[{"name":"0bitmap$112"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$123", - "fields":[{"name":"0bitmap$113"}] + "fields":[{"name":"0bitmap$124"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$124", - "fields":[{"name":"0bitmap$114"}] + "fields":[{"name":"0bitmap$123"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$125", @@ -2186,24 +2190,28 @@ "fields":[{"name":"0bitmap$120"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$132", - "fields":[{"name":"0bitmap$123"}] + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$131", + "fields":[{"name":"0bitmap$121"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$133", - "fields":[{"name":"0bitmap$124"}] + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$132", + "fields":[{"name":"0bitmap$122"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$134", "fields":[{"name":"0bitmap$125"}] }, +{ + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$135", + "fields":[{"name":"0bitmap$126"}] +}, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$136", - "fields":[{"name":"0bitmap$248"}] + "fields":[{"name":"0bitmap$127"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$137", - "fields":[{"name":"0bitmap$128"}] + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$138", + "fields":[{"name":"0bitmap$252"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$139", @@ -2219,63 +2227,59 @@ }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$143", - "fields":[{"name":"0bitmap$135"}] -}, -{ - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$144", "fields":[{"name":"0bitmap$134"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$145", - "fields":[{"name":"0bitmap$133"}] -}, -{ - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$146", - "fields":[{"name":"0bitmap$137"}] + "fields":[{"name":"0bitmap$136"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$147", - "fields":[{"name":"0bitmap$136"}] + "fields":[{"name":"0bitmap$139"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$148", - "fields":[{"name":"0bitmap$140"}] + "fields":[{"name":"0bitmap$138"}] +}, +{ + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$149", + "fields":[{"name":"0bitmap$137"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$15", "fields":[{"name":"0bitmap$14"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$151", - "fields":[{"name":"0bitmap$155"}] + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$150", + "fields":[{"name":"0bitmap$141"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$152", - "fields":[{"name":"0bitmap$154"}] + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$151", + "fields":[{"name":"0bitmap$140"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$153", + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$152", "fields":[{"name":"0bitmap$144"}] }, -{ - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$154", - "fields":[{"name":"0bitmap$141"}] -}, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$155", - "fields":[{"name":"0bitmap$142"}] + "fields":[{"name":"0bitmap$159"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$156", - "fields":[{"name":"0bitmap$143"}] + "fields":[{"name":"0bitmap$158"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$158", + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$157", "fields":[{"name":"0bitmap$148"}] }, +{ + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$158", + "fields":[{"name":"0bitmap$145"}] +}, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$159", - "fields":[{"name":"0bitmap$147"}] + "fields":[{"name":"0bitmap$146"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$16", @@ -2283,15 +2287,15 @@ }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$160", - "fields":[{"name":"0bitmap$145"}] + "fields":[{"name":"0bitmap$147"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$161", - "fields":[{"name":"0bitmap$146"}] + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$162", + "fields":[{"name":"0bitmap$152"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$163", - "fields":[{"name":"0bitmap$153"}] + "fields":[{"name":"0bitmap$151"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$164", @@ -2301,17 +2305,17 @@ "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$165", "fields":[{"name":"0bitmap$150"}] }, -{ - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$166", - "fields":[{"name":"0bitmap$151"}] -}, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$167", - "fields":[{"name":"0bitmap$152"}] + "fields":[{"name":"0bitmap$157"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$168", - "fields":[{"name":"0bitmap$157"}] + "fields":[{"name":"0bitmap$153"}] +}, +{ + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$169", + "fields":[{"name":"0bitmap$154"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$17", @@ -2319,31 +2323,31 @@ }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$170", - "fields":[{"name":"0bitmap$171"}] + "fields":[{"name":"0bitmap$155"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$171", - "fields":[{"name":"0bitmap$170"}] + "fields":[{"name":"0bitmap$156"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$172", "fields":[{"name":"0bitmap$161"}] }, -{ - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$173", - "fields":[{"name":"0bitmap$160"}] -}, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$174", - "fields":[{"name":"0bitmap$158"}] + "fields":[{"name":"0bitmap$175"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$175", - "fields":[{"name":"0bitmap$159"}] + "fields":[{"name":"0bitmap$174"}] +}, +{ + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$176", + "fields":[{"name":"0bitmap$165"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$177", - "fields":[{"name":"0bitmap$169"}] + "fields":[{"name":"0bitmap$164"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$178", @@ -2357,13 +2361,9 @@ "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$18", "fields":[{"name":"0bitmap$17"}] }, -{ - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$180", - "fields":[{"name":"0bitmap$164"}] -}, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$181", - "fields":[{"name":"0bitmap$165"}] + "fields":[{"name":"0bitmap$173"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$182", @@ -2377,17 +2377,21 @@ "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$184", "fields":[{"name":"0bitmap$168"}] }, +{ + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$185", + "fields":[{"name":"0bitmap$169"}] +}, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$186", - "fields":[{"name":"0bitmap$173"}] + "fields":[{"name":"0bitmap$170"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$188", - "fields":[{"name":"0bitmap$184"}] + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$187", + "fields":[{"name":"0bitmap$171"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$189", - "fields":[{"name":"0bitmap$183"}] + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$188", + "fields":[{"name":"0bitmap$172"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$19", @@ -2397,21 +2401,21 @@ "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$190", "fields":[{"name":"0bitmap$177"}] }, -{ - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$191", - "fields":[{"name":"0bitmap$176"}] -}, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$192", - "fields":[{"name":"0bitmap$174"}] + "fields":[{"name":"0bitmap$188"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$193", - "fields":[{"name":"0bitmap$175"}] + "fields":[{"name":"0bitmap$187"}] +}, +{ + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$194", + "fields":[{"name":"0bitmap$181"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$195", - "fields":[{"name":"0bitmap$182"}] + "fields":[{"name":"0bitmap$180"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$196", @@ -2421,13 +2425,9 @@ "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$197", "fields":[{"name":"0bitmap$179"}] }, -{ - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$198", - "fields":[{"name":"0bitmap$180"}] -}, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$199", - "fields":[{"name":"0bitmap$181"}] + "fields":[{"name":"0bitmap$186"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$2", @@ -2439,99 +2439,99 @@ }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$200", - "fields":[{"name":"0bitmap$186"}] + "fields":[{"name":"0bitmap$182"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$201", - "fields":[{"name":"0bitmap$185"}] + "fields":[{"name":"0bitmap$183"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$202", - "fields":[{"name":"0bitmap$223"}] + "fields":[{"name":"0bitmap$184"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$203", - "fields":[{"name":"0bitmap$222"}] + "fields":[{"name":"0bitmap$185"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$204", - "fields":[{"name":"0bitmap$197"}] + "fields":[{"name":"0bitmap$190"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$205", - "fields":[{"name":"0bitmap$191"}] + "fields":[{"name":"0bitmap$189"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$206", - "fields":[{"name":"0bitmap$187"}] + "fields":[{"name":"0bitmap$227"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$207", - "fields":[{"name":"0bitmap$188"}] + "fields":[{"name":"0bitmap$226"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$208", - "fields":[{"name":"0bitmap$189"}] + "fields":[{"name":"0bitmap$201"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$209", - "fields":[{"name":"0bitmap$190"}] + "fields":[{"name":"0bitmap$195"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$21", "fields":[{"name":"0bitmap$22"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$211", - "fields":[{"name":"0bitmap$196"}] + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$210", + "fields":[{"name":"0bitmap$191"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$212", + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$211", "fields":[{"name":"0bitmap$192"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$213", + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$212", "fields":[{"name":"0bitmap$193"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$214", + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$213", "fields":[{"name":"0bitmap$194"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$215", - "fields":[{"name":"0bitmap$195"}] + "fields":[{"name":"0bitmap$200"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$216", - "fields":[{"name":"0bitmap$221"}] + "fields":[{"name":"0bitmap$196"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$217", - "fields":[{"name":"0bitmap$201"}] + "fields":[{"name":"0bitmap$197"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$22", - "fields":[{"name":"0bitmap$21"}] + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$218", + "fields":[{"name":"0bitmap$198"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$222", - "fields":[{"name":"0bitmap$215"}] + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$219", + "fields":[{"name":"0bitmap$199"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$223", - "fields":[{"name":"0bitmap$202"}] + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$22", + "fields":[{"name":"0bitmap$21"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$224", - "fields":[{"name":"0bitmap$203"}] + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$220", + "fields":[{"name":"0bitmap$225"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$225", - "fields":[{"name":"0bitmap$204"}] + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$221", + "fields":[{"name":"0bitmap$205"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$226", - "fields":[{"name":"0bitmap$205"}] + "fields":[{"name":"0bitmap$219"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$227", @@ -2573,57 +2573,61 @@ "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$235", "fields":[{"name":"0bitmap$214"}] }, +{ + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$236", + "fields":[{"name":"0bitmap$215"}] +}, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$237", - "fields":[{"name":"0bitmap$220"}] + "fields":[{"name":"0bitmap$216"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$242", - "fields":[{"name":"0bitmap$225"}] + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$238", + "fields":[{"name":"0bitmap$217"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$243", - "fields":[{"name":"0bitmap$224"}] + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$239", + "fields":[{"name":"0bitmap$218"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$244", - "fields":[{"name":"0bitmap$227"}] + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$241", + "fields":[{"name":"0bitmap$224"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$246", - "fields":[{"name":"0bitmap$234"}] + "fields":[{"name":"0bitmap$229"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$247", - "fields":[{"name":"0bitmap$233"}] + "fields":[{"name":"0bitmap$228"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$248", - "fields":[{"name":"0bitmap$232"}] + "fields":[{"name":"0bitmap$231"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$25", - "fields":[{"name":"0bitmap$69"}] -}, -{ - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$253", - "fields":[{"name":"0bitmap$247"}] + "fields":[{"name":"0bitmap$71"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$254", - "fields":[{"name":"0bitmap$246"}] + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$250", + "fields":[{"name":"0bitmap$238"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$255", + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$251", "fields":[{"name":"0bitmap$237"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$256", - "fields":[{"name":"0bitmap$235"}] + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$252", + "fields":[{"name":"0bitmap$236"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$257", - "fields":[{"name":"0bitmap$236"}] + "fields":[{"name":"0bitmap$251"}] +}, +{ + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$258", + "fields":[{"name":"0bitmap$250"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$259", @@ -2635,75 +2639,71 @@ }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$260", - "fields":[{"name":"0bitmap$238"}] -}, -{ - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$261", "fields":[{"name":"0bitmap$239"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$262", + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$261", "fields":[{"name":"0bitmap$240"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$264", + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$263", "fields":[{"name":"0bitmap$245"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$265", + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$264", "fields":[{"name":"0bitmap$242"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$266", + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$265", "fields":[{"name":"0bitmap$243"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$267", + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$266", "fields":[{"name":"0bitmap$244"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$27", - "fields":[{"name":"0bitmap$24"}] + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$268", + "fields":[{"name":"0bitmap$249"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$270", - "fields":[{"name":"0bitmap$287"}] + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$269", + "fields":[{"name":"0bitmap$246"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$271", - "fields":[{"name":"0bitmap$253"}] + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$27", + "fields":[{"name":"0bitmap$24"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$272", - "fields":[{"name":"0bitmap$252"}] + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$270", + "fields":[{"name":"0bitmap$247"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$273", - "fields":[{"name":"0bitmap$251"}] + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$271", + "fields":[{"name":"0bitmap$248"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$274", - "fields":[{"name":"0bitmap$249"}] + "fields":[{"name":"0bitmap$291"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$275", - "fields":[{"name":"0bitmap$250"}] + "fields":[{"name":"0bitmap$257"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$276", - "fields":[{"name":"0bitmap$268"}] + "fields":[{"name":"0bitmap$256"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$277", - "fields":[{"name":"0bitmap$267"}] + "fields":[{"name":"0bitmap$255"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$278", - "fields":[{"name":"0bitmap$257"}] + "fields":[{"name":"0bitmap$253"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$279", - "fields":[{"name":"0bitmap$256"}] + "fields":[{"name":"0bitmap$254"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$28", @@ -2711,19 +2711,19 @@ }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$280", - "fields":[{"name":"0bitmap$254"}] + "fields":[{"name":"0bitmap$272"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$281", - "fields":[{"name":"0bitmap$255"}] + "fields":[{"name":"0bitmap$271"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$282", - "fields":[{"name":"0bitmap$266"}] + "fields":[{"name":"0bitmap$261"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$283", - "fields":[{"name":"0bitmap$265"}] + "fields":[{"name":"0bitmap$260"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$284", @@ -2735,11 +2735,11 @@ }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$286", - "fields":[{"name":"0bitmap$260"}] + "fields":[{"name":"0bitmap$270"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$287", - "fields":[{"name":"0bitmap$261"}] + "fields":[{"name":"0bitmap$269"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$288", @@ -2749,37 +2749,37 @@ "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$289", "fields":[{"name":"0bitmap$263"}] }, -{ - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$29", - "fields":[{"name":"0bitmap$26"}] -}, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$290", "fields":[{"name":"0bitmap$264"}] }, +{ + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$291", + "fields":[{"name":"0bitmap$265"}] +}, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$292", - "fields":[{"name":"0bitmap$270"}] + "fields":[{"name":"0bitmap$266"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$294", - "fields":[{"name":"0bitmap$284"}] + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$293", + "fields":[{"name":"0bitmap$267"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$295", - "fields":[{"name":"0bitmap$283"}] + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$294", + "fields":[{"name":"0bitmap$268"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$296", - "fields":[{"name":"0bitmap$281"}] + "fields":[{"name":"0bitmap$274"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$297", - "fields":[{"name":"0bitmap$280"}] + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$298", + "fields":[{"name":"0bitmap$288"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$298", - "fields":[{"name":"0bitmap$272"}] + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$299", + "fields":[{"name":"0bitmap$287"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$3", @@ -2787,63 +2787,75 @@ }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$30", - "fields":[{"name":"0bitmap$33"}] + "fields":[{"name":"0bitmap$29"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$300", - "fields":[{"name":"0bitmap$279"}] + "fields":[{"name":"0bitmap$285"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$301", - "fields":[{"name":"0bitmap$278"}] + "fields":[{"name":"0bitmap$284"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$302", - "fields":[{"name":"0bitmap$277"}] + "fields":[{"name":"0bitmap$276"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$303", - "fields":[{"name":"0bitmap$274"}] + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$304", + "fields":[{"name":"0bitmap$283"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$305", - "fields":[{"name":"0bitmap$276"}] + "fields":[{"name":"0bitmap$282"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$306", - "fields":[{"name":"0bitmap$275"}] + "fields":[{"name":"0bitmap$281"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$308", - "fields":[{"name":"0bitmap$282"}] + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$307", + "fields":[{"name":"0bitmap$278"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$309", - "fields":[{"name":"0bitmap$286"}] + "fields":[{"name":"0bitmap$280"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$31", - "fields":[{"name":"0bitmap$32"}] + "fields":[{"name":"0bitmap$28"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$310", - "fields":[{"name":"0bitmap$285"}] + "fields":[{"name":"0bitmap$279"}] +}, +{ + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$312", + "fields":[{"name":"0bitmap$286"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$313", - "fields":[{"name":"0bitmap$288"}] + "fields":[{"name":"0bitmap$290"}] +}, +{ + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$314", + "fields":[{"name":"0bitmap$289"}] +}, +{ + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$317", + "fields":[{"name":"0bitmap$292"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$32", - "fields":[{"name":"0bitmap$31"}] + "fields":[{"name":"0bitmap$35"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$33", - "fields":[{"name":"0bitmap$28"}] + "fields":[{"name":"0bitmap$34"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$34", - "fields":[{"name":"0bitmap$29"}] + "fields":[{"name":"0bitmap$33"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$35", @@ -2851,19 +2863,19 @@ }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$36", - "fields":[{"name":"0bitmap$36"}] + "fields":[{"name":"0bitmap$31"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$37", - "fields":[{"name":"0bitmap$35"}] + "fields":[{"name":"0bitmap$32"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$38", - "fields":[{"name":"0bitmap$34"}] + "fields":[{"name":"0bitmap$38"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$39", - "fields":[{"name":"0bitmap$38"}] + "fields":[{"name":"0bitmap$37"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$4", @@ -2871,43 +2883,43 @@ }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$40", - "fields":[{"name":"0bitmap$37"}] + "fields":[{"name":"0bitmap$36"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$41", - "fields":[{"name":"0bitmap$41"}] + "fields":[{"name":"0bitmap$40"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$42", - "fields":[{"name":"0bitmap$40"}] + "fields":[{"name":"0bitmap$39"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$43", - "fields":[{"name":"0bitmap$39"}] + "fields":[{"name":"0bitmap$43"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$44", - "fields":[{"name":"0bitmap$43"}] + "fields":[{"name":"0bitmap$42"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$45", - "fields":[{"name":"0bitmap$42"}] + "fields":[{"name":"0bitmap$41"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$46", - "fields":[{"name":"0bitmap$49"}] + "fields":[{"name":"0bitmap$45"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$47", - "fields":[{"name":"0bitmap$48"}] + "fields":[{"name":"0bitmap$44"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$48", - "fields":[{"name":"0bitmap$47"}] + "fields":[{"name":"0bitmap$51"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$49", - "fields":[{"name":"0bitmap$46"}] + "fields":[{"name":"0bitmap$50"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$5", @@ -2915,39 +2927,39 @@ }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$50", - "fields":[{"name":"0bitmap$44"}] + "fields":[{"name":"0bitmap$49"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$51", - "fields":[{"name":"0bitmap$45"}] + "fields":[{"name":"0bitmap$48"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$53", - "fields":[{"name":"0bitmap$51"}] + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$52", + "fields":[{"name":"0bitmap$46"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$54", - "fields":[{"name":"0bitmap$50"}] + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$53", + "fields":[{"name":"0bitmap$47"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$55", - "fields":[{"name":"0bitmap$54"}] + "fields":[{"name":"0bitmap$53"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$56", - "fields":[{"name":"0bitmap$53"}] + "fields":[{"name":"0bitmap$52"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$57", - "fields":[{"name":"0bitmap$52"}] + "fields":[{"name":"0bitmap$56"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$58", - "fields":[{"name":"0bitmap$56"}] + "fields":[{"name":"0bitmap$55"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$59", - "fields":[{"name":"0bitmap$55"}] + "fields":[{"name":"0bitmap$54"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$6", @@ -2958,36 +2970,36 @@ "fields":[{"name":"0bitmap$58"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$62", - "fields":[{"name":"0bitmap$68"}] + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$61", + "fields":[{"name":"0bitmap$57"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$7", - "fields":[{"name":"0bitmap$4"}] + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$62", + "fields":[{"name":"0bitmap$60"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$74", - "fields":[{"name":"0bitmap$72"}] + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$64", + "fields":[{"name":"0bitmap$70"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$75", - "fields":[{"name":"0bitmap$70"}] + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$7", + "fields":[{"name":"0bitmap$4"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$76", - "fields":[{"name":"0bitmap$71"}] + "fields":[{"name":"0bitmap$74"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$77", - "fields":[{"name":"0bitmap$88"}] + "fields":[{"name":"0bitmap$72"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$78", - "fields":[{"name":"0bitmap$74"}] + "fields":[{"name":"0bitmap$73"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$79", - "fields":[{"name":"0bitmap$73"}] + "fields":[{"name":"0bitmap$90"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$8", @@ -2995,27 +3007,27 @@ }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$80", - "fields":[{"name":"0bitmap$78"}] + "fields":[{"name":"0bitmap$76"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$81", - "fields":[{"name":"0bitmap$77"}] + "fields":[{"name":"0bitmap$75"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$82", - "fields":[{"name":"0bitmap$75"}] + "fields":[{"name":"0bitmap$80"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$83", - "fields":[{"name":"0bitmap$76"}] + "fields":[{"name":"0bitmap$79"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$84", - "fields":[{"name":"0bitmap$80"}] + "fields":[{"name":"0bitmap$77"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$85", - "fields":[{"name":"0bitmap$79"}] + "fields":[{"name":"0bitmap$78"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$86", @@ -3039,39 +3051,39 @@ }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$90", - "fields":[{"name":"0bitmap$87"}] + "fields":[{"name":"0bitmap$86"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$91", - "fields":[{"name":"0bitmap$86"}] + "fields":[{"name":"0bitmap$85"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$92", - "fields":[{"name":"0bitmap$85"}] + "fields":[{"name":"0bitmap$89"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$94", - "fields":[{"name":"0bitmap$108"}] + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$93", + "fields":[{"name":"0bitmap$88"}] }, { - "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$95", - "fields":[{"name":"0bitmap$92"}] + "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$94", + "fields":[{"name":"0bitmap$87"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$96", - "fields":[{"name":"0bitmap$91"}] + "fields":[{"name":"0bitmap$110"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$97", - "fields":[{"name":"0bitmap$89"}] + "fields":[{"name":"0bitmap$94"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$98", - "fields":[{"name":"0bitmap$90"}] + "fields":[{"name":"0bitmap$93"}] }, { "name":"fpp.compiler.codegen.AstJsonEncoder$$anon$99", - "fields":[{"name":"0bitmap$94"}] + "fields":[{"name":"0bitmap$91"}] }, { "name":"fpp.compiler.codegen.ComponentDataProducts", diff --git a/compiler/lib/src/main/scala/analysis/Analyzers/TypeExpressionAnalyzer.scala b/compiler/lib/src/main/scala/analysis/Analyzers/TypeExpressionAnalyzer.scala index bf87941a8..e9a2b8b28 100644 --- a/compiler/lib/src/main/scala/analysis/Analyzers/TypeExpressionAnalyzer.scala +++ b/compiler/lib/src/main/scala/analysis/Analyzers/TypeExpressionAnalyzer.scala @@ -56,6 +56,12 @@ trait TypeExpressionAnalyzer opt(typeNameNode)(a, node.data.typeName) } + override def defAliasTypeAnnotatedNode(a: Analysis, node: Ast.Annotated[AstNode[Ast.DefAliasType]]) = { + val (_, node1, _) = node + val data = node1.data + typeNameNode(a, data.typeName) + } + override def defArrayAnnotatedNode(a: Analysis, node: Ast.Annotated[AstNode[Ast.DefArray]]) = { val (_, node1, _) = node val data = node1.data diff --git a/compiler/lib/src/main/scala/analysis/CheckSemantics/CheckExprTypes.scala b/compiler/lib/src/main/scala/analysis/CheckSemantics/CheckExprTypes.scala index 62787a629..43fb14dfd 100644 --- a/compiler/lib/src/main/scala/analysis/CheckSemantics/CheckExprTypes.scala +++ b/compiler/lib/src/main/scala/analysis/CheckSemantics/CheckExprTypes.scala @@ -42,6 +42,19 @@ object CheckExprTypes extends UseAnalyzer { else Right(a) } + override def defAliasTypeAnnotatedNode(a: Analysis, aNode: Ast.Annotated[AstNode[Ast.DefAliasType]]) = { + val (_, node,_) = aNode + if (!a.typeMap.contains(node.id)) { + val data = node.data + for (a <- super.defAliasTypeAnnotatedNode(a, aNode)) + yield { + val t = a.typeMap(data.typeName.id) + a.assignType(node -> t) + } + } + else Right(a) + } + override def defEnumAnnotatedNode(a: Analysis, aNode: Ast.Annotated[AstNode[Ast.DefEnum]]) = { val (_, node, _) = aNode val data = node.data diff --git a/compiler/lib/src/main/scala/analysis/CheckSemantics/CheckTypeUses.scala b/compiler/lib/src/main/scala/analysis/CheckSemantics/CheckTypeUses.scala index f1d50071a..feeafb461 100644 --- a/compiler/lib/src/main/scala/analysis/CheckSemantics/CheckTypeUses.scala +++ b/compiler/lib/src/main/scala/analysis/CheckSemantics/CheckTypeUses.scala @@ -17,6 +17,20 @@ object CheckTypeUses extends UseAnalyzer { visitIfNeeded(visitor)(a, aNode) } + override def defAliasTypeAnnotatedNode(a: Analysis, aNode: Ast.Annotated[AstNode[Ast.DefAliasType]]) = { + def visitor(a: Analysis, aNode: Ast.Annotated[AstNode[Ast.DefAliasType]]) = { + for (a <- super.defAliasTypeAnnotatedNode(a, aNode)) + yield { + val (_, node, _) = aNode + val data = node.data + val aliasedType = a.typeMap(data.typeName.id) + val t = Type.AliasType(aNode, aliasedType) + a.assignType(node -> t) + } + } + visitIfNeeded(visitor)(a, aNode) + } + override def defArrayAnnotatedNode(a: Analysis, aNode: Ast.Annotated[AstNode[Ast.DefArray]]) = { def visitor(a: Analysis, aNode: Ast.Annotated[AstNode[Ast.DefArray]]) = for (a <- super.defArrayAnnotatedNode(a, aNode)) @@ -135,6 +149,7 @@ object CheckTypeUses extends UseAnalyzer { for { a <- symbol match { case Symbol.AbsType(node) => defAbsTypeAnnotatedNode(a, node) + case Symbol.AliasType(node) => defAliasTypeAnnotatedNode(a, node) case Symbol.Array(node) => defArrayAnnotatedNode(a, node) case Symbol.Enum(node) => defEnumAnnotatedNode(a, node) case Symbol.Struct(node) => defStructAnnotatedNode(a, node) diff --git a/compiler/lib/src/main/scala/analysis/CheckSemantics/EnterSymbols.scala b/compiler/lib/src/main/scala/analysis/CheckSemantics/EnterSymbols.scala index 58a706859..f0dc9c189 100644 --- a/compiler/lib/src/main/scala/analysis/CheckSemantics/EnterSymbols.scala +++ b/compiler/lib/src/main/scala/analysis/CheckSemantics/EnterSymbols.scala @@ -25,6 +25,19 @@ object EnterSymbols yield updateMap(a, symbol).copy(nestedScope = nestedScope) } + override def defAliasTypeAnnotatedNode( + a: Analysis, + aNode: Ast.Annotated[AstNode[Ast.DefAliasType]] + ) = { + val (_, node, _) = aNode + val data = node.data + val name = data.name + val symbol = Symbol.AliasType(aNode) + val nestedScope = a.nestedScope + for (nestedScope <- nestedScope.put(NameGroup.Type)(name, symbol)) + yield updateMap(a, symbol).copy(nestedScope = nestedScope) + } + override def defArrayAnnotatedNode( a: Analysis, aNode: Ast.Annotated[AstNode[Ast.DefArray]] diff --git a/compiler/lib/src/main/scala/analysis/Semantics/Symbol.scala b/compiler/lib/src/main/scala/analysis/Semantics/Symbol.scala index 02d614c8b..7c1d3aa2c 100644 --- a/compiler/lib/src/main/scala/analysis/Semantics/Symbol.scala +++ b/compiler/lib/src/main/scala/analysis/Semantics/Symbol.scala @@ -12,6 +12,10 @@ object Symbol { override def getNodeId = node._2.id override def getUnqualifiedName = node._2.data.name } + final case class AliasType(node: Ast.Annotated[AstNode[Ast.DefAliasType]]) extends Symbol { + override def getNodeId = node._2.id + override def getUnqualifiedName = node._2.data.name + } final case class Array(node: Ast.Annotated[AstNode[Ast.DefArray]]) extends Symbol { override def getNodeId = node._2.id override def getUnqualifiedName = node._2.data.name diff --git a/compiler/lib/src/main/scala/analysis/Semantics/Type.scala b/compiler/lib/src/main/scala/analysis/Semantics/Type.scala index 953cdf3be..b4fe18528 100644 --- a/compiler/lib/src/main/scala/analysis/Semantics/Type.scala +++ b/compiler/lib/src/main/scala/analysis/Semantics/Type.scala @@ -16,6 +16,8 @@ sealed trait Type { /** Get the definition node identifier, if any */ def getDefNodeId: Option[AstNode.Id] = None + def getUnderlyingType: Type = this + /** Does this type have numeric members? */ def hasNumericMembers: Boolean = isNumeric @@ -37,6 +39,9 @@ sealed trait Type { /** Is this type a primitive type? */ def isPrimitive: Boolean = false + /** Is this type a canonical (non-aliased) type? */ + def isCanonical: Boolean = true + /** Is this type promotable to a struct type? */ final def isPromotableToStruct = isPromotableToArray @@ -179,6 +184,21 @@ object Type { override def getDefNodeId = Some(node._2.id) override def toString = node._2.data.name } + + /** An alias type */ + case class AliasType( + /** The AST node giving the definition */ + node: Ast.Annotated[AstNode[Ast.DefAliasType]], + + /** Type that this typedef points to */ + aliasType: Type + ) extends Type { + override def getDefaultValue = aliasType.getDefaultValue + override def getDefNodeId = Some(node._2.id) + override def toString = node._2.data.name + override def isCanonical = false + override def getUnderlyingType = aliasType.getUnderlyingType + } /** A named array type */ case class Array( @@ -347,6 +367,7 @@ object Type { /** Check for type identity */ def areIdentical(t1: Type, t2: Type): Boolean = { val pair = (t1, t2) + def numeric = pair match { case (PrimitiveInt(kind1), PrimitiveInt(kind2)) => kind1 == kind2 case (Float(kind1), Float(kind2)) => kind1 == kind2 @@ -373,8 +394,13 @@ object Type { } /** Check for type convertibility */ - def mayBeConverted(pair: (Type, Type)): Boolean = { + def mayBeConverted(aliasPair: (Type, Type)): Boolean = { + val pair = (aliasPair._1.getUnderlyingType, aliasPair._2.getUnderlyingType) val t1 -> t2 = pair + + assert(t1.isCanonical) + assert(t2.isCanonical) + def numeric = t1.isConvertibleToNumeric && t2.isNumeric def string = pair match { case (String(_) -> String(_)) => true @@ -415,7 +441,6 @@ object Type { array || struct } - /** Compute the common type for a pair of types */ def commonType(t1: Type, t2: Type): Option[Type] = { val pair = (t1, t2) @@ -431,6 +456,36 @@ object Type { case true => Some(t1) case false => None } + def alias() = { + def lca(a: Type, b: Type): Option[Type] = { + def getAncestors(t: Type, ancs: List[Type] = List()): List[Type] = { + t match { + case AliasType(_, parentType) => + getAncestors(parentType, t :: ancs) + case _ => + t :: ancs + } + } + + // Reverse the ancestor list since `getAncestors` returns + // the ancestors with the oldest ancestor first. + val ancestorsOfA = getAncestors(a).reverse + val ancestorsOfB = getAncestors(b).reverse + + // Traverse the ancestry of 'b' until we find a common ancestor with 'a' + ancestorsOfB.find(bi => ancestorsOfA.find(ai => areIdentical(ai, bi)).isDefined) + } + + // Apply this rule if either of t1 and t2 is an alias type + if (!t1.isCanonical || !t2.isCanonical) + lca(t1, t2) match { + // If there is a least common ancestor, then use it + case Some(c) => Some(c) + // Otherwise use the common type of the undelrying types + case None => commonType(t1.getUnderlyingType, t2.getUnderlyingType) + } + else None + } def numeric() = if (t1.isFloat && t2.isNumeric) Some(Float(Float.F64)) else if (t1.isNumeric && t2.isFloat) Some(Float(Float.F64)) @@ -524,6 +579,7 @@ object Type { } val rules: List[Rule] = List( identical, + alias, numeric, string, enumeration, diff --git a/compiler/lib/src/main/scala/analysis/Semantics/TypeVisitor.scala b/compiler/lib/src/main/scala/analysis/Semantics/TypeVisitor.scala index 957cd932c..db34714a8 100644 --- a/compiler/lib/src/main/scala/analysis/Semantics/TypeVisitor.scala +++ b/compiler/lib/src/main/scala/analysis/Semantics/TypeVisitor.scala @@ -9,6 +9,8 @@ trait TypeVisitor { def absType(in: In, t: Type.AbsType): Out = default(in, t) + def aliasType(in: In, t: Type.AliasType): Out = default(in, t) + def anonArray(in: In, t: Type.AnonArray): Out = default(in, t) def anonStruct(in: In, t: Type.AnonStruct): Out = default(in, t) @@ -36,6 +38,7 @@ trait TypeVisitor { final def matchType(in: In, t: Type): Out = t match { case t : Type.AbsType => absType(in, t) + case t : Type.AliasType => aliasType(in, t) case t : Type.AnonArray => anonArray(in, t) case t : Type.AnonStruct => anonStruct(in, t) case t : Type.Array => array(in, t) diff --git a/compiler/lib/src/main/scala/analysis/UsedSymbols.scala b/compiler/lib/src/main/scala/analysis/UsedSymbols.scala index 67607da11..a43168d16 100644 --- a/compiler/lib/src/main/scala/analysis/UsedSymbols.scala +++ b/compiler/lib/src/main/scala/analysis/UsedSymbols.scala @@ -59,6 +59,7 @@ object UsedSymbols extends UseAnalyzer { def helper(s: Symbol): Set[Symbol] = { val Right(a2) = s match { case Symbol.AbsType(node) => defAbsTypeAnnotatedNode(a1, node) + case Symbol.AliasType(node) => defAliasTypeAnnotatedNode(a1, node) case Symbol.Array(node) => defArrayAnnotatedNode(a1, node) case Symbol.Component(node) => defComponentAnnotatedNode(a1, node) case Symbol.ComponentInstance(node) => defComponentInstanceAnnotatedNode(a1, node) diff --git a/compiler/lib/src/main/scala/ast/Ast.scala b/compiler/lib/src/main/scala/ast/Ast.scala index cc5cb7549..0debf01df 100644 --- a/compiler/lib/src/main/scala/ast/Ast.scala +++ b/compiler/lib/src/main/scala/ast/Ast.scala @@ -52,6 +52,7 @@ object Ast { object ComponentMember { sealed trait Node final case class DefAbsType(node: AstNode[Ast.DefAbsType]) extends Node + final case class DefAliasType(node: AstNode[Ast.DefAliasType]) extends Node final case class DefArray(node: AstNode[Ast.DefArray]) extends Node final case class DefConstant(node: AstNode[Ast.DefConstant]) extends Node final case class DefEnum(node: AstNode[Ast.DefEnum]) extends Node @@ -73,6 +74,12 @@ object Ast { /** Abstract type definition */ final case class DefAbsType(name: Ident) + /* Aliased type definition */ + final case class DefAliasType( + name: Ident, + typeName: AstNode[TypeName] + ) + /* Array definition */ final case class DefArray( name: Ident, @@ -131,6 +138,7 @@ object Ast { object ModuleMember { sealed trait Node final case class DefAbsType(node: AstNode[Ast.DefAbsType]) extends Node + final case class DefAliasType(node: AstNode[Ast.DefAliasType]) extends Node final case class DefArray(node: AstNode[Ast.DefArray]) extends Node final case class DefComponent(node: AstNode[Ast.DefComponent]) extends Node final case class DefComponentInstance(node: AstNode[Ast.DefComponentInstance]) extends Node diff --git a/compiler/lib/src/main/scala/ast/AstTransformer.scala b/compiler/lib/src/main/scala/ast/AstTransformer.scala index 21170a482..4c95353d5 100644 --- a/compiler/lib/src/main/scala/ast/AstTransformer.scala +++ b/compiler/lib/src/main/scala/ast/AstTransformer.scala @@ -23,6 +23,12 @@ trait AstTransformer { ): ResultAnnotatedNode[Ast.DefAbsType] = Right(default(in), node) + def defAliasTypeAnnotatedNode( + in: In, + node: Ast.Annotated[AstNode[Ast.DefAliasType]] + ): ResultAnnotatedNode[Ast.DefAliasType] = + Right(default(in), node) + def defArrayAnnotatedNode(in: In, node: Ast.Annotated[AstNode[Ast.DefArray]]): ResultAnnotatedNode[Ast.DefArray] = Right(default(in), node) @@ -224,6 +230,8 @@ trait AstTransformer { node match { case Ast.ComponentMember.DefAbsType(node1) => transform(defAbsTypeAnnotatedNode(in, (pre, node1, post)), Ast.ComponentMember.DefAbsType(_)) + case Ast.ComponentMember.DefAliasType(node1) => + transform(defAliasTypeAnnotatedNode(in, (pre, node1, post)), Ast.ComponentMember.DefAliasType(_)) case Ast.ComponentMember.DefArray(node1) => transform(defArrayAnnotatedNode(in, (pre, node1, post)), Ast.ComponentMember.DefArray(_)) case Ast.ComponentMember.DefConstant(node1) => @@ -288,6 +296,8 @@ trait AstTransformer { node match { case Ast.ModuleMember.DefAbsType(node1) => transform(defAbsTypeAnnotatedNode(in, (pre, node1, post)), Ast.ModuleMember.DefAbsType(_)) + case Ast.ModuleMember.DefAliasType(node1) => + transform(defAliasTypeAnnotatedNode(in, (pre, node1, post)), Ast.ModuleMember.DefAliasType(_)) case Ast.ModuleMember.DefArray(node1) => transform(defArrayAnnotatedNode(in, (pre, node1, post)), Ast.ModuleMember.DefArray(_)) case Ast.ModuleMember.DefComponent(node1) => diff --git a/compiler/lib/src/main/scala/ast/AstVisitor.scala b/compiler/lib/src/main/scala/ast/AstVisitor.scala index 6fecba717..8312def75 100644 --- a/compiler/lib/src/main/scala/ast/AstVisitor.scala +++ b/compiler/lib/src/main/scala/ast/AstVisitor.scala @@ -11,6 +11,8 @@ trait AstVisitor { def defAbsTypeAnnotatedNode(in: In, node: Ast.Annotated[AstNode[Ast.DefAbsType]]): Out = default(in) + def defAliasTypeAnnotatedNode(in: In, node: Ast.Annotated[AstNode[Ast.DefAliasType]]): Out = default(in) + def defActionAnnotatedNode(in: In, node: Ast.Annotated[AstNode[Ast.DefAction]]): Out = default(in) def defArrayAnnotatedNode(in: In, node: Ast.Annotated[AstNode[Ast.DefArray]]): Out = default(in) @@ -138,6 +140,7 @@ trait AstVisitor { val (pre, node, post) = member.node node match { case Ast.ComponentMember.DefAbsType(node1) => defAbsTypeAnnotatedNode(in, (pre, node1, post)) + case Ast.ComponentMember.DefAliasType(node1) => defAliasTypeAnnotatedNode(in, (pre, node1, post)) case Ast.ComponentMember.DefArray(node1) => defArrayAnnotatedNode(in, (pre, node1, post)) case Ast.ComponentMember.DefConstant(node1) => defConstantAnnotatedNode(in, (pre, node1, post)) case Ast.ComponentMember.DefEnum(node1) => defEnumAnnotatedNode(in, (pre, node1, post)) @@ -176,6 +179,7 @@ trait AstVisitor { val (pre, node, post) = member.node node match { case Ast.ModuleMember.DefAbsType(node1) => defAbsTypeAnnotatedNode(in, (pre, node1, post)) + case Ast.ModuleMember.DefAliasType(node1) => defAliasTypeAnnotatedNode(in, (pre, node1, post)) case Ast.ModuleMember.DefArray(node1) => defArrayAnnotatedNode(in, (pre, node1, post)) case Ast.ModuleMember.DefComponent(node1) => defComponentAnnotatedNode(in, (pre, node1, post)) case Ast.ModuleMember.DefComponentInstance(node1) => defComponentInstanceAnnotatedNode(in, (pre, node1, post)) diff --git a/compiler/lib/src/main/scala/codegen/AstWriter.scala b/compiler/lib/src/main/scala/codegen/AstWriter.scala index 48a306cc4..3d2ecec81 100644 --- a/compiler/lib/src/main/scala/codegen/AstWriter.scala +++ b/compiler/lib/src/main/scala/codegen/AstWriter.scala @@ -12,6 +12,16 @@ object AstWriter extends AstVisitor with LineUtils { def transUnit(tu: Ast.TransUnit): Out = transUnit((), tu) + override def defAliasTypeAnnotatedNode( + in: Unit, + aNode: Ast.Annotated[AstNode[Ast.DefAliasType]]): Out = { + val (_, node, _) = aNode + lines("def alias type") ++ ( + ident(node.data.name) ++ + typeNameNode(node.data.typeName) + ).map(indentIn) + } + override def defAbsTypeAnnotatedNode( in: In, aNode: Ast.Annotated[AstNode[Ast.DefAbsType]] diff --git a/compiler/lib/src/main/scala/codegen/CppWriter/ComponentCppWriter/ComponentDataProducts.scala b/compiler/lib/src/main/scala/codegen/CppWriter/ComponentCppWriter/ComponentDataProducts.scala index 59c03f037..30b67ba32 100644 --- a/compiler/lib/src/main/scala/codegen/CppWriter/ComponentCppWriter/ComponentDataProducts.scala +++ b/compiler/lib/src/main/scala/codegen/CppWriter/ComponentCppWriter/ComponentDataProducts.scala @@ -469,7 +469,7 @@ case class ComponentDataProducts ( private def arrayRecordSerializeFn(name: String, t: Type) = { // Get the type name and parameter type val typeName = TypeCppWriter.getName(s, t) - val paramType = t match { + val paramType = t.getUnderlyingType match { case Type.String(_) => "const Fw::StringBase**" case _ => s"const ${typeName}*" } @@ -496,7 +496,7 @@ case class ComponentDataProducts ( | size * $eltSize;""" }).stripMargin // Generate the code for serializing the elements - val serializeElts = (t match { + val serializeElts = (t.getUnderlyingType match { // Optimize the U8 case case Type.U8 => """| status = this->m_dataBuffer.serialize(array, size, Fw::Serialization::OMIT_LENGTH); diff --git a/compiler/lib/src/main/scala/codegen/CppWriter/CppWriterState.scala b/compiler/lib/src/main/scala/codegen/CppWriter/CppWriterState.scala index ee3789caf..9a4b3b927 100644 --- a/compiler/lib/src/main/scala/codegen/CppWriter/CppWriterState.scala +++ b/compiler/lib/src/main/scala/codegen/CppWriter/CppWriterState.scala @@ -1,8 +1,8 @@ package fpp.compiler.codegen import fpp.compiler.analysis.* -import fpp.compiler.codegen.CppWriterState.builtInTypes import fpp.compiler.util.* +import fpp.compiler.codegen.CppWriterState.builtInTypes /** C++ Writer state */ case class CppWriterState( @@ -131,12 +131,20 @@ case class CppWriterState( /** Write include directives for autocoded files */ def writeIncludeDirectives(usedSymbols: Iterable[Symbol]): List[String] = { - def getDirectiveForSymbol(sym: Symbol): Option[String] = { + def getIncludeFiles(sym: Symbol): Option[String] = { val name = getName(sym) for { fileName <- sym match { case _: Symbol.AbsType => - if isBuiltInType(name) then None else Some(name) + if isBuiltInType(name) then None else Some(name) + case at: Symbol.AliasType => + // TODO(tumbar) We are not generating the type alias definitions in C++ + // yet. We need to include the definitions for the referenced type for now. + a.useDefMap.get(at.node._2.data.typeName.id) match { + case Some(refSym) => return getIncludeFiles(refSym) + // This is probably a builtin primitive + case None => None + } case _: Symbol.Array => Some( ComputeCppFiles.FileNames.getArray(name) ) @@ -161,20 +169,20 @@ case class CppWriterState( case _ => None } } - yield CppWriterState.headerString(getIncludePath(sym, fileName)) + yield getIncludePath(sym, fileName) } - usedSymbols.map(getDirectiveForSymbol).filter(_.isDefined).map(_.get).toList + usedSymbols.map(getIncludeFiles).filter(_.isDefined).map(_.get).map(CppWriterState.headerString).toList } /** Is t a built-in type? */ def isBuiltInType(typeName: String): Boolean = builtInTypes.contains(typeName) /** Is t a primitive type (not serializable)? */ - def isPrimitive(t: Type, typeName: String): Boolean = t.isPrimitive || isBuiltInType(typeName) + def isPrimitive(t: Type, typeName: String): Boolean = isBuiltInType(typeName) || t.getUnderlyingType.isPrimitive /** Is t a string type? */ - def isStringType(t: Type) = t match { + def isStringType(t: Type) = t.getUnderlyingType match { case _: Type.String => true case _ => false } diff --git a/compiler/lib/src/main/scala/codegen/CppWriter/CppWriterUtils.scala b/compiler/lib/src/main/scala/codegen/CppWriter/CppWriterUtils.scala index 6f1d81909..08cc52f84 100644 --- a/compiler/lib/src/main/scala/codegen/CppWriter/CppWriterUtils.scala +++ b/compiler/lib/src/main/scala/codegen/CppWriter/CppWriterUtils.scala @@ -304,7 +304,7 @@ trait CppWriterUtils extends LineUtils { /** Write a C++ expression for static serialized size */ def writeSerializedSizeExpr(s: CppWriterState, t: Type, typeName: String): String = - (t, s.isPrimitive(t, typeName)) match { + (t.getUnderlyingType, s.isPrimitive(t, typeName)) match { // sizeof(bool) is not defined in C++ // F Prime serializes bool as U8 case (Type.Boolean, _)=> "sizeof(U8)" diff --git a/compiler/lib/src/main/scala/codegen/CppWriter/TypeCppWriter.scala b/compiler/lib/src/main/scala/codegen/CppWriter/TypeCppWriter.scala index db65ff2c9..504daf2de 100644 --- a/compiler/lib/src/main/scala/codegen/CppWriter/TypeCppWriter.scala +++ b/compiler/lib/src/main/scala/codegen/CppWriter/TypeCppWriter.scala @@ -2,6 +2,7 @@ package fpp.compiler.codegen import fpp.compiler.analysis._ import fpp.compiler.util._ +import scala.annotation.switch /** Write an FPP type as C++ */ case class TypeCppWriter( @@ -16,6 +17,12 @@ case class TypeCppWriter( override def absType(s: CppWriterState, t: Type.AbsType) = s.writeSymbol(Symbol.AbsType(t.node)) + override def aliasType(s: CppWriterState, t: Type.AliasType) = + // TODO(tumbar) Type alias codegen is not implemented yet. + // For now we will use the underyling type which is guarenteed + // a concrete type defined in codegen. + this.matchType(s, t.getUnderlyingType) + override def array(s: CppWriterState, t: Type.Array) = s.writeSymbol(Symbol.Array(t.node)) diff --git a/compiler/lib/src/main/scala/codegen/CppWriter/ValueCppWriter.scala b/compiler/lib/src/main/scala/codegen/CppWriter/ValueCppWriter.scala index b195c5d7d..5b9e88df4 100644 --- a/compiler/lib/src/main/scala/codegen/CppWriter/ValueCppWriter.scala +++ b/compiler/lib/src/main/scala/codegen/CppWriter/ValueCppWriter.scala @@ -68,7 +68,7 @@ object ValueCppWriter { val namesList = data.members val memberNames = namesList.map(_._2.data.name) val membersMap = v.anonStruct.members - val members = memberNames.map(membersMap.get(_).get) + val members = memberNames.map(membersMap(_)) val memberValues = members.map(write(s, _)) memberValues.mkString(", ") } diff --git a/compiler/lib/src/main/scala/codegen/FppWriter.scala b/compiler/lib/src/main/scala/codegen/FppWriter.scala index 433f44ee2..2aa5a0fa4 100644 --- a/compiler/lib/src/main/scala/codegen/FppWriter.scala +++ b/compiler/lib/src/main/scala/codegen/FppWriter.scala @@ -112,6 +112,16 @@ object FppWriter extends AstVisitor with LineUtils { case Ast.TransitionOrDo.Do(actions) => actionList(actions) } + override def defAliasTypeAnnotatedNode( + in: In, + aNode: Ast.Annotated[AstNode[Ast.DefAliasType]] + ) = { + val (_, node, _) = aNode + val data = node.data + lines(s"type ${ident(data.name)} = "). + join("") (typeNameNode(data.typeName)) + } + override def defAbsTypeAnnotatedNode( in: In, aNode: Ast.Annotated[AstNode[Ast.DefAbsType]] diff --git a/compiler/lib/src/main/scala/syntax/Parser.scala b/compiler/lib/src/main/scala/syntax/Parser.scala index 8fe3b9d67..c80e3d589 100644 --- a/compiler/lib/src/main/scala/syntax/Parser.scala +++ b/compiler/lib/src/main/scala/syntax/Parser.scala @@ -23,6 +23,7 @@ object Parser extends Parsers { } def componentMemberNode: Parser[Ast.ComponentMember.Node] = { + node(defAliasType) ^^ { case n => Ast.ComponentMember.DefAliasType(n) } | node(defAbsType) ^^ { case n => Ast.ComponentMember.DefAbsType(n) } | node(defArray) ^^ { case n => Ast.ComponentMember.DefArray(n) } | node(defConstant) ^^ { case n => Ast.ComponentMember.DefConstant(n) } | @@ -61,8 +62,14 @@ object Parser extends Parsers { } } + def defAliasType: Parser[Ast.DefAliasType] = { + ((typeToken ~> ident) ~ (equals ~> node(typeName))) ^^ { + case ident ~ typeName => Ast.DefAliasType(ident, typeName) + } + } + def defAbsType: Parser[Ast.DefAbsType] = { - (typeToken ~>! ident) ^^ { case id => Ast.DefAbsType(id) } + (typeToken ~> ident) ^^ { case id => Ast.DefAbsType(id) } } def defAction: Parser[Ast.DefAction] = { @@ -323,6 +330,7 @@ object Parser extends Parsers { } def moduleMemberNode: Parser[Ast.ModuleMember.Node] = { + node(defAliasType) ^^ { case n => Ast.ModuleMember.DefAliasType(n) } | node(defAbsType) ^^ { case n => Ast.ModuleMember.DefAbsType(n) } | node(defArray) ^^ { case n => Ast.ModuleMember.DefArray(n) } | node(defComponent) ^^ { case n => Ast.ModuleMember.DefComponent(n) } | diff --git a/compiler/lib/src/test/scala/semantics/TypeSpec.scala b/compiler/lib/src/test/scala/semantics/TypeSpec.scala index 6abeffea4..753571103 100644 --- a/compiler/lib/src/test/scala/semantics/TypeSpec.scala +++ b/compiler/lib/src/test/scala/semantics/TypeSpec.scala @@ -7,6 +7,7 @@ import org.scalatest.wordspec.AnyWordSpec import Helpers._ import Type._ import Types._ +import fpp.compiler.syntax.Parser.defAliasType class TypeSpec extends AnyWordSpec { @@ -16,6 +17,7 @@ class TypeSpec extends AnyWordSpec { duplicate(defaultArray), duplicate(defaultEnum), duplicate(defaultStruct), + duplicate(defaultAliasType), duplicate(Boolean), duplicate(F32), duplicate(F64), @@ -43,6 +45,8 @@ class TypeSpec extends AnyWordSpec { (I8,U32), duplicate(AnonArray(None, I32)), duplicate(AnonStruct(Map())), + (aliasType("TAliasU32", U32, 0), U32), + (aliasType("AliasE", enumeration("E", I32, 0), 1), enumeration("E", I32, 0)) ) identicalPairs.foreach { pair => s"hold for $pair" in @@ -77,6 +81,13 @@ class TypeSpec extends AnyWordSpec { struct("S0", AnonStruct(Map("x" -> I32)), 0) -> struct("S1", AnonStruct(Map("x" -> I32)), 1), String(None) -> AnonStruct(Map("x" -> String(None))), AnonStruct(Map("x" -> I32)) -> AnonStruct(Map("x" -> AnonStruct(Map("y" -> I32)))), + duplicate(defaultAliasType), + enumeration("E", I32, 0) -> aliasType("AliasE", enumeration("E", I32, 0), 1), + aliasType("AliasE", enumeration("E", I32, 0), 1) -> enumeration("E", I32, 0), + aliasType("AliasE", enumeration("E", I32, 0), 1) -> I32, + defaultAliasType -> defaultAbsType, + aliasType("AliasU32", U32, 0) -> U32, + U32 -> aliasType("AliasU32", U32, 0), ) val disallowedPairs = List( String(None) -> Boolean, @@ -93,6 +104,8 @@ class TypeSpec extends AnyWordSpec { String(None) -> AnonStruct(Map("x" -> I32)), AnonArray(None, I32) -> AnonStruct(Map()), AnonStruct(Map()) -> AnonArray(None, I32), + I32 -> aliasType("AliasE", enumeration("E")), + struct("S", AnonStruct(Map("x" -> I32))) -> aliasType("U32Alias", enumeration("E", U16, 1), 2), ) allowedPairs.foreach { pair => s"allow ${pair._1} -> ${pair._2}" in @@ -154,6 +167,26 @@ class TypeSpec extends AnyWordSpec { AnonStruct(Map("x" -> Integer)), (struct("S0", AnonStruct(Map("x" -> I32)), 0), AnonStruct(Map("x" -> I8))) -> AnonStruct(Map("x" -> Integer)), + // (enum E, type E1 = E) -> E + (enumeration("E", I32), aliasType("E1", enumeration("E"), 1)) -> enumeration("E"), + // Simple common underlying type + (aliasType("E1", enumeration("E"), 1), aliasType("E2", enumeration("E"), 2)) -> enumeration("E"), + // Common ancestor #1 + ( + aliasType("E3", aliasType("E1", enumeration("E"), 2), 4), + aliasType("E2", aliasType("E1", enumeration("E"), 2), 5), + ) -> aliasType("E1", enumeration("E"), 2), + // Common ancestor #2 + ( + aliasType("E2", aliasType("E1", enumeration("E"), 2), 5), + aliasType("E4", aliasType("E3", aliasType("E1", enumeration("E"), 2), 4), 6), + ) -> aliasType("E1", enumeration("E"), 2), + // No common ancestor + // Compute using the underlying type + ( + aliasType("A1", enumeration("E0", I32, 0), 3), + aliasType("A2", enumeration("E1", I32, 1), 4) + ) -> I32 ) val disallowedPairs = List( (String(None), Boolean), diff --git a/compiler/lib/src/test/scala/semantics/Types.scala b/compiler/lib/src/test/scala/semantics/Types.scala index 822ed5347..cddf5392d 100644 --- a/compiler/lib/src/test/scala/semantics/Types.scala +++ b/compiler/lib/src/test/scala/semantics/Types.scala @@ -5,6 +5,7 @@ import fpp.compiler.analysis._ import Helpers._ import Type._ +import fpp.compiler.ast.Ast.TypeNameQualIdent /** Helper functions and values for types */ object Types { @@ -15,6 +16,14 @@ object Types { AbsType(anode) } + def aliasType(name: Ast.Ident, ty: Type, id: AstNode.Id = 0): AliasType = { + val typeNameNode = AstNode.create(Ast.TypeNameInt(Ast.U32()), id) + + val d = Ast.DefAliasType(name, typeNameNode) + val anode = annotatedNode(d, id) + AliasType(anode, ty) + } + def array(name: Ast.Ident, anonArray: AnonArray = AnonArray(None, U32), id: AstNode.Id = 0): Array = { val size = AstNode.create(Ast.ExprLiteralInt("1")) val eltType = AstNode.create(Ast.TypeNameInt(Ast.U32())) @@ -39,5 +48,6 @@ object Types { val defaultArray: Array = array("A", AnonArray(None, I32), 1) val defaultEnum: Enum = enumeration("E", I32, 2) val defaultStruct: Struct = struct("S", AnonStruct(Map()), 3) + val defaultAliasType: AliasType = aliasType("TAlias", defaultAbsType, 4) } diff --git a/compiler/lib/src/test/scala/syntax/Parser.scala b/compiler/lib/src/test/scala/syntax/Parser.scala index 25c7ea1fb..6778a1907 100644 --- a/compiler/lib/src/test/scala/syntax/Parser.scala +++ b/compiler/lib/src/test/scala/syntax/Parser.scala @@ -157,6 +157,7 @@ class ParserSpec extends AnyWordSpec { topology T {} locate component C at "c.fpp" type T + type K = T array A = [10] U32 enum E { X, Y } include "a.fpp" diff --git a/compiler/tools/fpp-format/test/include.ref.txt b/compiler/tools/fpp-format/test/include.ref.txt index 896de3ec0..1f6fbdc60 100644 --- a/compiler/tools/fpp-format/test/include.ref.txt +++ b/compiler/tools/fpp-format/test/include.ref.txt @@ -4,6 +4,9 @@ module DefinitionsAndSpecifiers { @ Abstract type definition type T @< Abstract type definition + @ Type alias definition + type TA = T @< Type alias definition + @ Array definition array A = [10] U32 default 0 format "{} counts" @< Array definition diff --git a/compiler/tools/fpp-format/test/no_include.ref.txt b/compiler/tools/fpp-format/test/no_include.ref.txt index 5b10c1ec5..d92e1ef4e 100644 --- a/compiler/tools/fpp-format/test/no_include.ref.txt +++ b/compiler/tools/fpp-format/test/no_include.ref.txt @@ -4,6 +4,9 @@ module DefinitionsAndSpecifiers { @ Abstract type definition type T @< Abstract type definition + @ Type alias definition + type TA = T @< Type alias definition + @ Array definition array A = [10] U32 default 0 format "{} counts" @< Array definition diff --git a/compiler/tools/fpp-locate-uses/src/main/scala/fpp-locate-uses.scala b/compiler/tools/fpp-locate-uses/src/main/scala/fpp-locate-uses.scala index d49f9ba1d..c9bdfc985 100644 --- a/compiler/tools/fpp-locate-uses/src/main/scala/fpp-locate-uses.scala +++ b/compiler/tools/fpp-locate-uses/src/main/scala/fpp-locate-uses.scala @@ -70,6 +70,7 @@ object FPPLocateUses { val fileNode = AstNode.create(relativePath.normalize.toString) val kind = s match { case _: Symbol.AbsType => Ast.SpecLoc.Type + case _: Symbol.AliasType => Ast.SpecLoc.Type case _: Symbol.Array => Ast.SpecLoc.Type case _: Symbol.Component => Ast.SpecLoc.Component case _: Symbol.ComponentInstance => Ast.SpecLoc.ComponentInstance diff --git a/compiler/tools/fpp-syntax/test/syntax-ast.ref.txt b/compiler/tools/fpp-syntax/test/syntax-ast.ref.txt index c4124c429..1c43abf11 100644 --- a/compiler/tools/fpp-syntax/test/syntax-ast.ref.txt +++ b/compiler/tools/fpp-syntax/test/syntax-ast.ref.txt @@ -5,6 +5,11 @@ def module def abs type ident T @< Abstract type definition + @ Type alias definition + def alias type + ident TA + type name qual ident T + @< Type alias definition @ Array definition def array ident A diff --git a/compiler/tools/fpp-syntax/test/syntax-include-ast.ref.txt b/compiler/tools/fpp-syntax/test/syntax-include-ast.ref.txt index 3aaf238c4..e2de0ee82 100644 --- a/compiler/tools/fpp-syntax/test/syntax-include-ast.ref.txt +++ b/compiler/tools/fpp-syntax/test/syntax-include-ast.ref.txt @@ -5,6 +5,11 @@ def module def abs type ident T @< Abstract type definition + @ Type alias definition + def alias type + ident TA + type name qual ident T + @< Type alias definition @ Array definition def array ident A diff --git a/compiler/tools/fpp-syntax/test/syntax-stdin.ref.txt b/compiler/tools/fpp-syntax/test/syntax-stdin.ref.txt index 3aaf238c4..e2de0ee82 100644 --- a/compiler/tools/fpp-syntax/test/syntax-stdin.ref.txt +++ b/compiler/tools/fpp-syntax/test/syntax-stdin.ref.txt @@ -5,6 +5,11 @@ def module def abs type ident T @< Abstract type definition + @ Type alias definition + def alias type + ident TA + type name qual ident T + @< Type alias definition @ Array definition def array ident A diff --git a/compiler/tools/fpp-syntax/test/syntax.fpp b/compiler/tools/fpp-syntax/test/syntax.fpp index ed3306ca9..e3a3931ab 100644 --- a/compiler/tools/fpp-syntax/test/syntax.fpp +++ b/compiler/tools/fpp-syntax/test/syntax.fpp @@ -5,6 +5,10 @@ module DefinitionsAndSpecifiers { type T @< Abstract type definition + @ Type alias definition + type TA = T + @< Type alias definition + @ Array definition array A = [10] U32 default 0 format "{} counts" @< Array definition diff --git a/compiler/tools/fpp-to-cpp/test/fprime/config/FpConfig.fpp b/compiler/tools/fpp-to-cpp/test/fprime/config/FpConfig.fpp index 2a643d7a0..f4c2b2b3a 100644 --- a/compiler/tools/fpp-to-cpp/test/fprime/config/FpConfig.fpp +++ b/compiler/tools/fpp-to-cpp/test/fprime/config/FpConfig.fpp @@ -8,8 +8,10 @@ type FwIndexType type FwOpcodeType type FwPacketDescriptorType type FwPrmIdType +type FwSizeStoreType type FwSizeType type FwTimeBaseStoreType type FwTimeContextStoreType type FwTlmPacketizeIdType +type FwTraceIdType type POINTER_CAST diff --git a/compiler/tools/fpp-to-cpp/test/struct/AliasTypeSerializableAc.ref.cpp b/compiler/tools/fpp-to-cpp/test/struct/AliasTypeSerializableAc.ref.cpp new file mode 100644 index 000000000..7f34c485a --- /dev/null +++ b/compiler/tools/fpp-to-cpp/test/struct/AliasTypeSerializableAc.ref.cpp @@ -0,0 +1,173 @@ +// ====================================================================== +// \title AliasTypeSerializableAc.cpp +// \author Generated by fpp-to-cpp +// \brief cpp file for AliasType struct +// ====================================================================== + +#include "AliasTypeSerializableAc.hpp" +#include "Fw/Types/Assert.hpp" + +// ---------------------------------------------------------------------- +// Constructors +// ---------------------------------------------------------------------- + +AliasType :: + AliasType() : + Serializable(), + m_t(0), + m_ta() +{ + +} + +AliasType :: + AliasType( + U16 t, + const AbT& ta + ) : + Serializable(), + m_t(t), + m_ta(ta) +{ + +} + +AliasType :: + AliasType(const AliasType& obj) : + Serializable(), + m_t(obj.m_t), + m_ta(obj.m_ta) +{ + +} + +// ---------------------------------------------------------------------- +// Operators +// ---------------------------------------------------------------------- + +AliasType& AliasType :: + operator=(const AliasType& obj) +{ + if (this == &obj) { + return *this; + } + + set(obj.m_t, obj.m_ta); + return *this; +} + +bool AliasType :: + operator==(const AliasType& obj) const +{ + return ( + (this->m_t == obj.m_t) && + (this->m_ta == obj.m_ta) + ); +} + +bool AliasType :: + operator!=(const AliasType& obj) const +{ + return !(*this == obj); +} + +#ifdef BUILD_UT + +std::ostream& operator<<(std::ostream& os, const AliasType& obj) { + Fw::String s; + obj.toString(s); + os << s.toChar(); + return os; +} + +#endif + +// ---------------------------------------------------------------------- +// Member functions +// ---------------------------------------------------------------------- + +Fw::SerializeStatus AliasType :: + serialize(Fw::SerializeBufferBase& buffer) const +{ + Fw::SerializeStatus status; + + status = buffer.serialize(this->m_t); + if (status != Fw::FW_SERIALIZE_OK) { + return status; + } + status = buffer.serialize(this->m_ta); + if (status != Fw::FW_SERIALIZE_OK) { + return status; + } + + return status; +} + +Fw::SerializeStatus AliasType :: + deserialize(Fw::SerializeBufferBase& buffer) +{ + Fw::SerializeStatus status; + + status = buffer.deserialize(this->m_t); + if (status != Fw::FW_SERIALIZE_OK) { + return status; + } + status = buffer.deserialize(this->m_ta); + if (status != Fw::FW_SERIALIZE_OK) { + return status; + } + + return status; +} + +#if FW_SERIALIZABLE_TO_STRING + +void AliasType :: + toString(Fw::StringBase& sb) const +{ + static const char* formatString = + "( " + "t = %s, " + "ta = %s" + " )"; + + // Declare strings to hold any serializable toString() arguments + Fw::String taStr; + + // Call toString for arrays and serializable types + this->m_ta.toString(taStr); + + sb.format( + formatString, + this->m_t, + taStr.toChar() + ); +} + +#endif + +// ---------------------------------------------------------------------- +// Setter functions +// ---------------------------------------------------------------------- + +void AliasType :: + set( + U16 t, + const AbT& ta + ) +{ + this->m_t = t; + this->m_ta = ta; +} + +void AliasType :: + sett(U16 t) +{ + this->m_t = t; +} + +void AliasType :: + setta(const AbT& ta) +{ + this->m_ta = ta; +} diff --git a/compiler/tools/fpp-to-cpp/test/struct/AliasTypeSerializableAc.ref.hpp b/compiler/tools/fpp-to-cpp/test/struct/AliasTypeSerializableAc.ref.hpp new file mode 100644 index 000000000..567af06b7 --- /dev/null +++ b/compiler/tools/fpp-to-cpp/test/struct/AliasTypeSerializableAc.ref.hpp @@ -0,0 +1,158 @@ +// ====================================================================== +// \title AliasTypeSerializableAc.hpp +// \author Generated by fpp-to-cpp +// \brief hpp file for AliasType struct +// ====================================================================== + +#ifndef AliasTypeSerializableAc_HPP +#define AliasTypeSerializableAc_HPP + +#include "AbT.hpp" +#include "FpConfig.hpp" +#include "Fw/Types/ExternalString.hpp" +#include "Fw/Types/Serializable.hpp" +#include "Fw/Types/String.hpp" + +class AliasType : + public Fw::Serializable +{ + + public: + + // ---------------------------------------------------------------------- + // Constants + // ---------------------------------------------------------------------- + + enum { + //! The size of the serial representation + SERIALIZED_SIZE = + sizeof(U16) + + AbT::SERIALIZED_SIZE + }; + + public: + + // ---------------------------------------------------------------------- + // Constructors + // ---------------------------------------------------------------------- + + //! Constructor (default value) + AliasType(); + + //! Member constructor + AliasType( + U16 t, + const AbT& ta + ); + + //! Copy constructor + AliasType( + const AliasType& obj //!< The source object + ); + + public: + + // ---------------------------------------------------------------------- + // Operators + // ---------------------------------------------------------------------- + + //! Copy assignment operator + AliasType& operator=( + const AliasType& obj //!< The source object + ); + + //! Equality operator + bool operator==( + const AliasType& obj //!< The other object + ) const; + + //! Inequality operator + bool operator!=( + const AliasType& obj //!< The other object + ) const; + +#ifdef BUILD_UT + + //! Ostream operator + friend std::ostream& operator<<( + std::ostream& os, //!< The ostream + const AliasType& obj //!< The object + ); + +#endif + + public: + + // ---------------------------------------------------------------------- + // Member functions + // ---------------------------------------------------------------------- + + //! Serialization + Fw::SerializeStatus serialize( + Fw::SerializeBufferBase& buffer //!< The serial buffer + ) const; + + //! Deserialization + Fw::SerializeStatus deserialize( + Fw::SerializeBufferBase& buffer //!< The serial buffer + ); + +#if FW_SERIALIZABLE_TO_STRING + + //! Convert struct to string + void toString( + Fw::StringBase& sb //!< The StringBase object to hold the result + ) const; + +#endif + + // ---------------------------------------------------------------------- + // Getter functions + // ---------------------------------------------------------------------- + + //! Get member t + U16 gett() const + { + return this->m_t; + } + + //! Get member ta + AbT& getta() + { + return this->m_ta; + } + + //! Get member ta (const) + const AbT& getta() const + { + return this->m_ta; + } + + // ---------------------------------------------------------------------- + // Setter functions + // ---------------------------------------------------------------------- + + //! Set all members + void set( + U16 t, + const AbT& ta + ); + + //! Set member t + void sett(U16 t); + + //! Set member ta + void setta(const AbT& ta); + + protected: + + // ---------------------------------------------------------------------- + // Member variables + // ---------------------------------------------------------------------- + + U16 m_t; + AbT m_ta; + +}; + +#endif diff --git a/compiler/tools/fpp-to-cpp/test/struct/alias_type.fpp b/compiler/tools/fpp-to-cpp/test/struct/alias_type.fpp new file mode 100644 index 000000000..15e1e8fe1 --- /dev/null +++ b/compiler/tools/fpp-to-cpp/test/struct/alias_type.fpp @@ -0,0 +1,4 @@ +type T = U16 +type AbT +type TA = AbT +struct AliasType { t: T, ta: TA } diff --git a/compiler/tools/fpp-to-cpp/test/struct/alias_type.ref.txt b/compiler/tools/fpp-to-cpp/test/struct/alias_type.ref.txt new file mode 100644 index 000000000..e69de29bb diff --git a/compiler/tools/fpp-to-cpp/test/struct/run.sh b/compiler/tools/fpp-to-cpp/test/struct/run.sh index e5bef0c04..81b52fa7d 100644 --- a/compiler/tools/fpp-to-cpp/test/struct/run.sh +++ b/compiler/tools/fpp-to-cpp/test/struct/run.sh @@ -25,6 +25,12 @@ abs_type() diff_cpp AbsTypeSerializable } +alias_type() +{ + run_test "-p $PWD" alias_type && \ + diff_cpp AliasTypeSerializable +} + empty() { run_test "-p $PWD" empty && \ diff --git a/compiler/tools/fpp-to-cpp/test/struct/tests.sh b/compiler/tools/fpp-to-cpp/test/struct/tests.sh index 5286f7b71..022a9309f 100644 --- a/compiler/tools/fpp-to-cpp/test/struct/tests.sh +++ b/compiler/tools/fpp-to-cpp/test/struct/tests.sh @@ -1,5 +1,6 @@ tests=" abs_type +alias_type array component default diff --git a/compiler/tools/fpp-to-cpp/test/struct/update-ref.sh b/compiler/tools/fpp-to-cpp/test/struct/update-ref.sh index 56af42e5f..244c40662 100644 --- a/compiler/tools/fpp-to-cpp/test/struct/update-ref.sh +++ b/compiler/tools/fpp-to-cpp/test/struct/update-ref.sh @@ -25,6 +25,12 @@ abs_type() move_cpp AbsTypeSerializable } +alias_type() +{ + update "-p $PWD" alias_type + move_cpp AliasTypeSerializable +} + empty() { update "-p $PWD" empty diff --git a/compiler/tools/fpp-to-cpp/test/top/check-cpp-dir/Basic/check b/compiler/tools/fpp-to-cpp/test/top/check-cpp-dir/Basic/check index 83806a6ac..b64fd6fed 100755 --- a/compiler/tools/fpp-to-cpp/test/top/check-cpp-dir/Basic/check +++ b/compiler/tools/fpp-to-cpp/test/top/check-cpp-dir/Basic/check @@ -1,6 +1,7 @@ #!/bin/sh -e fpp_to_cpp=../../../../../../bin/fpp-to-cpp +fprime_gcc=../../../../../../scripts/fprime-gcc echo ' removing old files' ./clean @@ -16,4 +17,4 @@ do done echo ' compiling C++' -fprime-gcc -I.. -I../../../fprime -I../../../fprime/config -Wno-unused-parameter -c BasicTopologyAc.cpp +$fprime_gcc -I.. -I../../../fprime -I../../../fprime/config -Wno-unused-parameter -c BasicTopologyAc.cpp diff --git a/compiler/tools/fpp-to-cpp/test/top/check-cpp-dir/Commands/check b/compiler/tools/fpp-to-cpp/test/top/check-cpp-dir/Commands/check index 6775f3fc7..0541609c9 100755 --- a/compiler/tools/fpp-to-cpp/test/top/check-cpp-dir/Commands/check +++ b/compiler/tools/fpp-to-cpp/test/top/check-cpp-dir/Commands/check @@ -1,6 +1,7 @@ #!/bin/sh -e fpp_to_cpp=../../../../../../bin/fpp-to-cpp +fprime_gcc=../../../../../../scripts/fprime-gcc echo ' removing old files' ./clean @@ -17,4 +18,4 @@ do done echo ' compiling C++' -fprime-gcc -I.. -I../../../fprime -I../../../fprime/config -Wno-unused-parameter -c CommandsTopologyAc.cpp +$fprime_gcc -I.. -I../../../fprime -I../../../fprime/config -Wno-unused-parameter -c CommandsTopologyAc.cpp diff --git a/compiler/tools/fpp-to-cpp/test/top/check-cpp-dir/Health/check b/compiler/tools/fpp-to-cpp/test/top/check-cpp-dir/Health/check index d2a15f3f5..7bf27f0ce 100755 --- a/compiler/tools/fpp-to-cpp/test/top/check-cpp-dir/Health/check +++ b/compiler/tools/fpp-to-cpp/test/top/check-cpp-dir/Health/check @@ -1,6 +1,7 @@ #!/bin/sh -e fpp_to_cpp=../../../../../../bin/fpp-to-cpp +fprime_gcc=../../../../../../scripts/fprime-gcc echo ' removing old files' ./clean @@ -16,4 +17,4 @@ do done echo ' compiling C++' -fprime-gcc -I.. -I../../../fprime -I../../../fprime/config -Wno-unused-parameter -c HealthTopologyAc.cpp +$fprime_gcc -I.. -I../../../fprime -I../../../fprime/config -Wno-unused-parameter -c HealthTopologyAc.cpp diff --git a/compiler/tools/fpp-to-cpp/test/top/check-cpp-dir/Params/check b/compiler/tools/fpp-to-cpp/test/top/check-cpp-dir/Params/check index 2b9801338..d0829de5e 100755 --- a/compiler/tools/fpp-to-cpp/test/top/check-cpp-dir/Params/check +++ b/compiler/tools/fpp-to-cpp/test/top/check-cpp-dir/Params/check @@ -1,6 +1,7 @@ #!/bin/sh -e fpp_to_cpp=../../../../../../bin/fpp-to-cpp +fprime_gcc=../../../../../../scripts/fprime-gcc echo ' removing old files' ./clean @@ -17,4 +18,4 @@ do done echo ' compiling C++' -fprime-gcc -I.. -I../../../fprime -I../../../fprime/config -Wno-unused-parameter -c ParamsTopologyAc.cpp +$fprime_gcc -I.. -I../../../fprime -I../../../fprime/config -Wno-unused-parameter -c ParamsTopologyAc.cpp diff --git a/docs/fpp-spec.html b/docs/fpp-spec.html index 5f82b526f..13bf560ff 100644 --- a/docs/fpp-spec.html +++ b/docs/fpp-spec.html @@ -924,7 +924,8 @@

The F Prime Prime (FPP) Language Specification, Unreleased, after v2.3.0

17.14. Underlying Types
  • 17.15. Displayable Types
  • 17.16. Types with Numeric Members
  • -
  • 17.17. Default Values
  • +
  • 17.17. Alias Lists
  • +
  • 17.18. Default Values
  • 18. Type Checking @@ -9662,7 +9663,28 @@

    17.16. Types with Numeric Members

    -

    17.17. Default Values

    +

    17.17. Alias Lists

    +
    +

    The alias list of a type \$T\$ is a list \$L\$ defined as follows:

    +
    +
    +
      +
    1. +

      The head of \$L\$ is \$T\$.

      +
    2. +
    3. +

      If \$T\$ is not an alias type, then the +tail of \$L\$ is the empty list.

      +
    4. +
    5. +

      Otherwise the tail of \$T\$ is the alias list of the type +\$T'\$ that appears in the definition of \$T\$.

      +
    6. +
    +
    +
    +
    +

    17.18. Default Values

    Every type T with a syntactic name in FPP has an associated default value. @@ -10197,9 +10219,32 @@

    18.14.1. Pairs of

  • Otherwise if \$T_1\$ or \$T_2\$ or both are alias -types, then replace -each alias type with its underlying type -and reapply these rules.

    +types, then do the following:

    +
    +
      +
    1. +

      Let \$L_1\$ be the alias list of \$T_1\$.

      +
    2. +
    3. +

      Let \$L_2\$ be the alias list of \$T_2\$.

      +
    4. +
    5. +

      If there is no type in \$L_1\$ that is +identical +to a type in \$L_2\$, then replace each each alias type with its +underlying type and reapply these rules.

      +
    6. +
    7. +

      Otherwise let \$T\$ be the first type in \$L_2\$ that is identical +to a type in \$L_1\$.

      +
    8. +
    +
    +
    +

    Note that the algorithm is symmetric in \$L_1\$ and \$L_2\$, i.e., +reversing \$L_1\$ and stem \$L_2\$ in the last two items would +produce the same result.

    +
  • Otherwise if \$T_1\$ and \$T_2\$ are both @@ -11107,7 +11152,7 @@

    22.4. Translation Tools

    diff --git a/docs/fpp-users-guide.html b/docs/fpp-users-guide.html index 7e6eca370..8f8d52fe4 100644 --- a/docs/fpp-users-guide.html +++ b/docs/fpp-users-guide.html @@ -14859,7 +14859,7 @@

    diff --git a/docs/spec/Type-Checking.adoc b/docs/spec/Type-Checking.adoc index bd5309e79..8177e7c06 100644 --- a/docs/spec/Type-Checking.adoc +++ b/docs/spec/Type-Checking.adoc @@ -340,9 +340,24 @@ the whole expression): stem:[T] be stem:[T_1]. . Otherwise if stem:[T_1] or stem:[T_2] or both are <>, then replace -each alias type with its <> -and reapply these rules. +types>>, then do the following: + +.. Let stem:[L_1] be the <> of stem:[T_1]. + +.. Let stem:[L_2] be the <> of stem:[T_2]. + +.. If there is no type in stem:[L_1] that is +<> +to a type in stem:[L_2], then replace each each alias type with its +<> and reapply these rules. + +.. Otherwise let stem:[T] be the first type in stem:[L_2] that is identical +to a type in stem:[L_1]. + ++ +Note that the algorithm is symmetric in stem:[L_1] and stem:[L_2], i.e., +reversing stem:[L_1] and stem stem:[L_2] in the last two items would +produce the same result. . Otherwise if stem:[T_1] and stem:[T_2] are both <>, then do the following: diff --git a/docs/spec/Types.adoc b/docs/spec/Types.adoc index 6f8bdb7f1..1a05e111f 100644 --- a/docs/spec/Types.adoc +++ b/docs/spec/Types.adoc @@ -172,6 +172,18 @@ member type has numeric members. <> whose member types all have numeric members. +=== Alias Lists + +The *alias list* of a type stem:[T] is a list stem:[L] defined as follows: + +. The head of stem:[L] is stem:[T]. + +. If stem:[T] is not an <>, then the +tail of stem:[L] is the empty list. + +. Otherwise the tail of stem:[T] is the alias list of the type +stem:[T'] that appears in the definition of stem:[T]. + === Default Values Every type _T_ with a syntactic name in FPP has an associated *default