@@ -64,10 +64,22 @@ Each object of this array has 3 fields:
64
64
This must be name of type without any qualifiers, like 'const' or 'volatile'.
65
65
- `memberName` - name of member of this type.
66
66
- `lengthExpression` - expression to be evaluated to get array length.
67
- It is not just member name that contain array length - this is
68
- expression that getting evaluated.
69
- It evaluates using concatenation like `((typeName)variable)->${lengthExpression}`.
70
- I.e. if you add `+ 1` - it will be applied.
67
+
68
+ Length expression can be in 2 forms:
69
+
70
+ 1. Member name concatenated to parent object.
71
+
72
+ In such case `lengthExpression` is just *concatenated* to parent object as
73
+ `parent->lengthExpression`. As it is concatenated, then you can add some
74
+ other expressions to it, i.e. `some_member + 1`.
75
+ 2. Generic expression
76
+
77
+ `lengthExpression` represents any expression which must be evaluated to
78
+ some number (integer). This expression starts with `!` to distinguish between
79
+ this form and member name form.
80
+
81
+ Note: in both cases you can refer to parent object using `{}`, i.e. `!{}->member1 + {}->member2`
82
+ or the same in member form `member1 + {}->member2`.
71
83
72
84
Examples:
73
85
@@ -87,9 +99,9 @@ Examples:
87
99
"lengthExpression": "nreaders + 1"
88
100
},
89
101
{
90
- "typeName": "EPQState ",
91
- "memberName": "relsubs_slot ",
92
- "lengthExpression": "parentestate->es_range_table_size "
102
+ "typeName": "RelOptInfo ",
103
+ "memberName": "attr_needed ",
104
+ "lengthExpression": "!{}->max_attr - {}->min_attr + 1 "
93
105
}
94
106
]
95
107
}
0 commit comments