From a515dfb3b8f8e999362db7a6b52b3104c03b750a Mon Sep 17 00:00:00 2001 From: Ian Moffett Date: Fri, 1 Nov 2024 23:46:08 -0400 Subject: Import quark sources Signed-off-by: Ian Moffett --- include/parser/ast.h | 20 ++++++++++++++++++ include/parser/type.h | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 77 insertions(+) create mode 100644 include/parser/ast.h create mode 100644 include/parser/type.h (limited to 'include/parser') 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 +#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 */ -- cgit v1.2.3