diff options
Diffstat (limited to 'include/parser')
-rw-r--r-- | include/parser/ast.h | 20 | ||||
-rw-r--r-- | include/parser/type.h | 57 |
2 files changed, 77 insertions, 0 deletions
diff --git a/include/parser/ast.h b/include/parser/ast.h new file mode 100644 index 0000000..03be1bd --- /dev/null +++ b/include/parser/ast.h @@ -0,0 +1,20 @@ +/* + * AST (Abstract Syntax Tree) definitions. + * Copyright (c) 2023-2024, Quinn Stephens and the OSMORA team. + * Provided under the BSD 3-Clause license. + */ + +#ifndef _PARSER_AST_H +#define _PARSER_AST_H + +enum ast_node_kind { + NK_UNKNOWN, + + NK_ +}; + +struct ast_node { + enum ast_node_kind kind; +}; + +#endif /* !_PARSER_AST_H */ diff --git a/include/parser/type.h b/include/parser/type.h new file mode 100644 index 0000000..6a939ab --- /dev/null +++ b/include/parser/type.h @@ -0,0 +1,57 @@ +/* + * Type parser. + * Copyright (c) 2023-2024, Quinn Stephens and the OSMORA team. + * Provided under the BSD 3-Clause license. + */ + +#ifndef _PARSER_TYPE_H +#define _PARSER_TYPE_H + +#include <stddef.h> +#include "hashmap.h" +#include "parser.h" + +enum type_kind { + TYK_ALIAS, + TYK_ENUM, + TYK_STRUCT +}; + +struct enum_member { + struct hashmap_entry hashmap_entry; + + char *name; + size_t name_len; + + uint64_t value; +}; + +struct struct_member { + struct hashmap_entry hashmap_entry; + + char *name; + size_t name_len; + + size_t off, size; + struct type *typ; + int n_ptrs; +}; + +struct type { + struct hashmap_entry hashmap_entry; + + enum type_kind kind; + char *name; + size_t name_len; + + size_t size; + + union { + int n_ptrs; + struct hashmap members; + }; +}; + +void parse_type(struct parser *ctx); + +#endif /* !_PARSER_TYPE_H */ |