summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/sys/include/np/ast.h91
-rw-r--r--src/sys/include/os/np.h15
-rw-r--r--src/sys/np/core/np_parse.c51
3 files changed, 31 insertions, 126 deletions
diff --git a/src/sys/include/np/ast.h b/src/sys/include/np/ast.h
deleted file mode 100644
index 9232226..0000000
--- a/src/sys/include/np/ast.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * 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 <sys/cdefs.h>
-#include <np/lex.h>
-#include <os/np.h>
-#include <lib/ptrbox.h>
-#include <string.h>
-
-/*
- * 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_ */
diff --git a/src/sys/include/os/np.h b/src/sys/include/os/np.h
index 6671e10..9dba651 100644
--- a/src/sys/include/os/np.h
+++ b/src/sys/include/os/np.h
@@ -42,6 +42,21 @@
#include <lib/ptrbox.h>
/*
+ * Valid program integer types
+ */
+typedef enum {
+ NP_BAD_TYPE,
+ NP_U8,
+ NP_U16,
+ NP_U32,
+ NP_U64,
+ NP_I8,
+ NP_I16,
+ NP_I32,
+ NP_I64
+} np_itype_t;
+
+/*
* Compiler work
*
* @source: Source input file
diff --git a/src/sys/np/core/np_parse.c b/src/sys/np/core/np_parse.c
index 3eefde5..4119d8b 100644
--- a/src/sys/np/core/np_parse.c
+++ b/src/sys/np/core/np_parse.c
@@ -39,7 +39,6 @@
#include <np/lex.h>
#include <np/parse.h>
#include <np/piir.h>
-#include <np/ast.h>
#include <os/np.h>
#include <lib/ptrbox.h>
@@ -143,61 +142,55 @@ parse_expect(struct np_work *work, char *cur, tt_t what, struct lex_token *tok)
* @work: Current work
* @tok: Token result
*
- * Returns the ast integer type on success, and AST_BAD_TYPE
+ * Returns the ast integer type on success, and NP_BAD_TYPE
* on failure.
*/
-static ast_itype_t
+static np_itype_t
parse_type(struct np_work *work, struct lex_token *tok)
{
tt_t tt;
if (work == NULL || tok == NULL) {
- return AST_BAD_TYPE;
+ return NP_BAD_TYPE;
}
tt = parse_scan(work, tok);
switch (tt) {
/* Unsigned types */
- case TT_U8: return AST_U8;
- case TT_U16: return AST_U16;
- case TT_U32: return AST_U32;
- case TT_U64: return AST_U64;
+ case TT_U8: return NP_U8;
+ case TT_U16: return NP_U16;
+ case TT_U32: return NP_U32;
+ case TT_U64: return NP_U64;
/* Signed types */
- case TT_I8: return AST_I8;
- case TT_I16: return AST_I16;
- case TT_I32: return AST_I32;
- case TT_I64: return AST_I64;
+ case TT_I8: return NP_I8;
+ case TT_I16: return NP_I16;
+ case TT_I32: return NP_I32;
+ case TT_I64: return NP_I64;
}
- return AST_BAD_TYPE;
+ return NP_BAD_TYPE;
}
/*
* Parse a procedure / function
*
* @work: Input work
- * @npp: AST node pointer result
* @tok: Current token
*
* Returns zero on success
*/
static int
-parse_proc(struct np_work *work, struct ast_node **npp, struct lex_token *tok)
+parse_proc(struct np_work *work, struct lex_token *tok)
{
char *ident;
- struct ast_node *np;
- ast_itype_t ret_type = AST_BAD_TYPE;
+ np_itype_t ret_type = NP_BAD_TYPE;
tt_t tt;
if (work == NULL || tok == NULL) {
return -EINVAL;
}
- if (npp == NULL) {
- return -EINVAL;
- }
-
/* We need the identifier */
tt = parse_expect(work, "proc", TT_IDENT, tok);
if (tt == TT_NONE) {
@@ -235,7 +228,7 @@ parse_proc(struct np_work *work, struct ast_node **npp, struct lex_token *tok)
/* And now the return type */
ret_type = parse_type(work, tok);
- if (ret_type == AST_BAD_TYPE) {
+ if (ret_type == NP_BAD_TYPE) {
pr_error(
"line %d: expected valid type, got %s\n",
work->line_no,
@@ -250,18 +243,8 @@ parse_proc(struct np_work *work, struct ast_node **npp, struct lex_token *tok)
return -1;
}
- np = ast_alloc(work);
- if (np == NULL) {
- pr_error("could not alloc AST node\n");
- return -ENOMEM;
- }
-
++work->begin_depth;
work->in_func = 1;
- np->num_type = ret_type;
- np->type = AST_PROC;
- np->ident = ident;
- *npp = np;
return 0;
}
@@ -276,8 +259,6 @@ parse_token(struct np_work *work, struct lex_token *tok)
{
tt_t tt;
int error;
- struct ast_node *np;
-
#define PIIR_PUSH(BYTE) piir_push(work->piir_stack, (BYTE))
/*
* XXX: wrapped in "[]" indicates optional
@@ -323,7 +304,7 @@ parse_token(struct np_work *work, struct lex_token *tok)
return -1;
}
- if ((error = parse_proc(work, &np, tok)) != 0) {
+ if ((error = parse_proc(work, tok)) != 0) {
return -1;
}