Spicy
condition-test.h
1 // Copyright (c) 2020-now by the Zeek Project. See LICENSE for details.
2 
3 #pragma once
4 
5 #include <utility>
6 
7 #include <hilti/ast/expression.h>
8 #include <hilti/ast/type.h>
9 #include <hilti/ast/types/result.h>
10 #include <hilti/ast/types/void.h>
11 
12 namespace hilti::expression {
13 
15 class ConditionTest : public Expression {
16 public:
17  auto condition() const { return child<Expression>(1); }
18  auto error() const { return child<Expression>(2); }
19 
20  QualifiedType* type() const final { return child<QualifiedType>(0); }
21 
22  void setCondition(ASTContext* ctx, Expression* cond) { setChild(ctx, 1, cond); }
23  void setError(ASTContext* ctx, Expression* error) { setChild(ctx, 2, error); }
24 
25  static auto create(ASTContext* ctx, Expression* cond, Expression* error, Meta meta = {}) {
26  auto* result =
28  type::Result::create(ctx, QualifiedType::create(ctx, type::Void::create(ctx),
29  Constness::Const)),
30  Constness::Const);
31  return ctx->make<ConditionTest>(ctx, {result, cond, error}, std::move(meta));
32  }
33 
34 protected:
35  ConditionTest(ASTContext* ctx, Nodes children, Meta meta)
36  : Expression(ctx, NodeTags, std::move(children), std::move(meta)) {}
37 
38  HILTI_NODE_1(expression::ConditionTest, Expression, final);
39 };
40 
41 } // namespace hilti::expression
Definition: ast-context.h:121
Definition: expression.h:15
void setChild(ASTContext *ctx, size_t idx, Node *n)
Definition: node.h:602
const auto & children() const
Definition: node.h:364
const auto & meta() const
Definition: node.h:306
Definition: type.h:362
static auto create(ASTContext *ctx, UnqualifiedType *t, Constness const_, Meta m=Meta())
Definition: type.h:427
Definition: condition-test.h:15
QualifiedType * type() const final
Definition: condition-test.h:20