Check only a pointer can be dereferenced
This commit is contained in:
@ -156,7 +156,36 @@ namespace elna::boot
|
||||
virtual defer_statement *is_defer();
|
||||
virtual procedure_call *is_call_statement();
|
||||
|
||||
void accept(parser_visitor *visitor);
|
||||
template<typename V>
|
||||
void accept(V *visitor)
|
||||
{
|
||||
if (assign_statement *node = is_assign())
|
||||
{
|
||||
return visitor->visit(node);
|
||||
}
|
||||
else if (if_statement *node = is_if())
|
||||
{
|
||||
return visitor->visit(node);
|
||||
}
|
||||
else if (while_statement *node = is_while())
|
||||
{
|
||||
return visitor->visit(node);
|
||||
}
|
||||
else if (return_statement *node = is_return())
|
||||
{
|
||||
return visitor->visit(node);
|
||||
}
|
||||
else if (defer_statement *node = is_defer())
|
||||
{
|
||||
return visitor->visit(node);
|
||||
}
|
||||
else if (procedure_call *node = is_call_statement())
|
||||
{
|
||||
return visitor->visit(node);
|
||||
}
|
||||
__builtin_unreachable();
|
||||
}
|
||||
|
||||
~statement() = 0;
|
||||
|
||||
protected:
|
||||
@ -739,7 +768,8 @@ namespace elna::boot
|
||||
}
|
||||
}
|
||||
|
||||
void accept(parser_visitor *visitor)
|
||||
template<typename V>
|
||||
void accept(V *visitor)
|
||||
{
|
||||
visitor->visit(this);
|
||||
}
|
||||
|
Reference in New Issue
Block a user