]> Nishi Git Mirror - serenade.git/commitdiff
better targets
authornishi <nishi@0f02c867-ac3d-714e-8a88-971ba1f6efcf>
Tue, 23 Apr 2024 12:15:18 +0000 (12:15 +0000)
committernishi <nishi@0f02c867-ac3d-714e-8a88-971ba1f6efcf>
Tue, 23 Apr 2024 12:15:18 +0000 (12:15 +0000)
git-svn-id: file:///raid/svn-main/nishi-serenade/trunk@19 0f02c867-ac3d-714e-8a88-971ba1f6efcf

Makefile
Serenade/Makefile
Serenade/main.c
Serenade/parser.c
Serenade/run.c [new file with mode: 0644]
Serenade/run.h [new file with mode: 0644]
Serenade/util.c
Tool/configgen.c

index a1b4d927ce11f7f858ac746b7ad078ae13a77674..84f60dd4787e5c518b68e20d5fda4315dd8d7640 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -6,7 +6,11 @@ LDFLAGS =
 LIBS =
 SUFFIX =
 
+.if "$(PLATFORM)" != ""
+.include "platforms/${PLATFORM}.mk"
+.else
 .include "platform.mk"
+.endif
 
 .PHONY: all ./Serenade ./Tool replace format
 
@@ -16,6 +20,7 @@ all: ./Tool ./config.h ./Serenade
        $(MAKE) -C ./Tool CC="$(CC)" CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" LIBS="$(LIBS)" SUFFIX="$(SUFFIX)"
 
 ./config.h:
+       if [ ! -e ./Tool/configgen ]; then $(MAKE) ./Tool ; fi
        ./Tool/configgen $@
 
 ./Serenade::
index 9a8de3814cdb74879adebffcc17e2bb19bdb9406..06a890cf303f073a3a0f6eb78eadcfc377fe4af5 100644 (file)
@@ -1,6 +1,6 @@
 # $Id$
 
-SERENADE_OBJS = main.o parser.o util.o
+SERENADE_OBJS = main.o parser.o util.o run.o
 
 .PHONY: all clean
 .SUFFIXES: .o .c
