From 53dad0f47b80c265104a42df49d21f3967f33605 Mon Sep 17 00:00:00 2001 From: Charlie Root Date: Sat, 22 Mar 2025 22:30:48 +0000 Subject: [PATCH] Quick fixes for BSD --- Makefile | 2 +- README.md | 4 ++-- src/exec_common.c | 2 +- src/interpreter.c | 9 ++++++--- 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/Makefile b/Makefile index d8efbac..89e8356 100755 --- a/Makefile +++ b/Makefile @@ -36,7 +36,7 @@ builddir: @- mv $(wildcard $(BUILD_DIR)/*.o) build-tmp/ yacc: src/parser.y src/parser.l - cd src && yacc -d -g parser.y && lex parser.l + cd src && bison -y -d parser.y && lex parser.l $(CC) -c src/y.tab.c -o build-tmp/y.tab.o $(CFLAGS) $(CC) -c src/lex.yy.c -o build-tmp/lex.yy.o $(CFLAGS) diff --git a/README.md b/README.md index 705e31b..bb1086a 100644 --- a/README.md +++ b/README.md @@ -14,10 +14,10 @@ Pre-requisites: - GNU Make ### Unix -Running `make` twice should work on most Unix systems. +Running `make` (or `gmake` for BSDs) should work on most Unix systems. It produces an executable called `flisp.amd64` ### Windows To meet the previously mentionned pre-requisites, you need to use mingw. I recommend installing w64devkit, then compiling Bison and Flex from source. -Run `make win`, twice. +Run `make win` diff --git a/src/exec_common.c b/src/exec_common.c index 88a18e4..ef84445 100644 --- a/src/exec_common.c +++ b/src/exec_common.c @@ -599,6 +599,7 @@ Value pop(Value a, Value b){ } Value write(Value a){ + char *nstr; switch(a.tag.type){ case T_null: case T_any: @@ -614,7 +615,6 @@ Value write(Value a){ printf("%f",a.v4B.vfl); break; case T_str: - char *nstr; nstr = malloc(a.vstr.len+1); if(a.vstr.len > 4){ char *str = get_addr(a.vstr.pos); diff --git a/src/interpreter.c b/src/interpreter.c index 5204af6..2fd3887 100644 --- a/src/interpreter.c +++ b/src/interpreter.c @@ -54,14 +54,16 @@ Value fncall(FnSig *fn, Statement **params){ case 0: returnv = fn->bi(); break; - case 1: + case 1:{ Value (*fn1)(Value) = (void*)fn->bi; returnv = fn1(execute(params[0])); break; - case 2: + } + case 2:{ Value (*fn2)(Value,Value) = (void*)fn->bi; returnv = fn2(execute(params[0]),execute(params[1])); break; + } default: runtime_err("Call to builtin with >2 params"); break; @@ -146,13 +148,14 @@ Value execute(Statement *stat){ case BI_cast: returnv = cast(stat->var_type, execute(stat->children[0])); break; - case ST_Call: + case ST_Call:{ FnSig *fn = stat->func; Statement **params = NULL; if(fn->n_param) params = (Statement**)((Statement*)stat->children[0])->children; returnv = fncall(fn, params); break; + } } return returnv; }