Check only a pointer can be dereferenced

This commit is contained in:
2025-03-23 10:14:04 +01:00
parent 07ed40cc24
commit 6ccb195c09
3 changed files with 45 additions and 33 deletions

View File

@ -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);
}