index b4f8d16553175ad52316c2bbed183f45e17d7a3e..7a20a71c5b7e376affac47a1c8a4ed2b01010d02 100644 (file)
@@ -46,7 +46,7 @@ int main(int argc, char** argv) {
                        if(strcmp(argv[i], "--version") == 0 || strcmp(argv[i], "-V") == 0) {
                                printf("Serenade LISP %s\n", SERENADE_VERSION);
                                printf("Support: %s\n", SUPPORT);
-                               printf("Stack size: %d\n", STACK_SIZE);
+                               printf("Parser stack size: %d\n", PARSER_STACK_SIZE);
                                return 1;
                        } else {
                                fprintf(stderr, "%s: %s: invalid option\n", argv[0], argv[i]);
@@ -84,7 +84,7 @@ int main(int argc, char** argv) {
        if(!loaded) {
                printf("Welcome to Serenade LISP %s\n", SERENADE_VERSION);
                printf("Support: %s\n", SUPPORT);
-               printf("Stack size: %d\n", STACK_SIZE);
+               printf("Parser stack size: %d\n", PARSER_STACK_SIZE);
        }
        return 0;
 #else
index 2638bc23b7c294f8284720bed441efeac8615b2d..819797098f49c1272c068b0d49750cb7ef322baa 100644 (file)
@@ -82,14 +82,15 @@ struct sn_generic* sn_expr_parse(char* data, unsigned long long size) {
        int i;
        int br = 0;
        bool dq = false;
-       struct sn_generic** gn_stack = malloc(sizeof(*gn_stack) * STACK_SIZE);
-       int* index_stack = malloc(sizeof(int) * STACK_SIZE);
+       struct sn_generic** gn_stack = malloc(sizeof(*gn_stack) * PARSER_STACK_SIZE);
+       int* index_stack = malloc(sizeof(int) * PARSER_STACK_SIZE);
        char* argbuf = malloc(1);
        argbuf[0] = 0;
        int argbufmode = SN_TYPE_VOID;
        for(i = 0; i < size; i++) {
                char c = data[i];
-               if(c == '"') {
+               if(c == '\r') {
+               } else if(c == '"') {
                        dq = !dq;
                } else if(dq) {
                        char cbuf[2] = {c, 0};
@@ -121,7 +122,7 @@ struct sn_generic* sn_expr_parse(char* data, unsigned long long size) {
                        }
                        br--;
                } else {
-                       if(c == ' ') {
+                       if(c == ' ' || c == '\n') {
                                if(strlen(argbuf) > 0) {
                                        push_stack(gn_stack[br - 1], argbuf, argbufmode);
                                        index_stack[br - 1]++;
diff --git a/Serenade/run.c b/Serenade/run.c
new file mode 100644 (file)
index 0000000..23dc6ca
--- /dev/null
@@ -0,0 +1,33 @@
+/* $Id$ */
+/* --- START LICENSE --- */
+/* -------------------------------------------------------------------------- */
+/*                                                Serenade is a Lisp Dialect  */
+/* -------------------------------------------------------------------------- */
+/* Copyright (c) 2024 Nishi.                                                  */
+/* Redistribution and use in source and binary forms, with or without modific */
+/* ation, are permitted provided that the following conditions are met:       */
+/*     1. Redistributions of source code must retain the above copyright noti */
+/* ce, this list of conditions and the following disclaimer.                  */
+/*     2. Redistributions in binary form must reproduce the above copyright n */
+/* otice, this list of conditions and the following disclaimer in the documen */
+/* tation and/or other materials provided with the distribution.              */
+/*     3. Neither the name of the copyright holder nor the names of its contr */
+/* ibutors may be used to endorse or promote products derived from this softw */
+/* are 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, TH */
+/* E IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPO */
+/* SE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS  */
+/* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CON */
+/* SEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITU */
+/* TE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPT */
+/* ION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, S */
+/* TRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN AN */
+/* Y WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY  */
+/* OF SUCH DAMAGE.                                                            */
+/* -------------------------------------------------------------------------- */
+/* --- END LICENSE --- */
+
+#include "run.h"
+
+int sn_run(struct sn_generic* gen) { return 0; }
diff --git a/Serenade/run.h b/Serenade/run.h
new file mode 100644 (file)
index 0000000..16addcb
--- /dev/null
@@ -0,0 +1,38 @@
+/* $Id$ */
+/* --- START LICENSE --- */
+/* -------------------------------------------------------------------------- */
+/*                                                Serenade is a Lisp Dialect  */
+/* -------------------------------------------------------------------------- */
+/* Copyright (c) 2024 Nishi.                                                  */
+/* Redistribution and use in source and binary forms, with or without modific */
+/* ation, are permitted provided that the following conditions are met:       */
+/*     1. Redistributions of source code must retain the above copyright noti */
+/* ce, this list of conditions and the following disclaimer.                  */
+/*     2. Redistributions in binary form must reproduce the above copyright n */
+/* otice, this list of conditions and the following disclaimer in the documen */
+/* tation and/or other materials provided with the distribution.              */
+/*     3. Neither the name of the copyright holder nor the names of its contr */
+/* ibutors may be used to endorse or promote products derived from this softw */
+/* are 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, TH */
+/* E IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPO */
+/* SE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS  */
+/* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CON */
+/* SEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITU */
+/* TE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPT */
+/* ION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, S */
+/* TRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN AN */
+/* Y WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY  */
+/* OF SUCH DAMAGE.                                                            */
+/* -------------------------------------------------------------------------- */
+/* --- END LICENSE --- */
+
+#ifndef __SERENADE_RUN_H__
+#define __SERENADE_RUN_H__
+
+#include "parser.h"
+
+int sn_run(struct sn_generic* gen);
+
+#endif
index 29b7f26dd0d3801d2f7c3bccf06507b20c1d776c..a544c7b955482f88dd4debbec88c93a91159c8f5 100644 (file)
@@ -54,6 +54,7 @@ void _sn_print_generic(struct sn_generic* gen, int n) {
        fprintf(stderr, "[%2d]", gen->type);
        for(i = 0; i < n; i++) fprintf(stderr, "    ");
        if(gen->type == SN_TYPE_TREE) {
+               fprintf(stderr, "(Tree)\n");
                if(gen->tree->args != NULL) {
                        for(i = 0; gen->tree->args[i] != NULL; i++) {
                                _sn_print_generic(gen->tree->args[i], n + 1);
@@ -61,10 +62,11 @@ void _sn_print_generic(struct sn_generic* gen, int n) {
                }
        } else if(gen->type == SN_TYPE_DOUBLE) {
                fprintf(stderr, "%f", gen->number);
+               fprintf(stderr, "\n");
        } else if(gen->type == SN_TYPE_STRING || gen->type == SN_TYPE_FUNCTION) {
                fwrite(gen->string, 1, gen->string_length, stderr);
+               fprintf(stderr, "\n");
        }
-       fprintf(stderr, "\n");
 }
 
 void sn_print_generic(struct sn_generic* gen) { _sn_print_generic(gen, 0); }
index 5ad269872f317042c50cc7a7c0011efc89d8fff3..1b6ac5f1628e347094582b3112f3a402bcdb2909 100644 (file)
@@ -82,10 +82,10 @@ int main(int argc, char** argv) {
                }
        }
        int stack_size = 1024;
-       fprintf(stderr, "[recommended: 1024] Stack size? ");
+       fprintf(stderr, "[recommended: 1024] Parser stack size? ");
        fflush(stderr);
        scanf("%d", &stack_size);
-       fprintf(out, "#define STACK_SIZE %d\n", stack_size);
+       fprintf(out, "#define PARSER_STACK_SIZE %d\n", stack_size);
        fprintf(out, "#define SUPPORT \"");
        for(n = 0; asks[n * 4] != NULL; n++) {
                if(n > 0) fprintf(out, " ");