Joos1W Compiler Framework
All Classes Functions Typedefs Pages
Expr.h
1 #pragma once
2 
3 #include "ast/AstNode.h"
4 #include "ast/ExprNode.h"
5 #include "diagnostics/Location.h"
6 
7 namespace ast {
8 
9 class Expr {
10 public:
11  Expr(ExprNodeList rpn_ops, SourceRange loc, ScopeID const* scope)
12  : rpn_ops{rpn_ops}, loc_{loc}, scope_{scope} {}
13  std::ostream& print(std::ostream& os, int indentation) const;
14  int printDotNode(DotPrinter& dp) const;
15  auto nodes() const { return rpn_ops.nodes(); }
16  auto tail() const { return rpn_ops.tail(); }
17  auto list() const { return rpn_ops; }
18  auto location() const { return loc_; }
19  void dump() const;
20  auto mut_nodes() { return rpn_ops.mut_nodes(); }
21  void replace(ExprNodeList new_list) { rpn_ops = new_list; }
22  auto scope() const { return scope_; }
23  void setScope(ScopeID const* scope) { scope_ = scope; }
24 
25 private:
26  ExprNodeList rpn_ops;
27  SourceRange loc_;
28  ScopeID const* scope_;
29 };
30 
31 } // namespace ast