Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(272)

Side by Side Diff: pkg/analyzer/lib/src/summary/idl.dart

Issue 2508343002: Rename UnlinkedConst -> UnlinkedExpr (Closed)
Patch Set: Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « pkg/analyzer/lib/src/summary/format.fbs ('k') | pkg/analyzer/lib/src/summary/link.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 /** 5 /**
6 * This file is an "idl" style description of the summary format. It 6 * This file is an "idl" style description of the summary format. It
7 * contains abstract classes which declare the interface for reading data from 7 * contains abstract classes which declare the interface for reading data from
8 * summaries. It is parsed and transformed into code that implements the 8 * summaries. It is parsed and transformed into code that implements the
9 * summary format. 9 * summary format.
10 * 10 *
(...skipping 953 matching lines...) Expand 10 before | Expand all | Expand 10 after
964 } 964 }
965 965
966 /** 966 /**
967 * Unlinked summary information about a class declaration. 967 * Unlinked summary information about a class declaration.
968 */ 968 */
969 abstract class UnlinkedClass extends base.SummaryClass { 969 abstract class UnlinkedClass extends base.SummaryClass {
970 /** 970 /**
971 * Annotations for this class. 971 * Annotations for this class.
972 */ 972 */
973 @Id(5) 973 @Id(5)
974 List<UnlinkedConst> get annotations; 974 List<UnlinkedExpr> get annotations;
975 975
976 /** 976 /**
977 * Code range of the class. 977 * Code range of the class.
978 */ 978 */
979 @informative 979 @informative
980 @Id(13) 980 @Id(13)
981 CodeRange get codeRange; 981 CodeRange get codeRange;
982 982
983 /** 983 /**
984 * Documentation comment for the class, or `null` if there is no 984 * Documentation comment for the class, or `null` if there is no
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
1112 1112
1113 /** 1113 /**
1114 * The value to which the value of the declared variable will be compared, 1114 * The value to which the value of the declared variable will be compared,
1115 * or `true` if the condition does not include an equality test. 1115 * or `true` if the condition does not include an equality test.
1116 */ 1116 */
1117 @Id(1) 1117 @Id(1)
1118 String get value; 1118 String get value;
1119 } 1119 }
1120 1120
1121 /** 1121 /**
1122 * Unlinked summary information about a compile-time constant expression, or a 1122 * Unlinked summary information about a constructor initializer.
1123 * potentially constant expression. 1123 */
1124 abstract class UnlinkedConstructorInitializer extends base.SummaryClass {
1125 /**
1126 * If there are `m` [arguments] and `n` [argumentNames], then each argument
1127 * from [arguments] with index `i` such that `n + i - m >= 0`, should be used
1128 * with the name at `n + i - m`.
1129 */
1130 @Id(4)
1131 List<String> get argumentNames;
1132
1133 /**
1134 * If [kind] is `thisInvocation` or `superInvocation`, the arguments of the
1135 * invocation. Otherwise empty.
1136 */
1137 @Id(3)
1138 List<UnlinkedExpr> get arguments;
1139
1140 /**
1141 * If [kind] is `field`, the expression of the field initializer.
1142 * Otherwise `null`.
1143 */
1144 @Id(1)
1145 UnlinkedExpr get expression;
1146
1147 /**
1148 * The kind of the constructor initializer (field, redirect, super).
1149 */
1150 @Id(2)
1151 UnlinkedConstructorInitializerKind get kind;
1152
1153 /**
1154 * If [kind] is `field`, the name of the field declared in the class. If
1155 * [kind] is `thisInvocation`, the name of the constructor, declared in this
1156 * class, to redirect to. If [kind] is `superInvocation`, the name of the
1157 * constructor, declared in the superclass, to invoke.
1158 */
1159 @Id(0)
1160 String get name;
1161 }
1162
1163 /**
1164 * Enum used to indicate the kind of an constructor initializer.
1165 */
1166 enum UnlinkedConstructorInitializerKind {
1167 /**
1168 * Initialization of a field.
1169 */
1170 field,
1171
1172 /**
1173 * Invocation of a constructor in the same class.
1174 */
1175 thisInvocation,
1176
1177 /**
1178 * Invocation of a superclass' constructor.
1179 */
1180 superInvocation
1181 }
1182
1183 /**
1184 * Unlinked summary information about a documentation comment.
1185 */
1186 abstract class UnlinkedDocumentationComment extends base.SummaryClass {
1187 /**
1188 * Length of the documentation comment (prior to replacing '\r\n' with '\n').
1189 */
1190 @Id(0)
1191 @deprecated
1192 int get length;
1193
1194 /**
1195 * Offset of the beginning of the documentation comment relative to the
1196 * beginning of the file.
1197 */
1198 @Id(2)
1199 @deprecated
1200 int get offset;
1201
1202 /**
1203 * Text of the documentation comment, with '\r\n' replaced by '\n'.
1204 *
1205 * References appearing within the doc comment in square brackets are not
1206 * specially encoded.
1207 */
1208 @Id(1)
1209 String get text;
1210 }
1211
1212 /**
1213 * Unlinked summary information about an enum declaration.
1214 */
1215 abstract class UnlinkedEnum extends base.SummaryClass {
1216 /**
1217 * Annotations for this enum.
1218 */
1219 @Id(4)
1220 List<UnlinkedExpr> get annotations;
1221
1222 /**
1223 * Code range of the enum.
1224 */
1225 @informative
1226 @Id(5)
1227 CodeRange get codeRange;
1228
1229 /**
1230 * Documentation comment for the enum, or `null` if there is no documentation
1231 * comment.
1232 */
1233 @informative
1234 @Id(3)
1235 UnlinkedDocumentationComment get documentationComment;
1236
1237 /**
1238 * Name of the enum type.
1239 */
1240 @Id(0)
1241 String get name;
1242
1243 /**
1244 * Offset of the enum name relative to the beginning of the file.
1245 */
1246 @informative
1247 @Id(1)
1248 int get nameOffset;
1249
1250 /**
1251 * Values listed in the enum declaration, in declaration order.
1252 */
1253 @Id(2)
1254 List<UnlinkedEnumValue> get values;
1255 }
1256
1257 /**
1258 * Unlinked summary information about a single enumerated value in an enum
1259 * declaration.
1260 */
1261 abstract class UnlinkedEnumValue extends base.SummaryClass {
1262 /**
1263 * Documentation comment for the enum value, or `null` if there is no
1264 * documentation comment.
1265 */
1266 @informative
1267 @Id(2)
1268 UnlinkedDocumentationComment get documentationComment;
1269
1270 /**
1271 * Name of the enumerated value.
1272 */
1273 @Id(0)
1274 String get name;
1275
1276 /**
1277 * Offset of the enum value name relative to the beginning of the file.
1278 */
1279 @informative
1280 @Id(1)
1281 int get nameOffset;
1282 }
1283
1284 /**
1285 * Unlinked summary information about a function, method, getter, or setter
1286 * declaration.
1287 */
1288 abstract class UnlinkedExecutable extends base.SummaryClass {
1289 /**
1290 * Annotations for this executable.
1291 */
1292 @Id(6)
1293 List<UnlinkedExpr> get annotations;
1294
1295 /**
1296 * If this executable's function body is declared using `=>`, the expression
1297 * to the right of the `=>`. May be omitted if neither type inference nor
1298 * constant evaluation depends on the function body.
1299 */
1300 @Id(29)
1301 UnlinkedExpr get bodyExpr;
1302
1303 /**
1304 * Code range of the executable.
1305 */
1306 @informative
1307 @Id(26)
1308 CodeRange get codeRange;
1309
1310 /**
1311 * If a constant [UnlinkedExecutableKind.constructor], the constructor
1312 * initializers. Otherwise empty.
1313 */
1314 @Id(14)
1315 List<UnlinkedConstructorInitializer> get constantInitializers;
1316
1317 /**
1318 * If [kind] is [UnlinkedExecutableKind.constructor] and [isConst] is `true`,
1319 * a nonzero slot id which is unique within this compilation unit. If this id
1320 * is found in [LinkedUnit.constCycles], then this constructor is part of a
1321 * cycle.
1322 *
1323 * Otherwise, zero.
1324 */
1325 @Id(25)
1326 int get constCycleSlot;
1327
1328 /**
1329 * Documentation comment for the executable, or `null` if there is no
1330 * documentation comment.
1331 */
1332 @informative
1333 @Id(7)
1334 UnlinkedDocumentationComment get documentationComment;
1335
1336 /**
1337 * If this executable's return type is inferable, nonzero slot id
1338 * identifying which entry in [LinkedUnit.types] contains the inferred
1339 * return type. If there is no matching entry in [LinkedUnit.types], then
1340 * no return type was inferred for this variable, so its static type is
1341 * `dynamic`.
1342 */
1343 @Id(5)
1344 int get inferredReturnTypeSlot;
1345
1346 /**
1347 * Indicates whether the executable is declared using the `abstract` keyword.
1348 */
1349 @Id(10)
1350 bool get isAbstract;
1351
1352 /**
1353 * Indicates whether the executable has body marked as being asynchronous.
1354 */
1355 @informative
1356 @Id(27)
1357 bool get isAsynchronous;
1358
1359 /**
1360 * Indicates whether the executable is declared using the `const` keyword.
1361 */
1362 @Id(12)
1363 bool get isConst;
1364
1365 /**
1366 * Indicates whether the executable is declared using the `external` keyword.
1367 */
1368 @Id(11)
1369 bool get isExternal;
1370
1371 /**
1372 * Indicates whether the executable is declared using the `factory` keyword.
1373 */
1374 @Id(8)
1375 bool get isFactory;
1376
1377 /**
1378 * Indicates whether the executable has body marked as being a generator.
1379 */
1380 @informative
1381 @Id(28)
1382 bool get isGenerator;
1383
1384 /**
1385 * Indicates whether the executable is a redirected constructor.
1386 */
1387 @Id(13)
1388 bool get isRedirectedConstructor;
1389
1390 /**
1391 * Indicates whether the executable is declared using the `static` keyword.
1392 *
1393 * Note that for top level executables, this flag is false, since they are
1394 * not declared using the `static` keyword (even though they are considered
1395 * static for semantic purposes).
1396 */
1397 @Id(9)
1398 bool get isStatic;
1399
1400 /**
1401 * The kind of the executable (function/method, getter, setter, or
1402 * constructor).
1403 */
1404 @Id(4)
1405 UnlinkedExecutableKind get kind;
1406
1407 /**
1408 * The list of local functions.
1409 */
1410 @Id(18)
1411 List<UnlinkedExecutable> get localFunctions;
1412
1413 /**
1414 * The list of local labels.
1415 */
1416 @informative
1417 @Id(22)
1418 List<UnlinkedLabel> get localLabels;
1419
1420 /**
1421 * The list of local variables.
1422 */
1423 @informative
1424 @Id(19)
1425 List<UnlinkedVariable> get localVariables;
1426
1427 /**
1428 * Name of the executable. For setters, this includes the trailing "=". For
1429 * named constructors, this excludes the class name and excludes the ".".
1430 * For unnamed constructors, this is the empty string.
1431 */
1432 @Id(1)
1433 String get name;
1434
1435 /**
1436 * If [kind] is [UnlinkedExecutableKind.constructor] and [name] is not empty,
1437 * the offset of the end of the constructor name. Otherwise zero.
1438 */
1439 @informative
1440 @Id(23)
1441 int get nameEnd;
1442
1443 /**
1444 * Offset of the executable name relative to the beginning of the file. For
1445 * named constructors, this excludes the class name and excludes the ".".
1446 * For unnamed constructors, this is the offset of the class name (i.e. the
1447 * offset of the second "C" in "class C { C(); }").
1448 */
1449 @informative
1450 @Id(0)
1451 int get nameOffset;
1452
1453 /**
1454 * Parameters of the executable, if any. Note that getters have no
1455 * parameters (hence this will be the empty list), and setters have a single
1456 * parameter.
1457 */
1458 @Id(2)
1459 List<UnlinkedParam> get parameters;
1460
1461 /**
1462 * If [kind] is [UnlinkedExecutableKind.constructor] and [name] is not empty,
1463 * the offset of the period before the constructor name. Otherwise zero.
1464 */
1465 @informative
1466 @Id(24)
1467 int get periodOffset;
1468
1469 /**
1470 * If [isRedirectedConstructor] and [isFactory] are both `true`, the
1471 * constructor to which this constructor redirects; otherwise empty.
1472 */
1473 @Id(15)
1474 EntityRef get redirectedConstructor;
1475
1476 /**
1477 * If [isRedirectedConstructor] is `true` and [isFactory] is `false`, the
1478 * name of the constructor that this constructor redirects to; otherwise
1479 * empty.
1480 */
1481 @Id(17)
1482 String get redirectedConstructorName;
1483
1484 /**
1485 * Declared return type of the executable. Absent if the executable is a
1486 * constructor or the return type is implicit. Absent for executables
1487 * associated with variable initializers and closures, since these
1488 * executables may have return types that are not accessible via direct
1489 * imports.
1490 */
1491 @Id(3)
1492 EntityRef get returnType;
1493
1494 /**
1495 * Type parameters of the executable, if any. Empty if support for generic
1496 * method syntax is disabled.
1497 */
1498 @Id(16)
1499 List<UnlinkedTypeParam> get typeParameters;
1500
1501 /**
1502 * If a local function, the length of the visible range; zero otherwise.
1503 */
1504 @informative
1505 @Id(20)
1506 int get visibleLength;
1507
1508 /**
1509 * If a local function, the beginning of the visible range; zero otherwise.
1510 */
1511 @informative
1512 @Id(21)
1513 int get visibleOffset;
1514 }
1515
1516 /**
1517 * Enum used to indicate the kind of an executable.
1518 */
1519 enum UnlinkedExecutableKind {
1520 /**
1521 * Executable is a function or method.
1522 */
1523 functionOrMethod,
1524
1525 /**
1526 * Executable is a getter.
1527 */
1528 getter,
1529
1530 /**
1531 * Executable is a setter.
1532 */
1533 setter,
1534
1535 /**
1536 * Executable is a constructor.
1537 */
1538 constructor
1539 }
1540
1541 /**
1542 * Unlinked summary information about an export declaration (stored outside
1543 * [UnlinkedPublicNamespace]).
1544 */
1545 abstract class UnlinkedExportNonPublic extends base.SummaryClass {
1546 /**
1547 * Annotations for this export directive.
1548 */
1549 @Id(3)
1550 List<UnlinkedExpr> get annotations;
1551
1552 /**
1553 * Offset of the "export" keyword.
1554 */
1555 @informative
1556 @Id(0)
1557 int get offset;
1558
1559 /**
1560 * End of the URI string (including quotes) relative to the beginning of the
1561 * file.
1562 */
1563 @informative
1564 @Id(1)
1565 int get uriEnd;
1566
1567 /**
1568 * Offset of the URI string (including quotes) relative to the beginning of
1569 * the file.
1570 */
1571 @informative
1572 @Id(2)
1573 int get uriOffset;
1574 }
1575
1576 /**
1577 * Unlinked summary information about an export declaration (stored inside
1578 * [UnlinkedPublicNamespace]).
1579 */
1580 abstract class UnlinkedExportPublic extends base.SummaryClass {
1581 /**
1582 * Combinators contained in this export declaration.
1583 */
1584 @Id(1)
1585 List<UnlinkedCombinator> get combinators;
1586
1587 /**
1588 * Configurations used to control which library will actually be loaded at
1589 * run-time.
1590 */
1591 @Id(2)
1592 List<UnlinkedConfiguration> get configurations;
1593
1594 /**
1595 * URI used in the source code to reference the exported library.
1596 */
1597 @Id(0)
1598 String get uri;
1599 }
1600
1601 /**
1602 * Unlinked summary information about an expression.
1124 * 1603 *
1125 * Constant expressions are represented using a simple stack-based language 1604 * Expressions are represented using a simple stack-based language
1126 * where [operations] is a sequence of operations to execute starting with an 1605 * where [operations] is a sequence of operations to execute starting with an
1127 * empty stack. Once all operations have been executed, the stack should 1606 * empty stack. Once all operations have been executed, the stack should
1128 * contain a single value which is the value of the constant. Note that some 1607 * contain a single value which is the value of the constant. Note that some
1129 * operations consume additional data from the other fields of this class. 1608 * operations consume additional data from the other fields of this class.
1130 */ 1609 */
1131 abstract class UnlinkedConst extends base.SummaryClass { 1610 abstract class UnlinkedExpr extends base.SummaryClass {
1132 /** 1611 /**
1133 * Sequence of operators used by assignment operations. 1612 * Sequence of operators used by assignment operations.
1134 */ 1613 */
1135 @Id(6) 1614 @Id(6)
1136 List<UnlinkedExprAssignOperator> get assignmentOperators; 1615 List<UnlinkedExprAssignOperator> get assignmentOperators;
1137 1616
1138 /** 1617 /**
1139 * Sequence of 64-bit doubles consumed by the operation `pushDouble`. 1618 * Sequence of 64-bit doubles consumed by the operation `pushDouble`.
1140 */ 1619 */
1141 @Id(4) 1620 @Id(4)
(...skipping 12 matching lines...) Expand all
1154 * expression. 1633 * expression.
1155 */ 1634 */
1156 @Id(5) 1635 @Id(5)
1157 bool get isValidConst; 1636 bool get isValidConst;
1158 1637
1159 /** 1638 /**
1160 * Sequence of operations to execute (starting with an empty stack) to form 1639 * Sequence of operations to execute (starting with an empty stack) to form
1161 * the constant value. 1640 * the constant value.
1162 */ 1641 */
1163 @Id(0) 1642 @Id(0)
1164 List<UnlinkedConstOperation> get operations; 1643 List<UnlinkedExprOperation> get operations;
1165 1644
1166 /** 1645 /**
1167 * Sequence of language constructs consumed by the operations 1646 * Sequence of language constructs consumed by the operations
1168 * `pushReference`, `invokeConstructor`, `makeList`, and `makeMap`. Note 1647 * `pushReference`, `invokeConstructor`, `makeList`, and `makeMap`. Note
1169 * that in the case of `pushReference` (and sometimes `invokeConstructor` the 1648 * that in the case of `pushReference` (and sometimes `invokeConstructor` the
1170 * actual entity being referred to may be something other than a type. 1649 * actual entity being referred to may be something other than a type.
1171 */ 1650 */
1172 @Id(2) 1651 @Id(2)
1173 List<EntityRef> get references; 1652 List<EntityRef> get references;
1174 1653
1175 /** 1654 /**
1176 * Sequence of strings consumed by the operations `pushString` and 1655 * Sequence of strings consumed by the operations `pushString` and
1177 * `invokeConstructor`. 1656 * `invokeConstructor`.
1178 */ 1657 */
1179 @Id(3) 1658 @Id(3)
1180 List<String> get strings; 1659 List<String> get strings;
1181 } 1660 }
1182 1661
1183 /** 1662 /**
1663 * Enum representing the various kinds of assignment operations combined
1664 * with:
1665 * [UnlinkedExprOperation.assignToRef],
1666 * [UnlinkedExprOperation.assignToProperty],
1667 * [UnlinkedExprOperation.assignToIndex].
1668 */
1669 enum UnlinkedExprAssignOperator {
1670 /**
1671 * Perform simple assignment `target = operand`.
1672 */
1673 assign,
1674
1675 /**
1676 * Perform `target ??= operand`.
1677 */
1678 ifNull,
1679
1680 /**
1681 * Perform `target *= operand`.
1682 */
1683 multiply,
1684
1685 /**
1686 * Perform `target /= operand`.
1687 */
1688 divide,
1689
1690 /**
1691 * Perform `target ~/= operand`.
1692 */
1693 floorDivide,
1694
1695 /**
1696 * Perform `target %= operand`.
1697 */
1698 modulo,
1699
1700 /**
1701 * Perform `target += operand`.
1702 */
1703 plus,
1704
1705 /**
1706 * Perform `target -= operand`.
1707 */
1708 minus,
1709
1710 /**
1711 * Perform `target <<= operand`.
1712 */
1713 shiftLeft,
1714
1715 /**
1716 * Perform `target >>= operand`.
1717 */
1718 shiftRight,
1719
1720 /**
1721 * Perform `target &= operand`.
1722 */
1723 bitAnd,
1724
1725 /**
1726 * Perform `target ^= operand`.
1727 */
1728 bitXor,
1729
1730 /**
1731 * Perform `target |= operand`.
1732 */
1733 bitOr,
1734
1735 /**
1736 * Perform `++target`.
1737 */
1738 prefixIncrement,
1739
1740 /**
1741 * Perform `--target`.
1742 */
1743 prefixDecrement,
1744
1745 /**
1746 * Perform `target++`.
1747 */
1748 postfixIncrement,
1749
1750 /**
1751 * Perform `target++`.
1752 */
1753 postfixDecrement,
1754 }
1755
1756 /**
1184 * Enum representing the various kinds of operations which may be performed to 1757 * Enum representing the various kinds of operations which may be performed to
1185 * produce a constant value. These options are assumed to execute in the 1758 * in an expression. These options are assumed to execute in the
1186 * context of a stack which is initially empty. 1759 * context of a stack which is initially empty.
1187 */ 1760 */
1188 enum UnlinkedConstOperation { 1761 enum UnlinkedExprOperation {
1189 /** 1762 /**
1190 * Push the next value from [UnlinkedConst.ints] (a 32-bit unsigned integer) 1763 * Push the next value from [UnlinkedExpr.ints] (a 32-bit unsigned integer)
1191 * onto the stack. 1764 * onto the stack.
1192 * 1765 *
1193 * Note that Dart supports integers larger than 32 bits; these are 1766 * Note that Dart supports integers larger than 32 bits; these are
1194 * represented by composing 32-bit values using the [pushLongInt] operation. 1767 * represented by composing 32-bit values using the [pushLongInt] operation.
1195 */ 1768 */
1196 pushInt, 1769 pushInt,
1197 1770
1198 /** 1771 /**
1199 * Get the number of components from [UnlinkedConst.ints], then do this number 1772 * Get the number of components from [UnlinkedExpr.ints], then do this number
1200 * of times the following operations: multiple the current value by 2^32, "or" 1773 * of times the following operations: multiple the current value by 2^32, "or"
1201 * it with the next value in [UnlinkedConst.ints]. The initial value is zero. 1774 * it with the next value in [UnlinkedExpr.ints]. The initial value is zero.
1202 * Push the result into the stack. 1775 * Push the result into the stack.
1203 */ 1776 */
1204 pushLongInt, 1777 pushLongInt,
1205 1778
1206 /** 1779 /**
1207 * Push the next value from [UnlinkedConst.doubles] (a double precision 1780 * Push the next value from [UnlinkedExpr.doubles] (a double precision
1208 * floating point value) onto the stack. 1781 * floating point value) onto the stack.
1209 */ 1782 */
1210 pushDouble, 1783 pushDouble,
1211 1784
1212 /** 1785 /**
1213 * Push the constant `true` onto the stack. 1786 * Push the constant `true` onto the stack.
1214 */ 1787 */
1215 pushTrue, 1788 pushTrue,
1216 1789
1217 /** 1790 /**
1218 * Push the constant `false` onto the stack. 1791 * Push the constant `false` onto the stack.
1219 */ 1792 */
1220 pushFalse, 1793 pushFalse,
1221 1794
1222 /** 1795 /**
1223 * Push the next value from [UnlinkedConst.strings] onto the stack. 1796 * Push the next value from [UnlinkedExpr.strings] onto the stack.
1224 */ 1797 */
1225 pushString, 1798 pushString,
1226 1799
1227 /** 1800 /**
1228 * Pop the top n values from the stack (where n is obtained from 1801 * Pop the top n values from the stack (where n is obtained from
1229 * [UnlinkedConst.ints]), convert them to strings (if they aren't already), 1802 * [UnlinkedExpr.ints]), convert them to strings (if they aren't already),
1230 * concatenate them into a single string, and push it back onto the stack. 1803 * concatenate them into a single string, and push it back onto the stack.
1231 * 1804 *
1232 * This operation is used to represent constants whose value is a literal 1805 * This operation is used to represent constants whose value is a literal
1233 * string containing string interpolations. 1806 * string containing string interpolations.
1234 */ 1807 */
1235 concatenate, 1808 concatenate,
1236 1809
1237 /** 1810 /**
1238 * Get the next value from [UnlinkedConst.strings], convert it to a symbol, 1811 * Get the next value from [UnlinkedExpr.strings], convert it to a symbol,
1239 * and push it onto the stack. 1812 * and push it onto the stack.
1240 */ 1813 */
1241 makeSymbol, 1814 makeSymbol,
1242 1815
1243 /** 1816 /**
1244 * Push the constant `null` onto the stack. 1817 * Push the constant `null` onto the stack.
1245 */ 1818 */
1246 pushNull, 1819 pushNull,
1247 1820
1248 /** 1821 /**
1249 * Push the value of the function parameter with the name obtained from 1822 * Push the value of the function parameter with the name obtained from
1250 * [UnlinkedConst.strings]. 1823 * [UnlinkedExpr.strings].
1251 */ 1824 */
1252 pushParameter, 1825 pushParameter,
1253 1826
1254 /** 1827 /**
1255 * Evaluate a (potentially qualified) identifier expression and push the 1828 * Evaluate a (potentially qualified) identifier expression and push the
1256 * resulting value onto the stack. The identifier to be evaluated is 1829 * resulting value onto the stack. The identifier to be evaluated is
1257 * obtained from [UnlinkedConst.references]. 1830 * obtained from [UnlinkedExpr.references].
1258 * 1831 *
1259 * This operation is used to represent the following kinds of constants 1832 * This operation is used to represent the following kinds of constants
1260 * (which are indistinguishable from an unresolved AST alone): 1833 * (which are indistinguishable from an unresolved AST alone):
1261 * 1834 *
1262 * - A qualified reference to a static constant variable (e.g. `C.v`, where 1835 * - A qualified reference to a static constant variable (e.g. `C.v`, where
1263 * C is a class and `v` is a constant static variable in `C`). 1836 * C is a class and `v` is a constant static variable in `C`).
1264 * - An identifier expression referring to a constant variable. 1837 * - An identifier expression referring to a constant variable.
1265 * - A simple or qualified identifier denoting a class or type alias. 1838 * - A simple or qualified identifier denoting a class or type alias.
1266 * - A simple or qualified identifier denoting a top-level function or a 1839 * - A simple or qualified identifier denoting a top-level function or a
1267 * static method. 1840 * static method.
1268 */ 1841 */
1269 pushReference, 1842 pushReference,
1270 1843
1271 /** 1844 /**
1272 * Pop the top value from the stack, extract the value of the property with 1845 * Pop the top value from the stack, extract the value of the property with
1273 * the name obtained from [UnlinkedConst.strings], and push the result back 1846 * the name obtained from [UnlinkedExpr.strings], and push the result back
1274 * onto the stack. 1847 * onto the stack.
1275 */ 1848 */
1276 extractProperty, 1849 extractProperty,
1277 1850
1278 /** 1851 /**
1279 * Pop the top `n` values from the stack (where `n` is obtained from 1852 * Pop the top `n` values from the stack (where `n` is obtained from
1280 * [UnlinkedConst.ints]) into a list (filled from the end) and take the next 1853 * [UnlinkedExpr.ints]) into a list (filled from the end) and take the next
1281 * `n` values from [UnlinkedConst.strings] and use the lists of names and 1854 * `n` values from [UnlinkedExpr.strings] and use the lists of names and
1282 * values to create named arguments. Then pop the top `m` values from the 1855 * values to create named arguments. Then pop the top `m` values from the
1283 * stack (where `m` is obtained from [UnlinkedConst.ints]) into a list (filled 1856 * stack (where `m` is obtained from [UnlinkedExpr.ints]) into a list (filled
1284 * from the end) and use them as positional arguments. Use the lists of 1857 * from the end) and use them as positional arguments. Use the lists of
1285 * positional and names arguments to invoke a constant constructor obtained 1858 * positional and names arguments to invoke a constant constructor obtained
1286 * from [UnlinkedConst.references], and push the resulting value back onto the 1859 * from [UnlinkedExpr.references], and push the resulting value back onto the
1287 * stack. 1860 * stack.
1288 * 1861 *
1289 * Note that for an invocation of the form `const a.b(...)` (where no type 1862 * Note that for an invocation of the form `const a.b(...)` (where no type
1290 * arguments are specified), it is impossible to tell from the unresolved AST 1863 * arguments are specified), it is impossible to tell from the unresolved AST
1291 * alone whether `a` is a class name and `b` is a constructor name, or `a` is 1864 * alone whether `a` is a class name and `b` is a constructor name, or `a` is
1292 * a prefix name and `b` is a class name. For consistency between AST based 1865 * a prefix name and `b` is a class name. For consistency between AST based
1293 * and elements based summaries, references to default constructors are always 1866 * and elements based summaries, references to default constructors are always
1294 * recorded as references to corresponding classes. 1867 * recorded as references to corresponding classes.
1295 */ 1868 */
1296 invokeConstructor, 1869 invokeConstructor,
1297 1870
1298 /** 1871 /**
1299 * Pop the top n values from the stack (where n is obtained from 1872 * Pop the top n values from the stack (where n is obtained from
1300 * [UnlinkedConst.ints]), place them in a [List], and push the result back 1873 * [UnlinkedExpr.ints]), place them in a [List], and push the result back
1301 * onto the stack. The type parameter for the [List] is implicitly `dynamic`. 1874 * onto the stack. The type parameter for the [List] is implicitly `dynamic`.
1302 */ 1875 */
1303 makeUntypedList, 1876 makeUntypedList,
1304 1877
1305 /** 1878 /**
1306 * Pop the top 2*n values from the stack (where n is obtained from 1879 * Pop the top 2*n values from the stack (where n is obtained from
1307 * [UnlinkedConst.ints]), interpret them as key/value pairs, place them in a 1880 * [UnlinkedExpr.ints]), interpret them as key/value pairs, place them in a
1308 * [Map], and push the result back onto the stack. The two type parameters 1881 * [Map], and push the result back onto the stack. The two type parameters
1309 * for the [Map] are implicitly `dynamic`. 1882 * for the [Map] are implicitly `dynamic`.
1310 */ 1883 */
1311 makeUntypedMap, 1884 makeUntypedMap,
1312 1885
1313 /** 1886 /**
1314 * Pop the top n values from the stack (where n is obtained from 1887 * Pop the top n values from the stack (where n is obtained from
1315 * [UnlinkedConst.ints]), place them in a [List], and push the result back 1888 * [UnlinkedExpr.ints]), place them in a [List], and push the result back
1316 * onto the stack. The type parameter for the [List] is obtained from 1889 * onto the stack. The type parameter for the [List] is obtained from
1317 * [UnlinkedConst.references]. 1890 * [UnlinkedExpr.references].
1318 */ 1891 */
1319 makeTypedList, 1892 makeTypedList,
1320 1893
1321 /** 1894 /**
1322 * Pop the top 2*n values from the stack (where n is obtained from 1895 * Pop the top 2*n values from the stack (where n is obtained from
1323 * [UnlinkedConst.ints]), interpret them as key/value pairs, place them in a 1896 * [UnlinkedExpr.ints]), interpret them as key/value pairs, place them in a
1324 * [Map], and push the result back onto the stack. The two type parameters fo r 1897 * [Map], and push the result back onto the stack. The two type parameters fo r
1325 * the [Map] are obtained from [UnlinkedConst.references]. 1898 * the [Map] are obtained from [UnlinkedExpr.references].
1326 */ 1899 */
1327 makeTypedMap, 1900 makeTypedMap,
1328 1901
1329 /** 1902 /**
1330 * Pop the top 2 values from the stack, evaluate `v1 == v2`, and push the 1903 * Pop the top 2 values from the stack, evaluate `v1 == v2`, and push the
1331 * result back onto the stack. 1904 * result back onto the stack.
1332 */ 1905 */
1333 equal, 1906 equal,
1334 1907
1335 /** 1908 /**
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
1459 modulo, 2032 modulo,
1460 2033
1461 /** 2034 /**
1462 * Pop the top 3 values from the stack, compute `v1 ? v2 : v3`, and push the 2035 * Pop the top 3 values from the stack, compute `v1 ? v2 : v3`, and push the
1463 * result back onto the stack. 2036 * result back onto the stack.
1464 */ 2037 */
1465 conditional, 2038 conditional,
1466 2039
1467 /** 2040 /**
1468 * Pop from the stack `value` and get the next `target` reference from 2041 * Pop from the stack `value` and get the next `target` reference from
1469 * [UnlinkedConst.references] - a top-level variable (prefixed or not), an 2042 * [UnlinkedExpr.references] - a top-level variable (prefixed or not), an
1470 * assignable field of a class (prefixed or not), or a sequence of getters 2043 * assignable field of a class (prefixed or not), or a sequence of getters
1471 * ending with an assignable property `a.b.b.c.d.e`. In general `a.b` cannot 2044 * ending with an assignable property `a.b.b.c.d.e`. In general `a.b` cannot
1472 * not be distinguished between: `a` is a prefix and `b` is a top-level 2045 * not be distinguished between: `a` is a prefix and `b` is a top-level
1473 * variable; or `a` is an object and `b` is the name of a property. Perform 2046 * variable; or `a` is an object and `b` is the name of a property. Perform
1474 * `reference op= value` where `op` is the next assignment operator from 2047 * `reference op= value` where `op` is the next assignment operator from
1475 * [UnlinkedConst.assignmentOperators]. Push `value` back into the stack. 2048 * [UnlinkedExpr.assignmentOperators]. Push `value` back into the stack.
1476 * 2049 *
1477 * If the assignment operator is a prefix/postfix increment/decrement, then 2050 * If the assignment operator is a prefix/postfix increment/decrement, then
1478 * `value` is not present in the stack, so it should not be popped and the 2051 * `value` is not present in the stack, so it should not be popped and the
1479 * corresponding value of the `target` after/before update is pushed into the 2052 * corresponding value of the `target` after/before update is pushed into the
1480 * stack instead. 2053 * stack instead.
1481 */ 2054 */
1482 assignToRef, 2055 assignToRef,
1483 2056
1484 /** 2057 /**
1485 * Pop from the stack `target` and `value`. Get the name of the property from 2058 * Pop from the stack `target` and `value`. Get the name of the property from
1486 * `UnlinkedConst.strings` and assign the `value` to the named property of the 2059 * `UnlinkedConst.strings` and assign the `value` to the named property of the
1487 * `target`. This operation is used when we know that the `target` is an 2060 * `target`. This operation is used when we know that the `target` is an
1488 * object reference expression, e.g. `new Foo().a.b.c` or `a.b[0].c.d`. 2061 * object reference expression, e.g. `new Foo().a.b.c` or `a.b[0].c.d`.
1489 * Perform `target.property op= value` where `op` is the next assignment 2062 * Perform `target.property op= value` where `op` is the next assignment
1490 * operator from [UnlinkedConst.assignmentOperators]. Push `value` back into 2063 * operator from [UnlinkedExpr.assignmentOperators]. Push `value` back into
1491 * the stack. 2064 * the stack.
1492 * 2065 *
1493 * If the assignment operator is a prefix/postfix increment/decrement, then 2066 * If the assignment operator is a prefix/postfix increment/decrement, then
1494 * `value` is not present in the stack, so it should not be popped and the 2067 * `value` is not present in the stack, so it should not be popped and the
1495 * corresponding value of the `target` after/before update is pushed into the 2068 * corresponding value of the `target` after/before update is pushed into the
1496 * stack instead. 2069 * stack instead.
1497 */ 2070 */
1498 assignToProperty, 2071 assignToProperty,
1499 2072
1500 /** 2073 /**
1501 * Pop from the stack `index`, `target` and `value`. Perform 2074 * Pop from the stack `index`, `target` and `value`. Perform
1502 * `target[index] op= value` where `op` is the next assignment operator from 2075 * `target[index] op= value` where `op` is the next assignment operator from
1503 * [UnlinkedConst.assignmentOperators]. Push `value` back into the stack. 2076 * [UnlinkedExpr.assignmentOperators]. Push `value` back into the stack.
1504 * 2077 *
1505 * If the assignment operator is a prefix/postfix increment/decrement, then 2078 * If the assignment operator is a prefix/postfix increment/decrement, then
1506 * `value` is not present in the stack, so it should not be popped and the 2079 * `value` is not present in the stack, so it should not be popped and the
1507 * corresponding value of the `target` after/before update is pushed into the 2080 * corresponding value of the `target` after/before update is pushed into the
1508 * stack instead. 2081 * stack instead.
1509 */ 2082 */
1510 assignToIndex, 2083 assignToIndex,
1511 2084
1512 /** 2085 /**
1513 * Pop from the stack `index` and `target`. Push into the stack the result 2086 * Pop from the stack `index` and `target`. Push into the stack the result
1514 * of evaluation of `target[index]`. 2087 * of evaluation of `target[index]`.
1515 */ 2088 */
1516 extractIndex, 2089 extractIndex,
1517 2090
1518 /** 2091 /**
1519 * Pop the top `n` values from the stack (where `n` is obtained from 2092 * Pop the top `n` values from the stack (where `n` is obtained from
1520 * [UnlinkedConst.ints]) into a list (filled from the end) and take the next 2093 * [UnlinkedExpr.ints]) into a list (filled from the end) and take the next
1521 * `n` values from [UnlinkedConst.strings] and use the lists of names and 2094 * `n` values from [UnlinkedExpr.strings] and use the lists of names and
1522 * values to create named arguments. Then pop the top `m` values from the 2095 * values to create named arguments. Then pop the top `m` values from the
1523 * stack (where `m` is obtained from [UnlinkedConst.ints]) into a list (filled 2096 * stack (where `m` is obtained from [UnlinkedExpr.ints]) into a list (filled
1524 * from the end) and use them as positional arguments. Use the lists of 2097 * from the end) and use them as positional arguments. Use the lists of
1525 * positional and names arguments to invoke a method (or a function) with 2098 * positional and names arguments to invoke a method (or a function) with
1526 * the reference from [UnlinkedConst.references]. If `k` is nonzero (where 2099 * the reference from [UnlinkedExpr.references]. If `k` is nonzero (where
1527 * `k` is obtained from [UnlinkedConst.ints]), obtain `k` type arguments from 2100 * `k` is obtained from [UnlinkedExpr.ints]), obtain `k` type arguments from
1528 * [UnlinkedConst.references] and use them as generic type arguments for the 2101 * [UnlinkedExpr.references] and use them as generic type arguments for the
1529 * aforementioned method or function. Push the result of the invocation onto 2102 * aforementioned method or function. Push the result of the invocation onto
1530 * the stack. 2103 * the stack.
1531 * 2104 *
1532 * In general `a.b` cannot not be distinguished between: `a` is a prefix and 2105 * In general `a.b` cannot not be distinguished between: `a` is a prefix and
1533 * `b` is a top-level function; or `a` is an object and `b` is the name of a 2106 * `b` is a top-level function; or `a` is an object and `b` is the name of a
1534 * method. This operation should be used for a sequence of identifiers 2107 * method. This operation should be used for a sequence of identifiers
1535 * `a.b.b.c.d.e` ending with an invokable result. 2108 * `a.b.b.c.d.e` ending with an invokable result.
1536 */ 2109 */
1537 invokeMethodRef, 2110 invokeMethodRef,
1538 2111
1539 /** 2112 /**
1540 * Pop the top `n` values from the stack (where `n` is obtained from 2113 * Pop the top `n` values from the stack (where `n` is obtained from
1541 * [UnlinkedConst.ints]) into a list (filled from the end) and take the next 2114 * [UnlinkedExpr.ints]) into a list (filled from the end) and take the next
1542 * `n` values from [UnlinkedConst.strings] and use the lists of names and 2115 * `n` values from [UnlinkedExpr.strings] and use the lists of names and
1543 * values to create named arguments. Then pop the top `m` values from the 2116 * values to create named arguments. Then pop the top `m` values from the
1544 * stack (where `m` is obtained from [UnlinkedConst.ints]) into a list (filled 2117 * stack (where `m` is obtained from [UnlinkedExpr.ints]) into a list (filled
1545 * from the end) and use them as positional arguments. Use the lists of 2118 * from the end) and use them as positional arguments. Use the lists of
1546 * positional and names arguments to invoke the method with the name from 2119 * positional and names arguments to invoke the method with the name from
1547 * [UnlinkedConst.strings] of the target popped from the stack. If `k` is 2120 * [UnlinkedExpr.strings] of the target popped from the stack. If `k` is
1548 * nonzero (where `k` is obtained from [UnlinkedConst.ints]), obtain `k` type 2121 * nonzero (where `k` is obtained from [UnlinkedExpr.ints]), obtain `k` type
1549 * arguments from [UnlinkedConst.references] and use them as generic type 2122 * arguments from [UnlinkedExpr.references] and use them as generic type
1550 * arguments for the aforementioned method. Push the result of the 2123 * arguments for the aforementioned method. Push the result of the
1551 * invocation onto the stack. 2124 * invocation onto the stack.
1552 * 2125 *
1553 * This operation should be used for invocation of a method invocation 2126 * This operation should be used for invocation of a method invocation
1554 * where `target` is known to be an object instance. 2127 * where `target` is known to be an object instance.
1555 */ 2128 */
1556 invokeMethod, 2129 invokeMethod,
1557 2130
1558 /** 2131 /**
1559 * Begin a new cascade section. Duplicate the top value of the stack. 2132 * Begin a new cascade section. Duplicate the top value of the stack.
1560 */ 2133 */
1561 cascadeSectionBegin, 2134 cascadeSectionBegin,
1562 2135
1563 /** 2136 /**
1564 * End a new cascade section. Pop the top value from the stack and throw it 2137 * End a new cascade section. Pop the top value from the stack and throw it
1565 * away. 2138 * away.
1566 */ 2139 */
1567 cascadeSectionEnd, 2140 cascadeSectionEnd,
1568 2141
1569 /** 2142 /**
1570 * Pop the top value from the stack and cast it to the type with reference 2143 * Pop the top value from the stack and cast it to the type with reference
1571 * from [UnlinkedConst.references], push the result into the stack. 2144 * from [UnlinkedExpr.references], push the result into the stack.
1572 */ 2145 */
1573 typeCast, 2146 typeCast,
1574 2147
1575 /** 2148 /**
1576 * Pop the top value from the stack and check whether it is a subclass of the 2149 * Pop the top value from the stack and check whether it is a subclass of the
1577 * type with reference from [UnlinkedConst.references], push the result into 2150 * type with reference from [UnlinkedExpr.references], push the result into
1578 * the stack. 2151 * the stack.
1579 */ 2152 */
1580 typeCheck, 2153 typeCheck,
1581 2154
1582 /** 2155 /**
1583 * Pop the top value from the stack and raise an exception with this value. 2156 * Pop the top value from the stack and raise an exception with this value.
1584 */ 2157 */
1585 throwException, 2158 throwException,
1586 2159
1587 /** 2160 /**
1588 * Obtain two values `n` and `m` from [UnlinkedConst.ints]. Then, starting at 2161 * Obtain two values `n` and `m` from [UnlinkedExpr.ints]. Then, starting at
1589 * the executable element for the expression being evaluated, if n > 0, pop to 2162 * the executable element for the expression being evaluated, if n > 0, pop to
1590 * the nth enclosing function element. Then, push the mth local function of 2163 * the nth enclosing function element. Then, push the mth local function of
1591 * that element onto the stack. 2164 * that element onto the stack.
1592 */ 2165 */
1593 pushLocalFunctionReference, 2166 pushLocalFunctionReference,
1594 } 2167 }
1595 2168
1596 /** 2169 /**
1597 * Unlinked summary information about a constructor initializer.
1598 */
1599 abstract class UnlinkedConstructorInitializer extends base.SummaryClass {
1600 /**
1601 * If there are `m` [arguments] and `n` [argumentNames], then each argument
1602 * from [arguments] with index `i` such that `n + i - m >= 0`, should be used
1603 * with the name at `n + i - m`.
1604 */
1605 @Id(4)
1606 List<String> get argumentNames;
1607
1608 /**
1609 * If [kind] is `thisInvocation` or `superInvocation`, the arguments of the
1610 * invocation. Otherwise empty.
1611 */
1612 @Id(3)
1613 List<UnlinkedConst> get arguments;
1614
1615 /**
1616 * If [kind] is `field`, the expression of the field initializer.
1617 * Otherwise `null`.
1618 */
1619 @Id(1)
1620 UnlinkedConst get expression;
1621
1622 /**
1623 * The kind of the constructor initializer (field, redirect, super).
1624 */
1625 @Id(2)
1626 UnlinkedConstructorInitializerKind get kind;
1627
1628 /**
1629 * If [kind] is `field`, the name of the field declared in the class. If
1630 * [kind] is `thisInvocation`, the name of the constructor, declared in this
1631 * class, to redirect to. If [kind] is `superInvocation`, the name of the
1632 * constructor, declared in the superclass, to invoke.
1633 */
1634 @Id(0)
1635 String get name;
1636 }
1637
1638 /**
1639 * Enum used to indicate the kind of an constructor initializer.
1640 */
1641 enum UnlinkedConstructorInitializerKind {
1642 /**
1643 * Initialization of a field.
1644 */
1645 field,
1646
1647 /**
1648 * Invocation of a constructor in the same class.
1649 */
1650 thisInvocation,
1651
1652 /**
1653 * Invocation of a superclass' constructor.
1654 */
1655 superInvocation
1656 }
1657
1658 /**
1659 * Unlinked summary information about a documentation comment.
1660 */
1661 abstract class UnlinkedDocumentationComment extends base.SummaryClass {
1662 /**
1663 * Length of the documentation comment (prior to replacing '\r\n' with '\n').
1664 */
1665 @Id(0)
1666 @deprecated
1667 int get length;
1668
1669 /**
1670 * Offset of the beginning of the documentation comment relative to the
1671 * beginning of the file.
1672 */
1673 @Id(2)
1674 @deprecated
1675 int get offset;
1676
1677 /**
1678 * Text of the documentation comment, with '\r\n' replaced by '\n'.
1679 *
1680 * References appearing within the doc comment in square brackets are not
1681 * specially encoded.
1682 */
1683 @Id(1)
1684 String get text;
1685 }
1686
1687 /**
1688 * Unlinked summary information about an enum declaration.
1689 */
1690 abstract class UnlinkedEnum extends base.SummaryClass {
1691 /**
1692 * Annotations for this enum.
1693 */
1694 @Id(4)
1695 List<UnlinkedConst> get annotations;
1696
1697 /**
1698 * Code range of the enum.
1699 */
1700 @informative
1701 @Id(5)
1702 CodeRange get codeRange;
1703
1704 /**
1705 * Documentation comment for the enum, or `null` if there is no documentation
1706 * comment.
1707 */
1708 @informative
1709 @Id(3)
1710 UnlinkedDocumentationComment get documentationComment;
1711
1712 /**
1713 * Name of the enum type.
1714 */
1715 @Id(0)
1716 String get name;
1717
1718 /**
1719 * Offset of the enum name relative to the beginning of the file.
1720 */
1721 @informative
1722 @Id(1)
1723 int get nameOffset;
1724
1725 /**
1726 * Values listed in the enum declaration, in declaration order.
1727 */
1728 @Id(2)
1729 List<UnlinkedEnumValue> get values;
1730 }
1731
1732 /**
1733 * Unlinked summary information about a single enumerated value in an enum
1734 * declaration.
1735 */
1736 abstract class UnlinkedEnumValue extends base.SummaryClass {
1737 /**
1738 * Documentation comment for the enum value, or `null` if there is no
1739 * documentation comment.
1740 */
1741 @informative
1742 @Id(2)
1743 UnlinkedDocumentationComment get documentationComment;
1744
1745 /**
1746 * Name of the enumerated value.
1747 */
1748 @Id(0)
1749 String get name;
1750
1751 /**
1752 * Offset of the enum value name relative to the beginning of the file.
1753 */
1754 @informative
1755 @Id(1)
1756 int get nameOffset;
1757 }
1758
1759 /**
1760 * Unlinked summary information about a function, method, getter, or setter
1761 * declaration.
1762 */
1763 abstract class UnlinkedExecutable extends base.SummaryClass {
1764 /**
1765 * Annotations for this executable.
1766 */
1767 @Id(6)
1768 List<UnlinkedConst> get annotations;
1769
1770 /**
1771 * If this executable's function body is declared using `=>`, the expression
1772 * to the right of the `=>`. May be omitted if neither type inference nor
1773 * constant evaluation depends on the function body.
1774 */
1775 @Id(29)
1776 UnlinkedConst get bodyExpr;
1777
1778 /**
1779 * Code range of the executable.
1780 */
1781 @informative
1782 @Id(26)
1783 CodeRange get codeRange;
1784
1785 /**
1786 * If a constant [UnlinkedExecutableKind.constructor], the constructor
1787 * initializers. Otherwise empty.
1788 */
1789 @Id(14)
1790 List<UnlinkedConstructorInitializer> get constantInitializers;
1791
1792 /**
1793 * If [kind] is [UnlinkedExecutableKind.constructor] and [isConst] is `true`,
1794 * a nonzero slot id which is unique within this compilation unit. If this id
1795 * is found in [LinkedUnit.constCycles], then this constructor is part of a
1796 * cycle.
1797 *
1798 * Otherwise, zero.
1799 */
1800 @Id(25)
1801 int get constCycleSlot;
1802
1803 /**
1804 * Documentation comment for the executable, or `null` if there is no
1805 * documentation comment.
1806 */
1807 @informative
1808 @Id(7)
1809 UnlinkedDocumentationComment get documentationComment;
1810
1811 /**
1812 * If this executable's return type is inferable, nonzero slot id
1813 * identifying which entry in [LinkedUnit.types] contains the inferred
1814 * return type. If there is no matching entry in [LinkedUnit.types], then
1815 * no return type was inferred for this variable, so its static type is
1816 * `dynamic`.
1817 */
1818 @Id(5)
1819 int get inferredReturnTypeSlot;
1820
1821 /**
1822 * Indicates whether the executable is declared using the `abstract` keyword.
1823 */
1824 @Id(10)
1825 bool get isAbstract;
1826
1827 /**
1828 * Indicates whether the executable has body marked as being asynchronous.
1829 */
1830 @informative
1831 @Id(27)
1832 bool get isAsynchronous;
1833
1834 /**
1835 * Indicates whether the executable is declared using the `const` keyword.
1836 */
1837 @Id(12)
1838 bool get isConst;
1839
1840 /**
1841 * Indicates whether the executable is declared using the `external` keyword.
1842 */
1843 @Id(11)
1844 bool get isExternal;
1845
1846 /**
1847 * Indicates whether the executable is declared using the `factory` keyword.
1848 */
1849 @Id(8)
1850 bool get isFactory;
1851
1852 /**
1853 * Indicates whether the executable has body marked as being a generator.
1854 */
1855 @informative
1856 @Id(28)
1857 bool get isGenerator;
1858
1859 /**
1860 * Indicates whether the executable is a redirected constructor.
1861 */
1862 @Id(13)
1863 bool get isRedirectedConstructor;
1864
1865 /**
1866 * Indicates whether the executable is declared using the `static` keyword.
1867 *
1868 * Note that for top level executables, this flag is false, since they are
1869 * not declared using the `static` keyword (even though they are considered
1870 * static for semantic purposes).
1871 */
1872 @Id(9)
1873 bool get isStatic;
1874
1875 /**
1876 * The kind of the executable (function/method, getter, setter, or
1877 * constructor).
1878 */
1879 @Id(4)
1880 UnlinkedExecutableKind get kind;
1881
1882 /**
1883 * The list of local functions.
1884 */
1885 @Id(18)
1886 List<UnlinkedExecutable> get localFunctions;
1887
1888 /**
1889 * The list of local labels.
1890 */
1891 @informative
1892 @Id(22)
1893 List<UnlinkedLabel> get localLabels;
1894
1895 /**
1896 * The list of local variables.
1897 */
1898 @informative
1899 @Id(19)
1900 List<UnlinkedVariable> get localVariables;
1901
1902 /**
1903 * Name of the executable. For setters, this includes the trailing "=". For
1904 * named constructors, this excludes the class name and excludes the ".".
1905 * For unnamed constructors, this is the empty string.
1906 */
1907 @Id(1)
1908 String get name;
1909
1910 /**
1911 * If [kind] is [UnlinkedExecutableKind.constructor] and [name] is not empty,
1912 * the offset of the end of the constructor name. Otherwise zero.
1913 */
1914 @informative
1915 @Id(23)
1916 int get nameEnd;
1917
1918 /**
1919 * Offset of the executable name relative to the beginning of the file. For
1920 * named constructors, this excludes the class name and excludes the ".".
1921 * For unnamed constructors, this is the offset of the class name (i.e. the
1922 * offset of the second "C" in "class C { C(); }").
1923 */
1924 @informative
1925 @Id(0)
1926 int get nameOffset;
1927
1928 /**
1929 * Parameters of the executable, if any. Note that getters have no
1930 * parameters (hence this will be the empty list), and setters have a single
1931 * parameter.
1932 */
1933 @Id(2)
1934 List<UnlinkedParam> get parameters;
1935
1936 /**
1937 * If [kind] is [UnlinkedExecutableKind.constructor] and [name] is not empty,
1938 * the offset of the period before the constructor name. Otherwise zero.
1939 */
1940 @informative
1941 @Id(24)
1942 int get periodOffset;
1943
1944 /**
1945 * If [isRedirectedConstructor] and [isFactory] are both `true`, the
1946 * constructor to which this constructor redirects; otherwise empty.
1947 */
1948 @Id(15)
1949 EntityRef get redirectedConstructor;
1950
1951 /**
1952 * If [isRedirectedConstructor] is `true` and [isFactory] is `false`, the
1953 * name of the constructor that this constructor redirects to; otherwise
1954 * empty.
1955 */
1956 @Id(17)
1957 String get redirectedConstructorName;
1958
1959 /**
1960 * Declared return type of the executable. Absent if the executable is a
1961 * constructor or the return type is implicit. Absent for executables
1962 * associated with variable initializers and closures, since these
1963 * executables may have return types that are not accessible via direct
1964 * imports.
1965 */
1966 @Id(3)
1967 EntityRef get returnType;
1968
1969 /**
1970 * Type parameters of the executable, if any. Empty if support for generic
1971 * method syntax is disabled.
1972 */
1973 @Id(16)
1974 List<UnlinkedTypeParam> get typeParameters;
1975
1976 /**
1977 * If a local function, the length of the visible range; zero otherwise.
1978 */
1979 @informative
1980 @Id(20)
1981 int get visibleLength;
1982
1983 /**
1984 * If a local function, the beginning of the visible range; zero otherwise.
1985 */
1986 @informative
1987 @Id(21)
1988 int get visibleOffset;
1989 }
1990
1991 /**
1992 * Enum used to indicate the kind of an executable.
1993 */
1994 enum UnlinkedExecutableKind {
1995 /**
1996 * Executable is a function or method.
1997 */
1998 functionOrMethod,
1999
2000 /**
2001 * Executable is a getter.
2002 */
2003 getter,
2004
2005 /**
2006 * Executable is a setter.
2007 */
2008 setter,
2009
2010 /**
2011 * Executable is a constructor.
2012 */
2013 constructor
2014 }
2015
2016 /**
2017 * Unlinked summary information about an export declaration (stored outside
2018 * [UnlinkedPublicNamespace]).
2019 */
2020 abstract class UnlinkedExportNonPublic extends base.SummaryClass {
2021 /**
2022 * Annotations for this export directive.
2023 */
2024 @Id(3)
2025 List<UnlinkedConst> get annotations;
2026
2027 /**
2028 * Offset of the "export" keyword.
2029 */
2030 @informative
2031 @Id(0)
2032 int get offset;
2033
2034 /**
2035 * End of the URI string (including quotes) relative to the beginning of the
2036 * file.
2037 */
2038 @informative
2039 @Id(1)
2040 int get uriEnd;
2041
2042 /**
2043 * Offset of the URI string (including quotes) relative to the beginning of
2044 * the file.
2045 */
2046 @informative
2047 @Id(2)
2048 int get uriOffset;
2049 }
2050
2051 /**
2052 * Unlinked summary information about an export declaration (stored inside
2053 * [UnlinkedPublicNamespace]).
2054 */
2055 abstract class UnlinkedExportPublic extends base.SummaryClass {
2056 /**
2057 * Combinators contained in this export declaration.
2058 */
2059 @Id(1)
2060 List<UnlinkedCombinator> get combinators;
2061
2062 /**
2063 * Configurations used to control which library will actually be loaded at
2064 * run-time.
2065 */
2066 @Id(2)
2067 List<UnlinkedConfiguration> get configurations;
2068
2069 /**
2070 * URI used in the source code to reference the exported library.
2071 */
2072 @Id(0)
2073 String get uri;
2074 }
2075
2076 /**
2077 * Enum representing the various kinds of assignment operations combined
2078 * with:
2079 * [UnlinkedConstOperation.assignToRef],
2080 * [UnlinkedConstOperation.assignToProperty],
2081 * [UnlinkedConstOperation.assignToIndex].
2082 */
2083 enum UnlinkedExprAssignOperator {
2084 /**
2085 * Perform simple assignment `target = operand`.
2086 */
2087 assign,
2088
2089 /**
2090 * Perform `target ??= operand`.
2091 */
2092 ifNull,
2093
2094 /**
2095 * Perform `target *= operand`.
2096 */
2097 multiply,
2098
2099 /**
2100 * Perform `target /= operand`.
2101 */
2102 divide,
2103
2104 /**
2105 * Perform `target ~/= operand`.
2106 */
2107 floorDivide,
2108
2109 /**
2110 * Perform `target %= operand`.
2111 */
2112 modulo,
2113
2114 /**
2115 * Perform `target += operand`.
2116 */
2117 plus,
2118
2119 /**
2120 * Perform `target -= operand`.
2121 */
2122 minus,
2123
2124 /**
2125 * Perform `target <<= operand`.
2126 */
2127 shiftLeft,
2128
2129 /**
2130 * Perform `target >>= operand`.
2131 */
2132 shiftRight,
2133
2134 /**
2135 * Perform `target &= operand`.
2136 */
2137 bitAnd,
2138
2139 /**
2140 * Perform `target ^= operand`.
2141 */
2142 bitXor,
2143
2144 /**
2145 * Perform `target |= operand`.
2146 */
2147 bitOr,
2148
2149 /**
2150 * Perform `++target`.
2151 */
2152 prefixIncrement,
2153
2154 /**
2155 * Perform `--target`.
2156 */
2157 prefixDecrement,
2158
2159 /**
2160 * Perform `target++`.
2161 */
2162 postfixIncrement,
2163
2164 /**
2165 * Perform `target++`.
2166 */
2167 postfixDecrement,
2168 }
2169
2170 /**
2171 * Unlinked summary information about an import declaration. 2170 * Unlinked summary information about an import declaration.
2172 */ 2171 */
2173 abstract class UnlinkedImport extends base.SummaryClass { 2172 abstract class UnlinkedImport extends base.SummaryClass {
2174 /** 2173 /**
2175 * Annotations for this import declaration. 2174 * Annotations for this import declaration.
2176 */ 2175 */
2177 @Id(8) 2176 @Id(8)
2178 List<UnlinkedConst> get annotations; 2177 List<UnlinkedExpr> get annotations;
2179 2178
2180 /** 2179 /**
2181 * Combinators contained in this import declaration. 2180 * Combinators contained in this import declaration.
2182 */ 2181 */
2183 @Id(4) 2182 @Id(4)
2184 List<UnlinkedCombinator> get combinators; 2183 List<UnlinkedCombinator> get combinators;
2185 2184
2186 /** 2185 /**
2187 * Configurations used to control which library will actually be loaded at 2186 * Configurations used to control which library will actually be loaded at
2188 * run-time. 2187 * run-time.
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
2282 } 2281 }
2283 2282
2284 /** 2283 /**
2285 * Unlinked summary information about a function parameter. 2284 * Unlinked summary information about a function parameter.
2286 */ 2285 */
2287 abstract class UnlinkedParam extends base.SummaryClass { 2286 abstract class UnlinkedParam extends base.SummaryClass {
2288 /** 2287 /**
2289 * Annotations for this parameter. 2288 * Annotations for this parameter.
2290 */ 2289 */
2291 @Id(9) 2290 @Id(9)
2292 List<UnlinkedConst> get annotations; 2291 List<UnlinkedExpr> get annotations;
2293 2292
2294 /** 2293 /**
2295 * Code range of the parameter. 2294 * Code range of the parameter.
2296 */ 2295 */
2297 @informative 2296 @informative
2298 @Id(7) 2297 @Id(7)
2299 CodeRange get codeRange; 2298 CodeRange get codeRange;
2300 2299
2301 /** 2300 /**
2302 * If the parameter has a default value, the source text of the constant 2301 * If the parameter has a default value, the source text of the constant
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
2420 } 2419 }
2421 2420
2422 /** 2421 /**
2423 * Unlinked summary information about a part declaration. 2422 * Unlinked summary information about a part declaration.
2424 */ 2423 */
2425 abstract class UnlinkedPart extends base.SummaryClass { 2424 abstract class UnlinkedPart extends base.SummaryClass {
2426 /** 2425 /**
2427 * Annotations for this part declaration. 2426 * Annotations for this part declaration.
2428 */ 2427 */
2429 @Id(2) 2428 @Id(2)
2430 List<UnlinkedConst> get annotations; 2429 List<UnlinkedExpr> get annotations;
2431 2430
2432 /** 2431 /**
2433 * End of the URI string (including quotes) relative to the beginning of the 2432 * End of the URI string (including quotes) relative to the beginning of the
2434 * file. 2433 * file.
2435 */ 2434 */
2436 @informative 2435 @informative
2437 @Id(0) 2436 @Id(0)
2438 int get uriEnd; 2437 int get uriEnd;
2439 2438
2440 /** 2439 /**
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
2544 } 2543 }
2545 2544
2546 /** 2545 /**
2547 * Unlinked summary information about a typedef declaration. 2546 * Unlinked summary information about a typedef declaration.
2548 */ 2547 */
2549 abstract class UnlinkedTypedef extends base.SummaryClass { 2548 abstract class UnlinkedTypedef extends base.SummaryClass {
2550 /** 2549 /**
2551 * Annotations for this typedef. 2550 * Annotations for this typedef.
2552 */ 2551 */
2553 @Id(4) 2552 @Id(4)
2554 List<UnlinkedConst> get annotations; 2553 List<UnlinkedExpr> get annotations;
2555 2554
2556 /** 2555 /**
2557 * Code range of the typedef. 2556 * Code range of the typedef.
2558 */ 2557 */
2559 @informative 2558 @informative
2560 @Id(7) 2559 @Id(7)
2561 CodeRange get codeRange; 2560 CodeRange get codeRange;
2562 2561
2563 /** 2562 /**
2564 * Documentation comment for the typedef, or `null` if there is no 2563 * Documentation comment for the typedef, or `null` if there is no
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
2601 } 2600 }
2602 2601
2603 /** 2602 /**
2604 * Unlinked summary information about a type parameter declaration. 2603 * Unlinked summary information about a type parameter declaration.
2605 */ 2604 */
2606 abstract class UnlinkedTypeParam extends base.SummaryClass { 2605 abstract class UnlinkedTypeParam extends base.SummaryClass {
2607 /** 2606 /**
2608 * Annotations for this type parameter. 2607 * Annotations for this type parameter.
2609 */ 2608 */
2610 @Id(3) 2609 @Id(3)
2611 List<UnlinkedConst> get annotations; 2610 List<UnlinkedExpr> get annotations;
2612 2611
2613 /** 2612 /**
2614 * Bound of the type parameter, if a bound is explicitly declared. Otherwise 2613 * Bound of the type parameter, if a bound is explicitly declared. Otherwise
2615 * null. 2614 * null.
2616 */ 2615 */
2617 @Id(2) 2616 @Id(2)
2618 EntityRef get bound; 2617 EntityRef get bound;
2619 2618
2620 /** 2619 /**
2621 * Code range of the type parameter. 2620 * Code range of the type parameter.
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
2706 * Indicates whether the unit contains a "part of" declaration. 2705 * Indicates whether the unit contains a "part of" declaration.
2707 */ 2706 */
2708 @Id(18) 2707 @Id(18)
2709 bool get isPartOf; 2708 bool get isPartOf;
2710 2709
2711 /** 2710 /**
2712 * Annotations for the library declaration, or the empty list if there is no 2711 * Annotations for the library declaration, or the empty list if there is no
2713 * library declaration. 2712 * library declaration.
2714 */ 2713 */
2715 @Id(14) 2714 @Id(14)
2716 List<UnlinkedConst> get libraryAnnotations; 2715 List<UnlinkedExpr> get libraryAnnotations;
2717 2716
2718 /** 2717 /**
2719 * Documentation comment for the library, or `null` if there is no 2718 * Documentation comment for the library, or `null` if there is no
2720 * documentation comment. 2719 * documentation comment.
2721 */ 2720 */
2722 @informative 2721 @informative
2723 @Id(9) 2722 @Id(9)
2724 UnlinkedDocumentationComment get libraryDocumentationComment; 2723 UnlinkedDocumentationComment get libraryDocumentationComment;
2725 2724
2726 /** 2725 /**
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
2789 2788
2790 /** 2789 /**
2791 * Unlinked summary information about a top level variable, local variable, or 2790 * Unlinked summary information about a top level variable, local variable, or
2792 * a field. 2791 * a field.
2793 */ 2792 */
2794 abstract class UnlinkedVariable extends base.SummaryClass { 2793 abstract class UnlinkedVariable extends base.SummaryClass {
2795 /** 2794 /**
2796 * Annotations for this variable. 2795 * Annotations for this variable.
2797 */ 2796 */
2798 @Id(8) 2797 @Id(8)
2799 List<UnlinkedConst> get annotations; 2798 List<UnlinkedExpr> get annotations;
2800 2799
2801 /** 2800 /**
2802 * Code range of the variable. 2801 * Code range of the variable.
2803 */ 2802 */
2804 @informative 2803 @informative
2805 @Id(5) 2804 @Id(5)
2806 CodeRange get codeRange; 2805 CodeRange get codeRange;
2807 2806
2808 /** 2807 /**
2809 * Documentation comment for the variable, or `null` if there is no 2808 * Documentation comment for the variable, or `null` if there is no
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
2888 @Id(11) 2887 @Id(11)
2889 int get visibleLength; 2888 int get visibleLength;
2890 2889
2891 /** 2890 /**
2892 * If a local variable, the beginning of the visible range; zero otherwise. 2891 * If a local variable, the beginning of the visible range; zero otherwise.
2893 */ 2892 */
2894 @informative 2893 @informative
2895 @Id(12) 2894 @Id(12)
2896 int get visibleOffset; 2895 int get visibleOffset;
2897 } 2896 }
OLDNEW
« no previous file with comments | « pkg/analyzer/lib/src/summary/format.fbs ('k') | pkg/analyzer/lib/src/summary/link.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698