summaryrefslogtreecommitdiff
path: root/src/hir/expr.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/hir/expr.cpp')
-rw-r--r--src/hir/expr.cpp77
1 files changed, 38 insertions, 39 deletions
diff --git a/src/hir/expr.cpp b/src/hir/expr.cpp
index 3d48f9d4..457d903a 100644
--- a/src/hir/expr.cpp
+++ b/src/hir/expr.cpp
@@ -8,87 +8,86 @@
#define DEF_VISIT(nt, n, code) void ::HIR::nt::visit(ExprVisitor& nv) { nv.visit_node(*this); nv.visit(*this); } void ::HIR::ExprVisitorDef::visit(::HIR::nt& n) { code }
+void ::HIR::ExprVisitor::visit_node_ptr(::std::unique_ptr< ::HIR::ExprNode>& node_ptr) {
+ assert(node_ptr);
+ node_ptr->visit(*this);
+}
void ::HIR::ExprVisitor::visit_node(::HIR::ExprNode& node) {
}
DEF_VISIT(ExprNode_Block, node,
- for(const auto& subnode : node.m_nodes) {
- assert(subnode);
- subnode->visit(*this);
+ for(auto& subnode : node.m_nodes) {
+ visit_node_ptr(subnode);
}
)
DEF_VISIT(ExprNode_Return, node,
- assert(node.m_value);
- node.m_value->visit(*this);
+ visit_node_ptr(node.m_value);
)
DEF_VISIT(ExprNode_Let, node,
if( node.m_value ) {
- node.m_value->visit(*this);
+ visit_node_ptr(node.m_value);
}
)
DEF_VISIT(ExprNode_Loop, node,
- assert(node.m_code);
- node.m_code->visit(*this);
+ visit_node_ptr(node.m_code);
)
DEF_VISIT(ExprNode_LoopControl, , )
DEF_VISIT(ExprNode_Match, node,
- assert(node.m_value);
- node.m_value->visit(*this);
+ visit_node_ptr(node.m_value);
for(auto& arm : node.m_arms)
{
if( arm.m_cond )
- arm.m_cond->visit(*this);
- assert(arm.m_code);
- arm.m_code->visit(*this);
+ visit_node_ptr(arm.m_cond);
+ visit_node_ptr(arm.m_code);
}
)
DEF_VISIT(ExprNode_If, node,
- node.m_cond->visit(*this);
- node.m_true->visit(*this);
+ visit_node_ptr(node.m_cond);
+ visit_node_ptr(node.m_true);
if( node.m_false )
- node.m_false->visit(*this);
+ visit_node_ptr(node.m_false);
)
DEF_VISIT(ExprNode_Assign, node,
- node.m_slot->visit(*this);
- node.m_value->visit(*this);
+ visit_node_ptr(node.m_slot);
+ visit_node_ptr(node.m_value);
)
DEF_VISIT(ExprNode_BinOp, node,
- node.m_left->visit(*this);
- node.m_right->visit(*this);
+ visit_node_ptr(node.m_left);
+ visit_node_ptr(node.m_right);
)
DEF_VISIT(ExprNode_UniOp, node,
- node.m_value->visit(*this);
+ visit_node_ptr(node.m_value);
)
DEF_VISIT(ExprNode_Cast, node,
- node.m_value->visit(*this);
+ visit_node_ptr(node.m_value);
)
DEF_VISIT(ExprNode_Unsize, node,
- node.m_value->visit(*this);
+ visit_node_ptr(node.m_value);
)
DEF_VISIT(ExprNode_Index, node,
- node.m_val->visit(*this);
- node.m_index->visit(*this);
+ visit_node_ptr(node.m_value);
+ visit_node_ptr(node.m_index);
)
DEF_VISIT(ExprNode_Deref, node,
- node.m_val->visit(*this);
+ visit_node_ptr(node.m_value);
)
DEF_VISIT(ExprNode_CallPath, node,
for(auto& arg : node.m_args)
- arg->visit(*this);
+ visit_node_ptr(arg);
)
DEF_VISIT(ExprNode_CallValue, node,
- node.m_val->visit(*this);
+ visit_node_ptr(node.m_value);
for(auto& arg : node.m_args)
- arg->visit(*this);
+ visit_node_ptr(arg);
)
DEF_VISIT(ExprNode_CallMethod, node,
- node.m_val->visit(*this);
+ visit_node_ptr(node.m_value);
for(auto& arg : node.m_args)
- arg->visit(*this);
+ visit_node_ptr(arg);
)
DEF_VISIT(ExprNode_Field, node,
- node.m_val->visit(*this);
+ visit_node_ptr(node.m_value);
)
DEF_VISIT(ExprNode_Literal, , )
@@ -96,25 +95,25 @@ DEF_VISIT(ExprNode_PathValue, , )
DEF_VISIT(ExprNode_Variable, , )
DEF_VISIT(ExprNode_StructLiteral, node,
if( node.m_base_value )
- node.m_base_value->visit(*this);
+ visit_node_ptr(node.m_base_value);
for(auto& val : node.m_values)
- val.second->visit( *this );
+ visit_node_ptr(val.second);
)
DEF_VISIT(ExprNode_Tuple, node,
for(auto& val : node.m_vals)
- val->visit( *this );
+ visit_node_ptr(val);
)
DEF_VISIT(ExprNode_ArrayList, node,
for(auto& val : node.m_vals)
- val->visit( *this );
+ visit_node_ptr(val);
)
DEF_VISIT(ExprNode_ArraySized, node,
- node.m_val->visit( *this );
- node.m_size->visit( *this );
+ visit_node_ptr(node.m_val);
+ visit_node_ptr(node.m_size);
)
DEF_VISIT(ExprNode_Closure, node,
- node.m_code->visit( *this );
+ visit_node_ptr(node.m_code);
)
#undef DEF_VISIT