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:
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);
}