| 261 | } |
| 262 | |
| 263 | ExprPtr getSpecialForm( |
| 264 | const core::QueryConfig& config, |
| 265 | const std::string& name, |
| 266 | const TypePtr& type, |
| 267 | std::vector<ExprPtr>&& compiledChildren, |
| 268 | bool trackCpuUsage) { |
| 269 | // If we just check the output of constructSpecialForm we'll have moved |
| 270 | // compiledChildren, and if the function isn't a special form we'll still need |
| 271 | // compiledChildren. Splitting the check in two avoids this use after move. |
| 272 | if (isFunctionCallToSpecialFormRegistered(name)) { |
| 273 | return constructSpecialForm( |
| 274 | name, type, std::move(compiledChildren), trackCpuUsage, config); |
| 275 | } |
| 276 | |
| 277 | return nullptr; |
| 278 | } |
| 279 | |
| 280 | void captureFieldReference( |
| 281 | FieldReference* reference, |
no test coverage detected