/* * Copyright (c) 2025 Ian Marco Moffett and L5 engineers * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. Neither the name of the project nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ #ifndef _NP_AST_H_ #define _NP_AST_H_ 1 #include #include #include #include #include /* * Valid program integer types */ typedef enum { AST_BAD_TYPE, AST_U8, AST_U16, AST_U32, AST_U64, AST_I8, AST_I16, AST_I32, AST_I64 } ast_itype_t; /* * AST node type */ typedef enum { AT_BAD_OBJTYPE, /* Bad */ AST_PROC, /* Procedure */ } ast_type_t; /* * Represents an AST node * * @ident: Identifier * @num_type: Integer type * @type: Object type * @left: Left node * @right: Right node */ struct ast_node { char *ident; ast_itype_t num_type; ast_type_t type; struct ast_node *left; struct ast_node *right; }; __always_inline static inline void * ast_alloc(struct np_work *work) { struct ast_node *np; np = ptrbox_alloc(sizeof(*np), work->work_mem); if (np != NULL) { memset(np, 0, sizeof(*np)); } return np; } #endif /* !_NP_AST_H_ */