/* * Copyright (C) 2023 Johnny Richard * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include "ast.h" void ast_node_accept_visitor(ast_node_t *node, ast_visitor_t *visitor) { assert(node); assert(node->accept_visitor); node->accept_visitor(node, visitor); } static void ast_function_accept_visitor(ast_node_t *node, ast_visitor_t *visitor) { visitor->visit_function(visitor, (ast_function_t *) node); } static void ast_return_stmt_accept_visitor(ast_node_t *node, ast_visitor_t *visitor) { visitor->visit_return_stmt(visitor, (ast_return_stmt_t *) node); } ast_return_stmt_t ast_return_stmt_create(uint32_t number) { return (ast_return_stmt_t) { .super = (ast_node_t) { .accept_visitor = &ast_return_stmt_accept_visitor }, .number = number }; } ast_function_t ast_function_create(string_view_t name, type_t return_type, ast_return_stmt_t body) { return (ast_function_t) { .super = (ast_node_t) { .accept_visitor = &ast_function_accept_visitor }, .name = name, .return_type = return_type, .body = body }; }