| 160 | // |
| 161 | |
| 162 | void CME_expr(gpre_nod* node, gpre_req* request) |
| 163 | { |
| 164 | gpre_ctx* context; |
| 165 | gpre_fld field; |
| 166 | const ref* reference; |
| 167 | TEXT s[128]; |
| 168 | |
| 169 | switch (node->nod_type) |
| 170 | { |
| 171 | case nod_field: |
| 172 | if (!(reference = (ref*) node->nod_arg[0])) |
| 173 | { |
| 174 | CPR_error("CME_expr: reference missing"); |
| 175 | return; |
| 176 | } |
| 177 | cmp_field(node, request); |
| 178 | if (reference->ref_flags & REF_fetch_array) |
| 179 | cmp_array(node, request); |
| 180 | return; |
| 181 | |
| 182 | case nod_array: |
| 183 | cmp_array_element(node, request); |
| 184 | return; |
| 185 | |
| 186 | case nod_index: |
| 187 | CME_expr(node->nod_arg[0], request); |
| 188 | return; |
| 189 | |
| 190 | case nod_value: |
| 191 | cmp_value(node, request); |
| 192 | if ((reference = (ref*) node->nod_arg[0]) && (reference->ref_flags & REF_fetch_array)) |
| 193 | { |
| 194 | cmp_array(node, request); |
| 195 | } |
| 196 | return; |
| 197 | |
| 198 | case nod_negate: |
| 199 | if (node->nod_arg[0]->nod_type != nod_literal) |
| 200 | break; |
| 201 | case nod_literal: |
| 202 | cmp_literal(node, request); |
| 203 | return; |
| 204 | |
| 205 | case nod_like: |
| 206 | { |
| 207 | request->add_byte((node->nod_count == 2) ? blr_like : blr_ansi_like); |
| 208 | gpre_nod** ptr = node->nod_arg; |
| 209 | for (const gpre_nod* const* const end = ptr + node->nod_count; ptr < end; ptr++) |
| 210 | { |
| 211 | CME_expr(*ptr, request); |
| 212 | } |
| 213 | return; |
| 214 | } |
| 215 | |
| 216 | case nod_udf: |
| 217 | cmp_udf(node, request); |
| 218 | return; |
| 219 |
no test coverage detected