From 91c0da3a8bea23d3729ecc02b599774a62f9230c Mon Sep 17 00:00:00 2001 From: Himbeer Date: Tue, 1 Oct 2024 11:55:46 +0200 Subject: Fix invalid inner types not raising an error --- src/parse.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/parse.c b/src/parse.c index 4b938bb..a294898 100644 --- a/src/parse.c +++ b/src/parse.c @@ -983,15 +983,27 @@ parse_type(struct lexer *lexer, struct type *out) case T_STAR: out->kind = TYP_POINTER; out->desc.inner = must_malloc(sizeof(struct type)); - return parse_type(lexer, out->desc.inner); + + if (!parse_type(lexer, out->desc.inner)) { + error(lex_loc(lexer), "syntax error: expected type"); + } + return true; case T_QUESTION: out->kind = TYP_OPTIONAL; out->desc.inner = must_malloc(sizeof(struct type)); - return parse_type(lexer, out->desc.inner); + + if (!parse_type(lexer, out->desc.inner)) { + error(lex_loc(lexer), "syntax error: expected type"); + } + return true; case T_BANG: out->kind = TYP_FALLIBLE; out->desc.inner = must_malloc(sizeof(struct type)); - return parse_type(lexer, out->desc.inner); + + if (!parse_type(lexer, out->desc.inner)) { + error(lex_loc(lexer), "syntax error: expected type"); + } + return true; case T_BOOL: out->kind = TYP_BOOL; return true; -- cgit v1.2.3