| 279 | } |
| 280 | |
| 281 | bool Expression::IsBound() const { |
| 282 | if (type() == nullptr) return false; |
| 283 | |
| 284 | if (const Call* call = this->call()) { |
| 285 | if (call->kernel == nullptr) return false; |
| 286 | |
| 287 | for (const Expression& arg : call->arguments) { |
| 288 | if (!arg.IsBound()) return false; |
| 289 | } |
| 290 | } |
| 291 | |
| 292 | return true; |
| 293 | } |
| 294 | |
| 295 | bool Expression::IsScalarExpression() const { |
| 296 | if (auto lit = literal()) { |