spl

a Simple Programming Language
Log | Files | Refs

commit 8c3692496f27c44a10ec613d4fc763bb4a278317
parent 7986b5985409798dbe07374a507361cf20f6a159
Author: thing1 <thing1@seacrossedlovers.xyz>
Date:   Thu, 18 Dec 2025 14:07:05 +0000

removed type checking on built in functions, as they can be generic

Diffstat:
Mparse.c | 18++++++++++++------
Mtest.spl | 2+-
2 files changed, 13 insertions(+), 7 deletions(-)

diff --git a/parse.c b/parse.c @@ -166,10 +166,14 @@ parsefcall(tok *start, tok *end, mctx *ctx) { rexpr *e = alloczctx(ctx, sizeof(rexpr)); tok *exprend; fn *f; + int builtin = 1; - if (!(f = isbuiltin(start->name, ctx)) && !(f = (fn *)lookupmap(funcs, start->name))) { - parserErr("no such function"); - return NULL; + if (!(f = isbuiltin(start->name, ctx))) { + if (!(f = (fn *)lookupmap(funcs, start->name))) { + parserErr("no such function"); + return NULL; + } + builtin = 0; } e->fname = f->name; @@ -195,9 +199,11 @@ another: e->args[e->argc - 1] = *parserexpr(start, &exprend[-1], ctx); start = &exprend[1]; - if (!isequaltype(e->args[e->argc - 1].type, &f->args[e->argc - 1])) { - parserErr("type missmatch"); - return NULL; + if (!builtin) { + if (!isequaltype(e->args[e->argc - 1].type, &f->args[e->argc - 1])) { + parserErr("type missmatch"); + return NULL; + } } if (exprend->op != ')') diff --git a/test.spl b/test.spl @@ -3,6 +3,6 @@ func foo(c *i32) i32 { } func main() i32 { - a i32 = 5; + a i32 = i16(5); b i32 = foo(&a); }