OSDN Git Service

Load defs at compile time.
authorsforman <sforman@hushmail.com>
Fri, 11 Aug 2023 17:48:33 +0000 (10:48 -0700)
committersforman <sforman@hushmail.com>
Fri, 11 Aug 2023 17:48:33 +0000 (10:48 -0700)
I don't really know the proper way to do this, but I managed to whump
something up.

implementations/scheme-chicken/Makefile
implementations/scheme-chicken/joy.scm

index 31409bd..2d23277 100644 (file)
@@ -1,6 +1,6 @@
 
 joy: joy.scm defs.scm
-       csc joy.scm
+       csc -prologue defs.scm joy.scm
 
 generate_defs: generate_defs.scm
        csc generate_defs.scm
@@ -9,5 +9,5 @@ defs.scm: ../defs.txt generate_defs
        ./generate_defs
 
 clean:
-       rm generate_defs joy
+       rm generate_defs joy defs.scm
 
index ad80590..caab11a 100644 (file)
@@ -1,8 +1,11 @@
 (import (chicken io))
 (import (chicken string))
 (import srfi-69)
-(load "defs.scm")
 
+;(load "defs.scm") ; csc -prologue defs.scm joy.scm
+(cond-expand
+  (chicken-script (load "defs.scm"))
+  (else))
 
 (define (joy stack expression dict)
   (if (null? expression)
@@ -20,8 +23,9 @@
     ((is-it? "-") (values (joy-sub stack) expression dict))
     ((is-it? "mul") (values (joy-mul stack) expression dict))
     ((is-it? "dup") (values (joy-dup stack) expression dict))
-    ((hash-table-exists? dict symbol) (values stack (append (hash-table-ref dict symbol) expression) dict))
-    (else (values (cons symbol stack) expression dict))))
+    ((hash-table-exists? dict symbol)
+      (values stack (append (hash-table-ref dict symbol) expression) dict))
+    (else (error "Unknown word."))))
 
 (define (joy-add stack) (cons (+ (cadr stack) (car stack)) (cddr stack)))
 (define (joy-sub stack) (cons (- (cadr stack) (car stack)) (cddr stack)))
     (hash-table-set! dict (car def_list) (cdr def_list))))
 
 
-(display (doit "ab  cd [[  ]] 23 4 - dup - [true] false 23 sqr"))
+(display (doit "12  23 [[  ]] 23 4 - dup - [true] false 23 sqr"))
 (newline)