|
14 | 14 | * The interpretation of a row is similar to API-graphs with a left-to-right |
15 | 15 | * reading. |
16 | 16 | * 1. The `namespace` column selects a namespace. |
17 | | - * 2. The `type` column selects a type within that namespace. |
| 17 | + * 2. The `type` column selects a type within that namespace. This column can |
| 18 | + * introduce template names that can be mentioned in the `signature` column. |
| 19 | + * For example, `vector<T,Allocator>` introduces the template names `T` and |
| 20 | + * `Allocator`. |
18 | 21 | * 3. The `subtypes` is a boolean that indicates whether to jump to an |
19 | 22 | * arbitrary subtype of that type. Set this to `false` if leaving the `type` |
20 | 23 | * blank (for example, a free function). |
21 | 24 | * 4. The `name` column optionally selects a specific named member of the type. |
| 25 | + * Like the `type` column, this column can introduce template names that can |
| 26 | + * be mentioned in the `signature` column. For example, `insert<InputIt>` |
| 27 | + * introduces the template name `InputIt`. |
22 | 28 | * 5. The `signature` column optionally restricts the named member. If |
23 | 29 | * `signature` is blank then no such filtering is done. The format of the |
24 | 30 | * signature is a comma-separated list of types enclosed in parentheses. The |
|
44 | 50 | * One or more "*" can be added as an argument to indicate indirection, for |
45 | 51 | * example, "ReturnValue[*]" indicates the first indirection of the return |
46 | 52 | * value. |
| 53 | + * The special symbol `@` can be used to specify an arbitrary (but fixed) |
| 54 | + * number of indirections. For example, the `input` column `Argument[*@0]` |
| 55 | + * indicates one or more indirections of the 0th argument. |
47 | 56 | * |
48 | 57 | * An `output` can be either: |
49 | 58 | * - "": Selects a read of a selected field. |
|
65 | 74 | * One or more "*" can be added as an argument to indicate indirection, for |
66 | 75 | * example, "ReturnValue[*]" indicates the first indirection of the return |
67 | 76 | * value. |
| 77 | + * The special symbol `@` can be used to specify an arbitrary (but fixed) |
| 78 | + * number of indirections. For example, the `output` column |
| 79 | + * `ReturnValue[*@0]` indicates one or more indirections of the return |
| 80 | + * value. |
| 81 | + * Note: The symbol `@` only ever takes a single value across a row. Thus, |
| 82 | + * the (`input`, `output`) pair `("Argument[*@0]", "ReturnValue[@]")` |
| 83 | + * represents: |
| 84 | + * - flow from the _first_ indirection of the 0th argument to the return |
| 85 | + * value, and |
| 86 | + * - flow from the _second_ indirection of the 0th argument to the first |
| 87 | + * indirection of the return value, etc. |
68 | 88 | * 8. The `kind` column is a tag that can be referenced from QL to determine to |
69 | 89 | * which classes the interpreted elements should be added. For example, for |
70 | 90 | * sources "remote" indicates a default remote flow source, and for summaries |
|
0 commit comments