Write parts of generated code directly to objects
This commit is contained in:
@ -60,6 +60,11 @@ namespace elna::source
|
||||
block->body().accept(this);
|
||||
}
|
||||
|
||||
void empty_visitor::visit(program *program)
|
||||
{
|
||||
visit(dynamic_cast<block *>(program));
|
||||
}
|
||||
|
||||
void empty_visitor::visit(binary_expression *expression)
|
||||
{
|
||||
expression->lhs().accept(this);
|
||||
@ -154,6 +159,18 @@ namespace elna::source
|
||||
return m_table;
|
||||
}
|
||||
|
||||
program::program(std::vector<std::unique_ptr<definition>>&& definitions,
|
||||
std::vector<std::unique_ptr<declaration>>&& declarations,
|
||||
std::unique_ptr<statement>&& body)
|
||||
: block(std::move(definitions), std::move(declarations), std::move(body))
|
||||
{
|
||||
}
|
||||
|
||||
void program::accept(parser_visitor *visitor)
|
||||
{
|
||||
visitor->visit(this);
|
||||
}
|
||||
|
||||
integer_literal::integer_literal(const std::int32_t value)
|
||||
: m_number(value)
|
||||
{
|
||||
@ -352,9 +369,18 @@ namespace elna::source
|
||||
{
|
||||
}
|
||||
|
||||
std::unique_ptr<block> parser::parse()
|
||||
std::unique_ptr<program> parser::parse()
|
||||
{
|
||||
return parse_block();
|
||||
auto definitions = parse_definitions();
|
||||
auto declarations = parse_declarations();
|
||||
auto parsed_statement = parse_statement();
|
||||
|
||||
if (parsed_statement == nullptr)
|
||||
{
|
||||
return nullptr;
|
||||
}
|
||||
return std::make_unique<program>(std::move(definitions),
|
||||
std::move(declarations), std::move(parsed_statement));
|
||||
}
|
||||
|
||||
const std::list<std::unique_ptr<error>>& parser::errors() const noexcept
|
||||
|
Reference in New Issue
Block a user