From 342ed5750753f6d97d89cc36c15bf4c9bf483543 Mon Sep 17 00:00:00 2001 From: Yuichi Nishiwaki Date: Fri, 14 Apr 2017 23:58:02 +0900 Subject: [PATCH] add mini-picrin --- lib/Makefile | 53 ++++ lib/ext/{boot.c => eval.c} | 399 +------------------------------ lib/ext/lib.c | 44 ---- lib/ext/main.c | 60 +++++ lib/include/picconf.h | 1 - lib/include/picrin.h | 2 + lib/include/picrin/extra.h | 14 -- lib/include/picrin/setup.h | 4 - lib/{ext => }/load.c | 0 lib/state.c | 8 +- piclib/{compile.scm => eval.scm} | 0 tools/mkboot.scm | 15 +- 12 files changed, 125 insertions(+), 475 deletions(-) create mode 100644 lib/Makefile rename lib/ext/{boot.c => eval.c} (81%) delete mode 100644 lib/ext/lib.c create mode 100644 lib/ext/main.c rename lib/{ext => }/load.c (100%) rename piclib/{compile.scm => eval.scm} (100%) diff --git a/lib/Makefile b/lib/Makefile new file mode 100644 index 00000000..fc48ca27 --- /dev/null +++ b/lib/Makefile @@ -0,0 +1,53 @@ +LIBPICRIN_SRCS = \ + blob.c\ + bool.c\ + char.c\ + cont.c\ + data.c\ + debug.c\ + dict.c\ + error.c\ + gc.c\ + load.c\ + number.c\ + pair.c\ + port.c\ + proc.c\ + record.c\ + state.c\ + string.c\ + symbol.c\ + var.c\ + vector.c\ + weak.c\ + ext/eval.c\ + ext/read.c\ + ext/write.c\ + ext/file.c +LIBPICRIN_OBJS = \ + $(LIBPICRIN_SRCS:.c=.o) + +LIBPICRIN_HEADERS = \ + include/picrin.h\ + include/picconf.h\ + include/picrin/extra.h\ + include/picrin/setup.h\ + include/picrin/value.h\ + khash.h\ + object.h\ + state.h + +CFLAGS += -I./include -Wall -Wextra -O0 -g + +mini-picrin: libpicrin.so ext/main.o + $(CC) $(CFLAGS) -o $@ libpicrin.so ext/main.o + +libpicrin.so: $(LIBPICRIN_OBJS) + $(CC) $(CFLAGS) -shared -o $@ $(LIBPICRIN_OBJS) $(LDFLAGS) + +$(LIBPICRIN_OBJS): $(LIBPICRIN_HEADERS) + +clean: + $(RM) $(LIBPICRIN_OBJS) libpicrin.so + +.PHONY: clean diff --git a/lib/ext/boot.c b/lib/ext/eval.c similarity index 81% rename from lib/ext/boot.c rename to lib/ext/eval.c index e8913a9a..b55c2b2d 100644 --- a/lib/ext/boot.c +++ b/lib/ext/eval.c @@ -2,7 +2,7 @@ #include "picrin/extra.h" #if PIC_USE_EVAL -static const char boot_compile_rom[][80] = { +static const char eval_rom[][80] = { "(((LOADU 0) (GSET 0 0) (LOADU 0) (GSET 0 1) (LOADU 0) (GSET 0 2) (LOADU 0) (GSET", " 0 3) (LOADU 0) (GSET 0 4) (LOADU 0) (GSET 0 5) (LOADU 0) (GSET 0 6) (LOADU 0) (", "GSET 0 7) (LOADU 0) (GSET 0 8) (LOADU 0) (GSET 0 9) (LOADU 0) (GSET 0 10) (LOADU", @@ -1669,403 +1669,10 @@ static const char boot_compile_rom[][80] = { }; #endif -#if PIC_USE_LIBRARY -static const char boot_library_rom[][80] = { -"(((LOADU 0) (GSET 0 0) (LOADU 0) (GSET 0 1) (LOADU 0) (GSET 0 2) (LOADU 0) (GSET", -" 0 3) (LOADU 0) (GSET 0 4) (LOADU 0) (GSET 0 5) (LOADU 0) (GSET 0 6) (GREF 0 7) ", -"(LREF 1 0 1) (PROC 2 0) (PROC 3 1) (CALL 3)) ((((PROC 0 0) (LREF 1 0 1) (CALL 1)", -") ((((PROC 0 0) (LREF 1 0 1) (LOADF 2) (LOADF 3) (LOADF 4) (LOADF 5) (LOADF 6) (", -"LOADF 7) (LOADF 8) (LOADF 9) (LOADF 10) (CALL 10)) ((((PROC 0 0) (LSET 0 0 10) (", -"GREF 0 0) (PROC 1 1) (LOAD 2 1) (LOADN 3) (CALL 3)) ((((PROC 0 0) (LREF 1 0 1) (", -"LOADF 2) (LOADF 3) (CALL 3)) ((((PROC 0 0) (PROC 1 1) (CALL 1)) ((((GREF 0 0) (P", -"ROC 1 0) (LREF 2 2 2) (CALL 2)) ((((LREF 0 0 1) (COND 0 0) (GREF 0 0) (LREF 1 1 ", -"1) (LOAD 2 1) (LREF 3 3 2) (CALL 3) 0 (LREF 0 1 1) (LOADU 1) (CALL 1)) () (error", -" \"library name should be a list of at least one symbols\") (1 . #f) 5)) (null?) (", -"1 . #f) 4) (((PROC 0 0) (LSET 0 1 3) (PROC 0 1) (LSET 0 1 2) (GREF 0 0) (PROC 1 ", -"2) (LREF 2 2 2) (CALL 2)) ((((GREF 0 0) (PROC 1 0) (LREF 2 0 2) (CALL 2)) ((((LR", -"EF 0 0 1) (COND 0 1) (GREF 0 0) (PROC 1 0) (LREF 2 1 2) (CALL 2) 1 (PROC 0 1) (P", -"ROC 1 2) (CALL 1)) ((((PROC 0 0) (LREF 1 2 1) (LREF 2 0 1) (CALL 2)) ((((GREF 0 ", -"0) (PROC 1 0) (PROC 2 1) (LREF 3 0 2) (CALL 3)) ((((LREF 0 1 1) (LREF 1 1 2) (CA", -"LL 1)) () () (1 . #f) 3) (((GREF 0 0) (PROC 1 0) (LREF 2 0 2) (LOAD 3 1) (CALL 3", -")) ((((PROC 0 0) (PROC 1 1) (LREF 2 0 1) (CALL 2)) ((((LREF 0 0 2) (COND 0 2) (L", -"REF 0 0 1) (LREF 1 0 2) (CALL 1) 2 (GREF 0 0) (PROC 1 0) (LREF 2 2 2) (LOAD 3 1)", -" (CALL 3)) ((((PROC 0 0) (LREF 1 1 1) (LREF 2 0 1) (CALL 2)) ((((LREF 0 0 2) (CO", -"ND 0 3) (LREF 0 0 1) (LREF 1 0 2) (CALL 1) 3 (LREF 0 0 1) (LOADF 1) (CALL 1)) ()", -" () (2 . #f) 3)) () (1 . #f) 4)) (char=? #\\:) (2 . #f) 5) (((LREF 0 0 1) (COND 0", -" 4) (GREF 0 0) (LREF 1 2 1) (LOAD 2 1) (LREF 3 6 2) (CALL 3) 4 (LREF 0 2 1) (LOA", -"DU 1) (CALL 1)) () (error \"elements of library name may not contain '.' or ':'\")", -" (1 . #f) 5)) () (1 . #f) 4)) (char=? #\\.) (2 . #f) 5)) (string-for-each) (2 . #", -"f) 5)) () (1 . #f) 4) (((GREF 0 0) (PROC 1 0) (LREF 2 2 2) (CALL 2)) ((((LREF 0 ", -"0 1) (COND 0 5) (GREF 0 0) (PROC 1 0) (LREF 2 3 2) (CALL 2) 5 (LREF 0 1 1) (LOAD", -"F 1) (CALL 1)) ((((LREF 0 0 1) (COND 0 6) (GREF 0 0) (LREF 1 2 1) (LOADI 2 0) (L", -"REF 3 4 2) (CALL 3) 6 (LREF 0 2 1) (LOADF 1) (CALL 1)) () (<=) (1 . #f) 5)) (exa", -"ct?) (1 . #f) 4)) (number?) (1 . #f) 4) (((LREF 0 0 1) (COND 0 7) (GREF 0 0) (LR", -"EF 1 2 1) (LREF 2 2 2) (CALL 2) 7 (GREF 0 1) (LREF 1 2 1) (LOAD 2 2) (LREF 3 2 2", -") (CALL 3)) () (number->string error \"symbol or non-negative integer is required", -"\") (1 . #f) 5)) (symbol->string) (1 . #f) 4)) (symbol?) (2 . #f) 4) (((PROC 0 0)", -" (LREF 1 0 1) (CALL 1)) ((((PROC 0 0) (LREF 1 0 1) (LOADF 2) (CALL 2)) ((((PROC ", -"0 0) (LSET 0 0 2) (GREF 0 0) (PROC 1 1) (LREF 2 2 2) (CALL 2)) ((((GREF 0 0) (PR", -"OC 1 0) (LREF 2 0 3) (CALL 2)) ((((LREF 0 0 1) (COND 0 8) (LREF 0 1 1) (LREF 1 1", -" 2) (CALL 1) 8 (GREF 0 0) (PROC 1 0) (LREF 2 1 3) (CALL 2)) ((((GREF 0 0) (PROC ", -"1 0) (LREF 2 2 2) (LREF 3 5 3) (LREF 4 0 1) (CALL 4)) ((((GREF 0 0) (PROC 1 0) (", -"LREF 2 3 3) (CALL 2)) ((((LREF 0 5 2) (LREF 1 4 1) (LREF 2 1 1) (LREF 3 0 1) (CA", -"LL 3)) () () (1 . #f) 5)) (cdr) (1 . #f) 4)) (string-append) (1 . #f) 6)) (car) ", -"(1 . #f) 4)) (null?) (3 . #f) 4) (((GREF 0 0) (PROC 1 0) (LREF 2 3 2) (CALL 2)) ", -"((((LREF 0 2 2) (LREF 1 2 1) (LREF 2 1 1) (LREF 3 0 1) (CALL 3)) () () (1 . #f) ", -"5)) (cdr) (1 . #f) 4)) (car) (2 . #f) 4)) () (1 . #f) 4)) () (3 . #f) 3) (((LREF", -" 0 0 1) (COND 0 9) (LREF 0 2 1) (LREF 1 3 2) (CALL 1) 9 (GREF 0 0) (PROC 1 0) (L", -"REF 2 2 3) (LREF 3 3 2) (CALL 3)) ((((LREF 0 3 2) (PROC 1 0) (LREF 2 0 1) (LOAD ", -"3 0) (CALL 3)) ((((GREF 0 0) (LREF 1 4 1) (LREF 2 0 1) (CALL 2)) () (string->sym", -"bol) (1 . #f) 4)) (\".\") (1 . #f) 5)) (map) (1 . #f) 5)) (symbol?) (1 . #f) 4)) (", -") (3 . #f) 3)) () (2 . #f) 5) (((GREF 0 0) (PROC 1 0) (LOAD 2 1) (LREF 3 0 1) (C", -"ALL 3)) ((((GREF 0 0) (PROC 1 0) (LREF 2 0 1) (LREF 3 2 10) (CALL 3)) ((((LREF 0", -" 0 1) (LSET 0 3 9) (GREF 0 0) (PROC 1 0) (CALL 1)) ((((LREF 0 0 1) (LSET 0 4 8) ", -"(PROC 0 0) (LSET 0 4 7) (PROC 0 1) (LSET 0 4 6) (PROC 0 2) (LSET 0 4 5) (PROC 0 ", -"3) (LSET 0 4 4) (PROC 0 4) (LSET 0 4 3) (PROC 0 5) (LSET 0 4 2) (PROC 0 6) (PROC", -" 1 7) (PROC 2 8) (CALL 2)) ((((LREF 0 5 10) (PROC 1 0) (LREF 2 0 2) (CALL 2)) ((", -"((GREF 0 0) (LREF 1 1 1) (LREF 2 6 8) (LREF 3 0 1) (CALL 3)) () (dictionary-has?", -") (1 . #f) 5)) () (2 . #f) 4) (((LREF 0 5 10) (PROC 1 0) (LREF 2 0 2) (CALL 2)) ", -"((((PROC 0 0) (LREF 1 1 1) (LREF 2 0 1) (CALL 2)) ((((GREF 0 0) (PROC 1 0) (LREF", -" 2 0 2) (CALL 2)) ((((GREF 0 0) (PROC 1 0) (LREF 2 0 1) (LOAD 3 1) (CALL 3)) (((", -"(GREF 0 0) (PROC 1 0) (LREF 2 0 1) (CALL 2)) ((((GREF 0 0) (PROC 1 0) (LREF 2 0 ", -"1) (CALL 2)) ((((GREF 0 0) (PROC 1 0) (CALL 1)) ((((PROC 0 0) (LREF 1 5 1) (LREF", -" 2 1 1) (LREF 3 0 1) (CALL 3)) ((((GREF 0 0) (PROC 1 0) (LOAD 2 1) (LOAD 3 2) (L", -"REF 4 0 2) (CALL 4)) ((((GREF 0 0) (PROC 1 0) (LOAD 2 1) (LOAD 3 2) (LREF 4 1 2)", -" (CALL 4)) ((((GREF 0 0) (PROC 1 0) (LOAD 2 1) (LOAD 3 2) (LREF 4 2 2) (CALL 4))", -" ((((GREF 0 0) (PROC 1 0) (LOAD 2 1) (LOAD 3 2) (LREF 4 3 2) (CALL 4)) ((((GREF ", -"0 0) (PROC 1 0) (LREF 2 4 2) (LREF 3 4 3) (CALL 3)) ((((GREF 0 0) (LREF 1 5 1) (", -"LREF 2 18 8) (LREF 3 11 2) (LREF 4 0 1) (CALL 4)) () (dictionary-set!) (1 . #f) ", -"6)) (cons) (1 . #f) 5)) (set-identifier! cond-expand cond-expand) (1 . #f) 6)) (", -"set-identifier! export export) (1 . #f) 6)) (set-identifier! import import) (1 .", -" #f) 6)) (set-identifier! define-library define-library) (3 . #f) 6)) () (1 . #f", -") 5)) (make-dictionary) (1 . #f) 3)) (make-environment) (1 . #f) 4)) (string->sy", -"mbol) (1 . #f) 4)) (string-append \":\") (1 . #f) 5)) (symbol->string) (2 . #f) 4)", -") () (1 . #f) 4)) () (2 . #f) 4) (((LREF 0 5 10) (PROC 1 0) (LREF 2 0 2) (CALL 2", -")) ((((GREF 0 0) (PROC 1 0) (LREF 2 6 8) (LREF 3 0 1) (CALL 3)) ((((GREF 0 0) (L", -"REF 1 2 1) (LREF 2 0 1) (CALL 2)) () (car) (1 . #f) 4)) (dictionary-ref) (1 . #f", -") 5)) () (2 . #f) 4) (((LREF 0 5 10) (PROC 1 0) (LREF 2 0 2) (CALL 2)) ((((GREF ", -"0 0) (PROC 1 0) (LREF 2 6 8) (LREF 3 0 1) (CALL 3)) ((((GREF 0 0) (LREF 1 2 1) (", -"LREF 2 0 1) (CALL 2)) () (cdr) (1 . #f) 4)) (dictionary-ref) (1 . #f) 5)) () (2 ", -". #f) 4) (((LREF 0 5 4) (PROC 1 0) (LREF 2 0 2) (CALL 2)) ((((GREF 0 0) (PROC 1 ", -"0) (LREF 2 0 1) (LREF 3 1 3) (CALL 3)) ((((PROC 0 0) (LREF 1 2 1) (LREF 2 0 1) (", -"CALL 2)) ((((LREF 0 8 9) (PROC 1 0) (CALL 1)) ((((LREF 0 9 5) (PROC 1 0) (LREF 2", -" 0 1) (CALL 2)) ((((PROC 0 0) (LREF 1 2 1) (LREF 2 0 1) (CALL 2)) ((((GREF 0 0) ", -"(LREF 1 0 1) (LREF 2 6 4) (LREF 3 3 2) (LREF 4 0 2) (CALL 4)) () (set-identifier", -"!) (2 . #f) 6)) () (1 . #f) 4)) () (1 . #f) 4)) () (2 . #f) 3)) () (1 . #f) 4)) ", -"(dictionary-ref) (1 . #f) 5)) () (4 . #f) 4) (((LREF 0 5 9) (PROC 1 0) (CALL 1))", -" ((((LREF 0 6 5) (PROC 1 0) (LREF 2 0 1) (CALL 2)) ((((LREF 0 7 9) (PROC 1 0) (C", -"ALL 1)) ((((LREF 0 8 4) (PROC 1 0) (LREF 2 0 1) (CALL 2)) ((((PROC 0 0) (LREF 1 ", -"4 1) (LREF 2 2 1) (LREF 3 0 1) (CALL 3)) ((((GREF 0 0) (PROC 1 0) (LREF 2 5 2) (", -"LREF 3 0 2) (CALL 3)) ((((GREF 0 0) (LREF 1 1 1) (LREF 2 1 3) (LREF 3 6 3) (LREF", -" 4 0 1) (CALL 4)) () (dictionary-set!) (1 . #f) 6)) (find-identifier) (3 . #f) 5", -")) () (1 . #f) 5)) () (1 . #f) 4)) () (1 . #f) 3)) () (1 . #f) 4)) () (3 . #f) 3", -") (((LREF 0 0 2) (PROC 1 0) (LOAD 2 0) (PROC 3 1) (CALL 3)) ((((LREF 0 1 2) (PRO", -"C 1 0) (LOAD 2 0) (PROC 3 1) (CALL 3)) ((((LREF 0 2 2) (PROC 1 0) (LOAD 2 0) (PR", -"OC 3 1) (CALL 3)) ((((LREF 0 3 2) (LREF 1 3 1) (LOAD 2 0) (PROC 3 0) (CALL 3)) (", -"(((PROC 0 0) (LREF 1 0 1) (LOADU 2) (LOADU 3) (CALL 3)) ((((PROC 0 0) (LSET 0 0 ", -"2) (PROC 0 1) (LSET 0 0 3) (GREF 0 0) (PROC 1 2) (LREF 2 1 2) (CALL 2)) ((((GREF", -" 0 0) (PROC 1 0) (LREF 2 0 2) (CALL 2)) ((((LREF 0 0 1) (COND 0 10) (GREF 0 0) (", -"LREF 1 1 1) (LREF 2 1 2) (LREF 3 1 2) (CALL 3) 10 (PROC 0 0) (PROC 1 1) (CALL 1)", -") ((((GREF 0 0) (PROC 1 0) (LREF 2 2 2) (CALL 2)) ((((LREF 0 0 1) (COND 0 11) (G", -"REF 0 0) (PROC 1 0) (LREF 2 3 2) (CALL 2) 11 (LREF 0 1 1) (LOADF 1) (CALL 1)) ((", -"((GREF 0 0) (PROC 1 0) (LREF 2 0 1) (LOADI 3 3) (CALL 3)) ((((LREF 0 0 1) (COND ", -"0 12) (GREF 0 0) (PROC 1 0) (LREF 2 5 2) (CALL 2) 12 (LREF 0 3 1) (LOADF 1) (CAL", -"L 1)) ((((GREF 0 0) (LREF 1 4 1) (LREF 2 0 1) (LOAD 3 1) (CALL 3)) () (eq? renam", -"e) (1 . #f) 5)) (car) (1 . #f) 4)) (=) (1 . #f) 5)) (length) (1 . #f) 4)) (list?", -") (1 . #f) 4) (((LREF 0 0 1) (COND 0 13) (GREF 0 0) (PROC 1 0) (LREF 2 2 2) (LOA", -"DI 3 1) (CALL 3) 13 (GREF 0 1) (LREF 1 2 1) (LOAD 2 2) (CALL 2)) ((((GREF 0 0) (", -"PROC 1 0) (LREF 2 3 2) (LOADI 3 2) (CALL 3)) ((((GREF 0 0) (LREF 1 4 1) (LREF 2 ", -"1 1) (LREF 3 0 1) (CALL 3)) () (cons) (1 . #f) 5)) (list-ref) (1 . #f) 5)) (list", -"-ref error \"malformed export\") (1 . #f) 5)) (cons) (1 . #f) 5)) (symbol?) (2 . #", -"f) 4) (((LREF 0 1 2) (PROC 1 0) (LREF 2 0 2) (CALL 2)) ((((PROC 0 0) (LREF 1 1 1", -") (LREF 2 0 1) (CALL 2)) ((((GREF 0 0) (PROC 1 0) (LREF 2 0 2) (CALL 2)) ((((GRE", -"F 0 0) (PROC 1 0) (LREF 2 1 2) (CALL 2)) ((((LREF 0 15 2) (LREF 1 2 1) (LREF 2 1", -" 1) (LREF 3 0 1) (CALL 3)) () () (1 . #f) 5)) (cdr) (1 . #f) 4)) (car) (2 . #f) ", -"4)) () (1 . #f) 4)) () (2 . #f) 4) (((GREF 0 0) (LREF 1 1 1) (LREF 2 1 3) (LREF ", -"3 0 1) (CALL 3)) () (for-each) (1 . #f) 5)) (cdr) (3 . #f) 4)) () (3 . #f) 5)) (", -"export) (1 . #f) 5) (((PROC 0 0) (LREF 1 0 1) (PROC 2 1) (PROC 3 2) (PROC 4 3) (", -"CALL 4)) ((((PROC 0 0) (LREF 1 0 1) (LOADU 2) (LOADU 3) (CALL 3)) ((((PROC 0 0) ", -"(LSET 0 0 2) (PROC 0 1) (LSET 0 0 3) (PROC 0 2) (LREF 1 0 1) (LOADU 2) (CALL 2))", -" ((((GREF 0 0) (PROC 1 0) (LREF 2 0 2) (CALL 2)) ((((PROC 0 0) (LREF 1 1 1) (LRE", -"F 2 0 1) (CALL 2)) ((((GREF 0 0) (PROC 1 0) (LREF 2 0 2) (LOAD 3 1) (CALL 3)) ((", -"((PROC 0 0) (PROC 1 1) (LREF 2 0 1) (CALL 2)) ((((LREF 0 0 2) (COND 0 14) (LREF ", -"0 0 1) (LREF 1 0 2) (CALL 1) 14 (GREF 0 0) (PROC 1 0) (LREF 2 2 2) (LOAD 3 1) (C", -"ALL 3)) ((((PROC 0 0) (LREF 1 1 1) (LREF 2 0 1) (CALL 2)) ((((LREF 0 0 2) (COND ", -"0 15) (LREF 0 0 1) (LREF 1 0 2) (CALL 1) 15 (GREF 0 0) (PROC 1 0) (LREF 2 4 2) (", -"LOAD 3 1) (CALL 3)) ((((PROC 0 0) (LREF 1 1 1) (LREF 2 0 1) (CALL 2)) ((((LREF 0", -" 0 2) (COND 0 16) (LREF 0 0 1) (LREF 1 0 2) (CALL 1) 16 (GREF 0 0) (PROC 1 0) (L", -"REF 2 6 2) (LOAD 3 1) (CALL 3)) ((((PROC 0 0) (LREF 1 1 1) (LREF 2 0 1) (CALL 2)", -") ((((LREF 0 0 2) (COND 0 17) (LREF 0 0 1) (LREF 1 0 2) (CALL 1) 17 (LREF 0 0 1)", -" (LOADF 1) (CALL 1)) () () (2 . #f) 3)) () (1 . #f) 4)) (eqv? except) (2 . #f) 5", -")) () (1 . #f) 4)) (eqv? prefix) (2 . #f) 5)) () (1 . #f) 4)) (eqv? rename) (2 .", -" #f) 5) (((LREF 0 0 1) (COND 0 18) (GREF 0 0) (PROC 1 0) (LREF 2 4 2) (CALL 2) 1", -"8 (LOADT 0) (COND 0 19) (LREF 0 6 4) (LREF 1 2 1) (LREF 2 4 2) (CALL 2) 19 (LREF", -" 0 2 1) (LOADU 1) (CALL 1)) ((((LREF 0 6 2) (LREF 1 3 1) (LREF 2 0 1) (CALL 2)) ", -"() () (1 . #f) 4)) (cadr) (1 . #f) 4)) () (1 . #f) 4)) (eqv? only) (2 . #f) 5)) ", -"() (1 . #f) 4)) (car) (2 . #f) 4) (((GREF 0 0) (PROC 1 0) (LREF 2 0 2) (CALL 2))", -" ((((PROC 0 0) (LREF 1 1 1) (LREF 2 0 1) (CALL 2)) ((((GREF 0 0) (PROC 1 0) (LRE", -"F 2 0 2) (LOAD 3 1) (CALL 3)) ((((PROC 0 0) (PROC 1 1) (LREF 2 0 1) (CALL 2)) ((", -"((LREF 0 0 2) (COND 0 20) (LREF 0 0 1) (LREF 1 0 2) (CALL 1) 20 (LREF 0 0 1) (LO", -"ADF 1) (CALL 1)) () () (2 . #f) 3) (((LREF 0 0 1) (COND 0 21) (GREF 0 0) (PROC 1", -" 0) (LREF 2 4 2) (CALL 2) 21 (GREF 0 1) (PROC 1 1) (LREF 2 2 2) (LOAD 3 2) (CALL", -" 3)) ((((LREF 0 6 3) (PROC 1 0) (LREF 2 0 1) (CALL 2)) ((((PROC 0 0) (LREF 1 4 1", -") (LREF 2 0 1) (CALL 2)) ((((GREF 0 0) (PROC 1 0) (LREF 2 7 2) (CALL 2)) ((((GRE", -"F 0 0) (LREF 1 1 1) (PROC 2 0) (LREF 3 0 1) (CALL 3)) ((((GREF 0 0) (LREF 1 0 1)", -" (LREF 2 0 2) (LREF 3 2 2) (CALL 3)) () (assq) (2 . #f) 5)) (map) (1 . #f) 5)) (", -"cddr) (2 . #f) 4)) () (1 . #f) 4)) () (1 . #f) 4) (((PROC 0 0) (PROC 1 1) (LREF ", -"2 0 1) (CALL 2)) ((((LREF 0 0 2) (COND 0 22) (LREF 0 0 1) (LREF 1 0 2) (CALL 1) ", -"22 (LREF 0 0 1) (LOADF 1) (CALL 1)) () () (2 . #f) 3) (((LREF 0 0 1) (COND 0 23)", -" (GREF 0 0) (PROC 1 0) (LREF 2 6 2) (CALL 2) 23 (GREF 0 1) (PROC 1 1) (LREF 2 4 ", -"2) (LOAD 3 2) (CALL 3)) ((((LREF 0 8 3) (PROC 1 0) (LREF 2 0 1) (CALL 2)) ((((GR", -"EF 0 0) (PROC 1 0) (LREF 2 8 2) (CALL 2)) ((((GREF 0 0) (PROC 1 0) (PROC 2 1) (L", -"REF 3 0 1) (CALL 3)) ((((PROC 0 0) (LREF 1 8 1) (LREF 2 2 1) (LREF 3 0 1) (CALL ", -"3)) ((((GREF 0 0) (LREF 1 0 1) (PROC 2 0) (LREF 3 0 2) (CALL 3)) ((((GREF 0 0) (", -"PROC 1 0) (LREF 2 0 2) (CALL 2)) ((((GREF 0 0) (PROC 1 0) (LREF 2 0 1) (LREF 3 2", -" 3) (CALL 3)) ((((PROC 0 0) (LREF 1 2 1) (LREF 2 0 1) (CALL 2)) ((((LREF 0 0 2) ", -"(COND 0 24) (LREF 0 0 1) (LREF 1 0 2) (CALL 1) 24 (PROC 0 0) (LREF 1 0 1) (LREF ", -"2 3 2) (CALL 2)) ((((LREF 0 0 2) (COND 0 25) (LREF 0 0 1) (LREF 1 0 2) (CALL 1) ", -"25 (LREF 0 0 1) (LOADF 1) (CALL 1)) () () (2 . #f) 3)) () (2 . #f) 4)) () (1 . #", -"f) 4)) (assq) (1 . #f) 5)) (car) (2 . #f) 4)) (map) (3 . #f) 5)) () (1 . #f) 5) ", -"(((GREF 0 0) (PROC 1 0) (LREF 2 0 2) (CALL 2)) ((((GREF 0 0) (PROC 1 0) (LREF 2 ", -"1 2) (CALL 2)) ((((GREF 0 0) (LREF 1 2 1) (LREF 2 1 1) (LREF 3 0 1) (CALL 3)) ()", -" (cons) (1 . #f) 5)) (cadr) (1 . #f) 4)) (car) (2 . #f) 4)) (map) (1 . #f) 5)) (", -"cddr) (1 . #f) 4)) () (1 . #f) 4) (((PROC 0 0) (PROC 1 1) (LREF 2 0 1) (CALL 2))", -" ((((LREF 0 0 2) (COND 0 26) (LREF 0 0 1) (LREF 1 0 2) (CALL 1) 26 (LREF 0 0 1) ", -"(LOADF 1) (CALL 1)) () () (2 . #f) 3) (((LREF 0 0 1) (COND 0 27) (GREF 0 0) (PRO", -"C 1 0) (LREF 2 8 2) (CALL 2) 27 (GREF 0 1) (PROC 1 1) (LREF 2 6 2) (LOAD 3 2) (C", -"ALL 3)) ((((LREF 0 10 3) (PROC 1 0) (LREF 2 0 1) (CALL 2)) ((((PROC 0 0) (LREF 1", -" 8 1) (LREF 2 0 1) (CALL 2)) ((((GREF 0 0) (LREF 1 0 1) (PROC 2 0) (LREF 3 0 2) ", -"(CALL 3)) ((((LREF 0 14 2) (PROC 1 0) (LREF 2 12 2) (CALL 2)) ((((GREF 0 0) (PRO", -"C 1 0) (LREF 2 1 2) (CALL 2)) ((((LREF 0 16 3) (PROC 1 0) (LREF 2 1 1) (LREF 3 0", -" 1) (CALL 3)) ((((GREF 0 0) (PROC 1 0) (LREF 2 3 2) (CALL 2)) ((((GREF 0 0) (LRE", -"F 1 4 1) (LREF 2 1 1) (LREF 3 0 1) (CALL 3)) () (cons) (1 . #f) 5)) (cdr) (1 . #", -"f) 4)) () (1 . #f) 5)) (car) (1 . #f) 4)) () (2 . #f) 4)) (map) (2 . #f) 5)) () ", -"(1 . #f) 4)) () (1 . #f) 4) (((PROC 0 0) (PROC 1 1) (LREF 2 0 1) (CALL 2)) ((((L", -"REF 0 0 2) (COND 0 28) (LREF 0 0 1) (LREF 1 0 2) (CALL 1) 28 (LREF 0 0 1) (LOADF", -" 1) (CALL 1)) () () (2 . #f) 3) (((LREF 0 0 1) (COND 0 29) (GREF 0 0) (PROC 1 0)", -" (LREF 2 10 2) (CALL 2) 29 (LOADT 0) (COND 0 32) (LREF 0 12 4) (PROC 1 1) (LREF ", -"2 10 2) (CALL 2) 32 (LREF 0 8 1) (LOADU 1) (CALL 1)) ((((LREF 0 12 3) (PROC 1 0)", -" (LREF 2 0 1) (CALL 2)) ((((PROC 0 0) (LREF 1 10 1) (LREF 2 0 1) (CALL 2)) ((((P", -"ROC 0 0) (LREF 1 0 1) (CALL 1)) ((((PROC 0 0) (LREF 1 0 1) (LOADF 2) (CALL 2)) (", -"(((PROC 0 0) (LSET 0 0 2) (LREF 0 0 2) (LREF 1 0 1) (LREF 2 2 2) (CALL 2)) ((((G", -"REF 0 0) (PROC 1 0) (LREF 2 0 2) (CALL 2)) ((((LREF 0 0 1) (COND 0 30) (LREF 0 1", -" 1) (LOADN 1) (CALL 1) 30 (GREF 0 0) (PROC 1 0) (LREF 2 1 2) (CALL 2)) ((((GREF ", -"0 0) (PROC 1 0) (LREF 2 18 2) (CALL 2)) ((((GREF 0 0) (PROC 1 0) (LREF 2 1 1) (L", -"REF 3 0 1) (CALL 3)) ((((LREF 0 0 1) (COND 0 31) (GREF 0 0) (PROC 1 0) (LREF 2 4", -" 2) (CALL 2) 31 (GREF 0 1) (PROC 1 1) (LREF 2 4 2) (CALL 2)) ((((LREF 0 6 2) (LR", -"EF 1 5 1) (LREF 2 0 1) (CALL 2)) () () (1 . #f) 4) (((GREF 0 0) (PROC 1 0) (LREF", -" 2 5 2) (CALL 2)) ((((LREF 0 7 2) (PROC 1 0) (LREF 2 0 1) (CALL 2)) ((((GREF 0 0", -") (LREF 1 7 1) (LREF 2 2 1) (LREF 3 0 1) (CALL 3)) () (cons) (1 . #f) 5)) () (1 ", -". #f) 4)) (cdr) (1 . #f) 4)) (cdr car) (1 . #f) 4)) (memq) (1 . #f) 5)) (cddr) (", -"1 . #f) 4)) (caar) (1 . #f) 4)) (null?) (2 . #f) 4)) () (2 . #f) 4)) () (1 . #f)", -" 4)) () (2 . #f) 3)) () (1 . #f) 4)) () (1 . #f) 4) (((LREF 0 22 4) (PROC 1 0) (", -"LREF 2 0 1) (CALL 2)) ((((GREF 0 0) (LREF 1 10 1) (PROC 2 0) (LREF 3 0 1) (CALL ", -"3)) ((((GREF 0 0) (LREF 1 0 1) (LREF 2 0 2) (LREF 3 0 2) (CALL 3)) () (cons) (2 ", -". #f) 5)) (dictionary-map) (1 . #f) 5)) () (1 . #f) 4)) (cadr) (1 . #f) 4)) () (", -"1 . #f) 4)) (cadr eqv? except) (1 . #f) 5)) () (1 . #f) 4)) (cadr eqv? prefix) (", -"1 . #f) 5)) () (1 . #f) 4)) (cadr eqv? rename) (1 . #f) 5)) () (1 . #f) 4)) (eqv", -"? only) (2 . #f) 5)) () (1 . #f) 4)) (car) (2 . #f) 4) (((PROC 0 0) (LSET 0 0 2)", -" (GREF 0 0) (PROC 1 1) (LREF 2 3 2) (CALL 2)) ((((LREF 0 2 2) (PROC 1 0) (LREF 2", -" 0 2) (CALL 2)) ((((LREF 0 3 3) (PROC 1 0) (LREF 2 1 2) (CALL 2)) ((((PROC 0 0) ", -"(LREF 1 2 1) (LREF 2 1 1) (LREF 3 0 1) (CALL 3)) ((((GREF 0 0) (LREF 1 0 1) (PRO", -"C 2 0) (LREF 3 0 3) (CALL 3)) ((((GREF 0 0) (PROC 1 0) (LREF 2 0 2) (CALL 2)) ((", -"((GREF 0 0) (PROC 1 0) (LREF 2 1 2) (CALL 2)) ((((LREF 0 18 3) (LREF 1 2 1) (LRE", -"F 2 3 2) (LREF 3 1 1) (LREF 4 0 1) (CALL 4)) () () (1 . #f) 6)) (car) (1 . #f) 4", -")) (cdr) (2 . #f) 4)) (for-each) (3 . #f) 5)) () (1 . #f) 5)) () (1 . #f) 4)) ()", -" (2 . #f) 4) (((GREF 0 0) (LREF 1 1 1) (LREF 2 1 2) (LREF 3 0 1) (CALL 3)) () (f", -"or-each) (1 . #f) 5)) (cdr) (2 . #f) 4)) () (3 . #f) 4)) () (4 . #f) 5) (((GREF ", -"0 0) (PROC 1 0) (LREF 2 0 2) (CALL 2)) ((((GREF 0 0) (PROC 1 0) (LREF 2 0 1) (CA", -"LL 2)) ((((GREF 0 0) (LREF 1 2 1) (LREF 2 0 1) (CALL 2)) () (car) (1 . #f) 4)) (", -"cdr) (1 . #f) 4)) (cdr) (2 . #f) 4) (((GREF 0 0) (PROC 1 0) (LREF 2 0 2) (CALL 2", -")) ((((GREF 0 0) (PROC 1 0) (LREF 2 1 3) (CALL 2)) ((((GREF 0 0) (PROC 1 0) (LRE", -"F 2 1 1) (LREF 3 0 1) (CALL 3)) ((((GREF 0 0) (LREF 1 3 1) (LREF 2 0 1) (CALL 2)", -") () (string->symbol) (1 . #f) 4)) (string-append) (1 . #f) 5)) (symbol->string)", -" (1 . #f) 4)) (symbol->string) (3 . #f) 4) (((LREF 0 9 7) (PROC 1 0) (LREF 2 0 2", -") (CALL 2)) ((((LREF 0 0 1) (COND 0 33) (LREF 0 1 1) (LREF 1 1 2) (CALL 1) 33 (G", -"REF 0 0) (LREF 1 1 1) (LOAD 2 1) (LREF 3 1 2) (CALL 3)) () (error \"library not f", -"ound\") (1 . #f) 5)) () (2 . #f) 4)) () (3 . #f) 6)) (import) (1 . #f) 5) (((PROC", -" 0 0) (LREF 1 0 1) (LOADU 2) (CALL 2)) ((((PROC 0 0) (LSET 0 0 2) (PROC 0 1) (LR", -"EF 1 0 1) (CALL 1)) ((((GREF 0 0) (PROC 1 0) (LREF 2 0 2) (LOAD 3 1) (CALL 3)) (", -"(((PROC 0 0) (LREF 1 1 1) (LREF 2 0 1) (CALL 2)) ((((LREF 0 0 2) (COND 0 34) (LR", -"EF 0 0 1) (LREF 1 0 2) (CALL 1) 34 (PROC 0 0) (PROC 1 1) (CALL 1)) ((((GREF 0 0)", -" (PROC 1 0) (LREF 2 3 2) (CALL 2)) ((((LREF 0 0 1) (COND 0 35) (GREF 0 0) (PROC ", -"1 0) (CALL 1) 35 (LREF 0 1 1) (LOADF 1) (CALL 1)) ((((GREF 0 0) (LREF 1 2 1) (LR", -"EF 2 5 2) (LREF 3 0 1) (CALL 3)) () (memq) (1 . #f) 5)) (features) (1 . #f) 3)) ", -"(symbol?) (1 . #f) 4) (((PROC 0 0) (LREF 1 1 1) (LREF 2 0 1) (CALL 2)) ((((LREF ", -"0 0 2) (COND 0 36) (LREF 0 0 1) (LREF 1 0 2) (CALL 1) 36 (PROC 0 0) (PROC 1 1) (", -"CALL 1)) ((((GREF 0 0) (PROC 1 0) (LREF 2 5 2) (CALL 2)) ((((LREF 0 0 1) (COND 0", -" 37) (GREF 0 0) (PROC 1 0) (LREF 2 6 2) (CALL 2) 37 (LREF 0 1 1) (LOADF 1) (CALL", -" 1)) ((((PROC 0 0) (LREF 1 2 1) (LREF 2 0 1) (CALL 2)) ((((GREF 0 0) (PROC 1 0) ", -"(LREF 2 0 2) (LOAD 3 1) (CALL 3)) ((((PROC 0 0) (PROC 1 1) (LREF 2 0 1) (CALL 2)", -") ((((LREF 0 0 2) (COND 0 38) (LREF 0 0 1) (LREF 1 0 2) (CALL 1) 38 (LREF 0 0 1)", -" (LOADF 1) (CALL 1)) () () (2 . #f) 3) (((LREF 0 0 1) (COND 0 39) (GREF 0 0) (PR", -"OC 1 0) (LREF 2 10 2) (CALL 2) 39 (GREF 0 1) (PROC 1 1) (LREF 2 2 2) (LOAD 3 2) ", -"(CALL 3)) ((((LREF 0 20 7) (LREF 1 3 1) (LREF 2 0 1) (CALL 2)) () () (1 . #f) 4)", -" (((PROC 0 0) (PROC 1 1) (LREF 2 0 1) (CALL 2)) ((((LREF 0 0 2) (COND 0 40) (LRE", -"F 0 0 1) (LREF 1 0 2) (CALL 1) 40 (LREF 0 0 1) (LOADF 1) (CALL 1)) () () (2 . #f", -") 3) (((LREF 0 0 1) (COND 0 41) (GREF 0 0) (PROC 1 0) (LREF 2 12 2) (CALL 2) 41 ", -"(GREF 0 1) (PROC 1 1) (LREF 2 4 2) (LOAD 3 2) (CALL 3)) ((((LREF 0 14 2) (PROC 1", -" 0) (LREF 2 0 1) (CALL 2)) ((((GREF 0 0) (LREF 1 6 1) (LREF 2 0 1) (CALL 2)) () ", -"(not) (1 . #f) 4)) () (1 . #f) 4) (((PROC 0 0) (PROC 1 1) (LREF 2 0 1) (CALL 2))", -" ((((LREF 0 0 2) (COND 0 42) (LREF 0 0 1) (LREF 1 0 2) (CALL 1) 42 (LREF 0 0 1) ", -"(LOADF 1) (CALL 1)) () () (2 . #f) 3) (((LREF 0 0 1) (COND 0 43) (PROC 0 0) (LRE", -"F 1 6 1) (CALL 1) 43 (GREF 0 0) (PROC 1 1) (LREF 2 6 2) (LOAD 3 1) (CALL 3)) (((", -"(PROC 0 0) (LREF 1 0 1) (LOADF 2) (CALL 2)) ((((PROC 0 0) (LSET 0 0 2) (GREF 0 0", -") (PROC 1 1) (LREF 2 16 2) (CALL 2)) ((((GREF 0 0) (PROC 1 0) (LREF 2 0 2) (CALL", -" 2)) ((((PROC 0 0) (LREF 1 1 1) (LREF 2 0 1) (CALL 2)) ((((LREF 0 0 2) (COND 0 4", -"4) (LREF 0 0 1) (LREF 1 0 2) (CALL 1) 44 (PROC 0 0) (PROC 1 1) (CALL 1)) ((((GRE", -"F 0 0) (PROC 1 0) (LREF 2 3 2) (CALL 2)) ((((LREF 0 22 2) (PROC 1 0) (LREF 2 0 1", -") (CALL 2)) ((((LREF 0 0 1) (COND 0 45) (GREF 0 0) (PROC 1 0) (LREF 2 5 2) (CALL", -" 2) 45 (LREF 0 2 1) (LOADF 1) (CALL 1)) ((((LREF 0 7 2) (LREF 1 3 1) (LREF 2 0 1", -") (CALL 2)) () () (1 . #f) 4)) (cdr) (1 . #f) 4)) () (1 . #f) 4)) (car) (1 . #f)", -" 4) (((PROC 0 0) (LREF 1 1 1) (LREF 2 0 1) (CALL 2)) ((((LREF 0 0 2) (COND 0 46)", -" (LREF 0 0 1) (LREF 1 0 2) (CALL 1) 46 (LREF 0 0 1) (LOADF 1) (CALL 1)) () () (2", -" . #f) 3)) () (1 . #f) 4)) () (2 . #f) 3)) () (1 . #f) 4)) (null?) (2 . #f) 4) (", -"((LREF 0 1 2) (LREF 1 1 1) (LREF 2 0 1) (CALL 2)) () () (1 . #f) 4)) (cdr) (2 . ", -"#f) 4)) () (1 . #f) 4) (((PROC 0 0) (PROC 1 1) (LREF 2 0 1) (CALL 2)) ((((LREF 0", -" 0 2) (COND 0 47) (LREF 0 0 1) (LREF 1 0 2) (CALL 1) 47 (LREF 0 0 1) (LOADF 1) (", -"CALL 1)) () () (2 . #f) 3) (((LREF 0 0 1) (COND 0 48) (PROC 0 0) (LREF 1 8 1) (C", -"ALL 1) 48 (LOADT 0) (COND 0 52) (LREF 0 8 1) (LOADF 1) (CALL 1) 52 (LREF 0 8 1) ", -"(LOADU 1) (CALL 1)) ((((PROC 0 0) (LREF 1 0 1) (LOADF 2) (CALL 2)) ((((PROC 0 0)", -" (LSET 0 0 2) (GREF 0 0) (PROC 1 1) (LREF 2 18 2) (CALL 2)) ((((GREF 0 0) (PROC ", -"1 0) (LREF 2 0 2) (CALL 2)) ((((LREF 0 0 1) (COND 0 49) (GREF 0 0) (PROC 1 0) (L", -"REF 2 1 2) (CALL 2) 49 (LREF 0 1 1) (LOADF 1) (CALL 1)) ((((LREF 0 22 2) (PROC 1", -" 0) (LREF 2 0 1) (CALL 2)) ((((PROC 0 0) (LREF 1 3 1) (LREF 2 0 1) (CALL 2)) (((", -"(LREF 0 0 2) (COND 0 50) (LREF 0 0 1) (LREF 1 0 2) (CALL 1) 50 (GREF 0 0) (PROC ", -"1 0) (LREF 2 4 2) (CALL 2)) ((((LREF 0 6 2) (PROC 1 0) (LREF 2 0 1) (CALL 2)) ((", -"((PROC 0 0) (LREF 1 2 1) (LREF 2 0 1) (CALL 2)) ((((LREF 0 0 2) (COND 0 51) (LRE", -"F 0 0 1) (LREF 1 0 2) (CALL 1) 51 (LREF 0 0 1) (LOADF 1) (CALL 1)) () () (2 . #f", -") 3)) () (1 . #f) 4)) () (1 . #f) 4)) (cdr) (2 . #f) 4)) () (1 . #f) 4)) () (1 .", -" #f) 4)) (car) (1 . #f) 4)) (pair?) (2 . #f) 4) (((LREF 0 1 2) (LREF 1 1 1) (LRE", -"F 2 0 1) (CALL 2)) () () (1 . #f) 4)) (cdr) (2 . #f) 4)) () (1 . #f) 4)) () (1 .", -" #f) 3)) () (1 . #f) 4)) (eqv? or) (1 . #f) 5)) () (1 . #f) 4)) (cadr eqv? and) ", -"(1 . #f) 5)) () (1 . #f) 4)) (cadr eqv? not) (1 . #f) 5)) () (1 . #f) 4)) (eqv? ", -"library) (2 . #f) 5)) () (1 . #f) 4)) (car) (1 . #f) 4)) (pair?) (1 . #f) 4) (((", -"PROC 0 0) (LREF 1 1 1) (LREF 2 0 1) (CALL 2)) ((((LREF 0 0 2) (COND 0 53) (LREF ", -"0 0 1) (LREF 1 0 2) (CALL 1) 53 (LREF 0 0 1) (LOADF 1) (CALL 1)) () () (2 . #f) ", -"3)) () (1 . #f) 4)) () (2 . #f) 3)) () (1 . #f) 4)) () (2 . #f) 3)) () (1 . #f) ", -"4)) (eq? else) (2 . #f) 5) (((PROC 0 0) (LREF 1 0 1) (LOADF 2) (CALL 2)) ((((PRO", -"C 0 0) (LSET 0 0 2) (GREF 0 0) (PROC 1 1) (LREF 2 3 2) (CALL 2)) ((((GREF 0 0) (", -"PROC 1 0) (LREF 2 0 2) (CALL 2)) ((((LREF 0 0 1) (COND 0 54) (LREF 0 1 1) (LOADU", -" 1) (CALL 1) 54 (GREF 0 0) (PROC 1 0) (LREF 2 1 2) (CALL 2)) ((((LREF 0 5 2) (PR", -"OC 1 0) (LREF 2 0 1) (CALL 2)) ((((LREF 0 0 1) (COND 0 55) (GREF 0 0) (PROC 1 0)", -" (LOAD 2 1) (GREF 3 2) (CALL 3) 55 (GREF 0 3) (PROC 1 1) (LREF 2 3 2) (CALL 2)) ", -"((((GREF 0 0) (PROC 1 0) (LREF 2 4 2) (CALL 2)) ((((GREF 0 0) (PROC 1 0) (LREF 2", -" 0 1) (LOADN 3) (CALL 3)) ((((GREF 0 0) (LREF 1 6 1) (LREF 2 2 1) (LREF 3 0 1) (", -"CALL 3)) () (cons) (1 . #f) 5)) (append) (1 . #f) 5)) (cdar) (1 . #f) 4) (((LREF", -" 0 5 2) (LREF 1 4 1) (LREF 2 0 1) (CALL 2)) () () (1 . #f) 4)) (make-identifier ", -"begin default-environment cdr) (1 . #f) 5)) () (1 . #f) 4)) (caar) (1 . #f) 4)) ", -"(null?) (2 . #f) 4) (((LREF 0 1 2) (LREF 1 1 1) (LREF 2 0 1) (CALL 2)) () () (1 ", -". #f) 4)) (cdr) (2 . #f) 4)) () (1 . #f) 4)) () (2 . #f) 3)) () (3 . #f) 4)) (co", -"nd-expand) (1 . #f) 5) (((GREF 0 0) (PROC 1 0) (LREF 2 0 2) (CALL 2)) ((((GREF 0", -" 0) (PROC 1 0) (LREF 2 1 2) (CALL 2)) ((((PROC 0 0) (LREF 1 2 1) (LREF 2 1 1) (L", -"REF 3 0 1) (CALL 3)) ((((LREF 0 9 7) (PROC 1 0) (LREF 2 0 2) (CALL 2)) ((((PROC ", -"0 0) (PROC 1 1) (LREF 2 0 1) (CALL 2)) ((((LREF 0 0 2) (COND 0 56) (LREF 0 0 1) ", -"(LREF 1 0 2) (CALL 1) 56 (LREF 0 11 6) (PROC 1 0) (LREF 2 2 2) (CALL 2)) ((((PRO", -"C 0 0) (LREF 1 1 1) (LREF 2 0 1) (CALL 2)) ((((LREF 0 0 2) (COND 0 57) (LREF 0 0", -" 1) (LREF 1 0 2) (CALL 1) 57 (LREF 0 0 1) (LOADF 1) (CALL 1)) () () (2 . #f) 3))", -" () (1 . #f) 4)) () (2 . #f) 4) (((GREF 0 0) (PROC 1 0) (LREF 2 11 9) (LREF 3 2 ", -"2) (CALL 3)) ((((GREF 0 0) (PROC 1 0) (LREF 2 0 1) (CALL 2)) ((((GREF 0 0) (LREF", -" 1 4 1) (LREF 2 0 1) (PROC 3 0) (CALL 3)) ((((GREF 0 0) (LREF 1 0 1) (PROC 2 0) ", -"(LREF 3 5 3) (CALL 3)) ((((PROC 0 0) (PROC 1 1) (CALL 1)) ((((PROC 0 0) (PROC 1 ", -"1) (CALL 1)) ((((GREF 0 0) (PROC 1 0) (LREF 2 2 2) (CALL 2)) ((((LREF 0 0 1) (CO", -"ND 0 58) (GREF 0 0) (PROC 1 0) (LREF 2 3 2) (CALL 2) 58 (LREF 0 1 1) (LOADF 1) (", -"CALL 1)) ((((GREF 0 0) (LREF 1 2 1) (LREF 2 0 1) (LOAD 3 1) (CALL 3)) () (eq? be", -"gin) (1 . #f) 5)) (car) (1 . #f) 4)) (pair?) (1 . #f) 4) (((LREF 0 0 1) (COND 0 ", -"59) (GREF 0 0) (LREF 1 1 1) (LREF 2 2 2) (CALL 2) 59 (GREF 0 1) (LREF 1 1 1) (LR", -"EF 2 2 2) (CALL 2)) () (cdr list) (1 . #f) 4)) () (1 . #f) 3) (((PROC 0 0) (LREF", -" 1 1 1) (LREF 2 0 1) (CALL 2)) ((((GREF 0 0) (LREF 1 0 1) (PROC 2 0) (LREF 3 0 2", -") (CALL 3)) ((((GREF 0 0) (LREF 1 0 1) (LREF 2 0 2) (LREF 3 9 2) (CALL 3)) () (e", -"val) (2 . #f) 5)) (for-each) (2 . #f) 5)) () (1 . #f) 4)) () (2 . #f) 3)) (for-e", -"ach) (1 . #f) 5)) (with-dynamic-environment) (1 . #f) 5)) (list) (1 . #f) 4)) (c", -"ons) (1 . #f) 5)) () (1 . #f) 4)) () (3 . #f) 4)) () (1 . #f) 5)) (cddr) (1 . #f", -") 4)) (cadr) (3 . #f) 4)) (define-library) (2 . #f) 5) (((PROC 0 0) (PROC 1 1) (", -"CALL 1)) ((((GREF 0 0) (PROC 1 0) (LOAD 2 1) (LOADN 3) (CALL 3)) ((((GREF 0 0) (", -"PROC 1 0) (LOAD 2 1) (LREF 3 0 1) (CALL 3)) ((((LREF 0 8 6) (PROC 1 0) (LREF 2 0", -" 1) (CALL 2)) ((((GREF 0 0) (PROC 1 0) (LOAD 2 1) (LOADN 3) (CALL 3)) ((((GREF 0", -" 0) (PROC 1 0) (LOAD 2 1) (LREF 3 0 1) (CALL 3)) ((((LREF 0 11 10) (PROC 1 0) (L", -"REF 2 0 1) (CALL 2)) ((((GREF 0 0) (PROC 1 0) (LREF 2 12 8) (LREF 3 0 1) (CALL 3", -")) ((((GREF 0 0) (PROC 1 0) (LREF 2 0 1) (GREF 3 1) (CALL 3)) ((((GREF 0 0) (PRO", -"C 1 0) (LOAD 2 1) (LOADN 3) (CALL 3)) ((((GREF 0 0) (PROC 1 0) (LOAD 2 1) (LREF ", -"3 0 1) (CALL 3)) ((((LREF 0 16 4) (PROC 1 0) (LREF 2 0 1) (CALL 2)) ((((PROC 0 0", -") (PROC 1 1) (LREF 2 0 1) (CALL 2)) ((((PROC 0 0) (LREF 1 0 1) (PROC 2 1) (CALL ", -"2)) ((((PROC 0 0) (LREF 1 0 1) (CALL 1)) ((((GREF 0 0) (PROC 1 0) (LOAD 2 1) (LO", -"ADN 3) (CALL 3)) ((((GREF 0 0) (PROC 1 0) (LOAD 2 1) (LREF 3 0 1) (CALL 3)) ((((", -"GREF 0 0) (PROC 1 0) (LOAD 2 1) (LREF 3 0 1) (CALL 3)) ((((GREF 0 0) (PROC 1 0) ", -"(LOAD 2 1) (LREF 3 0 1) (CALL 3)) ((((GREF 0 0) (PROC 1 0) (LOAD 2 1) (LREF 3 0 ", -"1) (CALL 3)) ((((GREF 0 0) (PROC 1 0) (LOAD 2 1) (LREF 3 0 1) (CALL 3)) ((((GREF", -" 0 0) (PROC 1 0) (LOAD 2 1) (LREF 3 0 1) (CALL 3)) ((((GREF 0 0) (PROC 1 0) (LOA", -"D 2 1) (LREF 3 0 1) (CALL 3)) ((((GREF 0 0) (PROC 1 0) (LOAD 2 1) (LREF 3 0 1) (", -"CALL 3)) ((((GREF 0 0) (PROC 1 0) (LOAD 2 1) (LREF 3 0 1) (CALL 3)) ((((GREF 0 0", -") (PROC 1 0) (LOAD 2 1) (LREF 3 0 1) (CALL 3)) ((((GREF 0 0) (PROC 1 0) (LOAD 2 ", -"1) (LREF 3 0 1) (CALL 3)) ((((GREF 0 0) (PROC 1 0) (LOAD 2 1) (LREF 3 0 1) (CALL", -" 3)) ((((GREF 0 0) (PROC 1 0) (LOAD 2 1) (LREF 3 0 1) (CALL 3)) ((((GREF 0 0) (P", -"ROC 1 0) (LOAD 2 1) (LREF 3 0 1) (CALL 3)) ((((GREF 0 0) (PROC 1 0) (LOAD 2 1) (", -"LREF 3 0 1) (CALL 3)) ((((GREF 0 0) (PROC 1 0) (LOAD 2 1) (LREF 3 0 1) (CALL 3))", -" ((((GREF 0 0) (PROC 1 0) (LOAD 2 1) (LREF 3 0 1) (CALL 3)) ((((GREF 0 0) (PROC ", -"1 0) (LOAD 2 1) (LREF 3 0 1) (CALL 3)) ((((GREF 0 0) (PROC 1 0) (LOAD 2 1) (LREF", -" 3 0 1) (CALL 3)) ((((GREF 0 0) (PROC 1 0) (LOAD 2 1) (LREF 3 0 1) (CALL 3)) (((", -"(GREF 0 0) (PROC 1 0) (LOAD 2 1) (LREF 3 0 1) (CALL 3)) ((((GREF 0 0) (PROC 1 0)", -" (LOAD 2 1) (LREF 3 0 1) (CALL 3)) ((((GREF 0 0) (PROC 1 0) (LOAD 2 1) (LREF 3 0", -" 1) (CALL 3)) ((((GREF 0 0) (PROC 1 0) (LOAD 2 1) (LREF 3 0 1) (CALL 3)) ((((GRE", -"F 0 0) (PROC 1 0) (LOAD 2 1) (LREF 3 0 1) (CALL 3)) ((((GREF 0 0) (PROC 1 0) (LO", -"AD 2 1) (LREF 3 0 1) (CALL 3)) ((((GREF 0 0) (PROC 1 0) (LOAD 2 1) (LREF 3 0 1) ", -"(CALL 3)) ((((GREF 0 0) (PROC 1 0) (LREF 2 29 2) (LREF 3 0 1) (CALL 3)) ((((LREF", -" 0 30 2) (PROC 1 0) (LOAD 2 0) (CALL 2)) ((((GREF 0 0) (PROC 1 0) (CALL 1)) ((((", -"GREF 0 0) (LREF 1 31 1) (LREF 2 32 2) (LREF 3 0 1) (CALL 3)) () (dictionary-for-", -"each) (1 . #f) 5)) (global-objects) (1 . #f) 3)) (boolean?) (1 . #f) 4)) (for-ea", -"ch) (1 . #f) 5)) (cons define) (1 . #f) 5)) (cons lambda) (1 . #f) 5)) (cons quo", -"te) (1 . #f) 5)) (cons set!) (1 . #f) 5)) (cons if) (1 . #f) 5)) (cons begin) (1", -" . #f) 5)) (cons define-macro) (1 . #f) 5)) (cons let) (1 . #f) 5)) (cons let*) ", -"(1 . #f) 5)) (cons letrec) (1 . #f) 5)) (cons letrec*) (1 . #f) 5)) (cons let-va", -"lues) (1 . #f) 5)) (cons let*-values) (1 . #f) 5)) (cons define-values) (1 . #f)", -" 5)) (cons quasiquote) (1 . #f) 5)) (cons unquote) (1 . #f) 5)) (cons unquote-sp", -"licing) (1 . #f) 5)) (cons and) (1 . #f) 5)) (cons or) (1 . #f) 5)) (cons cond) ", -"(1 . #f) 5)) (cons case) (1 . #f) 5)) (cons else) (1 . #f) 5)) (cons =>) (1 . #f", -") 5)) (cons do) (1 . #f) 5)) (cons when) (1 . #f) 5)) (cons unless) (1 . #f) 5))", -" (cons parameterize) (1 . #f) 5)) (cons define-record-type) (1 . #f) 5)) () (2 .", -" #f) 3) (((GREF 0 0) (LREF 1 0 1) (LREF 2 1 2) (LREF 3 0 2) (LREF 4 0 2) (CALL 4", -")) () (dictionary-set!) (2 . #f) 6)) () (2 . #f) 4) (((PROC 0 0) (PROC 1 1) (GRE", -"F 2 0) (CALL 2)) ((((LREF 0 0 1) (PROC 1 0) (CALL 1)) ((((PROC 0 0) (PROC 1 1) (", -"CALL 1)) ((((GREF 0 0) (PROC 1 0) (LREF 2 1 3) (CALL 2)) ((((LREF 0 0 1) (COND 0", -" 60) (LREF 0 22 9) (LREF 1 1 1) (CALL 1) 60 (GREF 0 0) (LREF 1 1 1) (LREF 2 2 3)", -" (CALL 2)) () (car) (1 . #f) 4)) (null?) (1 . #f) 4) (((PROC 0 0) (LREF 1 1 1) (", -"LREF 2 0 1) (CALL 2)) ((((GREF 0 0) (PROC 1 0) (LREF 2 22 9) (LREF 3 0 2) (CALL ", -"3)) ((((GREF 0 0) (PROC 1 0) (LREF 2 0 1) (CALL 2)) ((((GREF 0 0) (LREF 1 2 1) (", -"LREF 2 0 1) (PROC 3 0) (CALL 3)) ((((LREF 0 25 5) (PROC 1 0) (LREF 2 3 2) (CALL ", -"2)) ((((LREF 0 7 2) (LREF 1 1 1) (LREF 2 6 2) (LREF 3 0 1) (CALL 3)) () () (1 . ", -"#f) 5)) () (1 . #f) 4)) (with-dynamic-environment) (1 . #f) 5)) (list) (1 . #f) ", -"4)) (cons) (2 . #f) 5)) () (1 . #f) 4)) () (2 . #t) 3)) () (2 . #f) 3) (((LREF 0", -" 0 1) (GSET 0 0) (GREF 0 1) (PROC 1 0) (LOAD 2 2) (LOADN 3) (CALL 3)) ((((GREF 0", -" 0) (PROC 1 0) (LOAD 2 1) (LREF 3 0 1) (CALL 3)) ((((LREF 0 21 6) (LREF 1 15 1) ", -"(LREF 2 0 1) (CALL 2)) () () (1 . #f) 4)) (cons picrin) (1 . #f) 5)) (eval cons ", -"user) (1 . #f) 5)) (eval) (1 . #f) 4)) () (1 . #f) 4)) () (1 . #f) 4)) (cons pic", -"rin) (1 . #f) 5)) (cons base) (1 . #f) 5)) (set-car! default-environment) (1 . #", -"f) 5)) (dictionary-ref) (1 . #f) 5)) () (1 . #f) 4)) (cons picrin) (1 . #f) 5)) ", -"(cons base) (1 . #f) 5)) () (1 . #f) 4)) (cons picrin) (1 . #f) 5)) (cons base) ", -"(1 . #f) 5) (((GREF 0 0) (LREF 1 6 1) (LREF 2 6 9) (LREF 3 6 7) (LREF 4 6 6) (LR", -"EF 5 6 5) (LREF 6 6 4) (LREF 7 6 3) (LREF 8 6 2) (CALL 8)) () (values) (1 . #f) ", -"10)) () (1 . #f) 3) (((GREF 0 0) (PROC 1 0) (CALL 1)) ((((GREF 0 0) (LREF 1 1 1)", -" (LREF 2 0 1) (LREF 3 1 2) (LREF 4 1 3) (CALL 4)) () (dictionary-set!) (1 . #f) ", -"6)) (macro-objects) (3 . #f) 3)) () (1 . #f) 4)) (make-dictionary) (1 . #f) 3)) ", -"(make-parameter) (1 . #f) 5)) (cons picrin) (1 . #f) 5)) (cons user) (10 . #f) 5", -")) () (1 . #f) 12)) () (1 . #f) 3) (((LREF 0 0 2) (GSET 0 0) (LREF 0 0 3) (GSET ", -"0 1) (LREF 0 0 4) (GSET 0 2) (LREF 0 0 5) (GSET 0 3) (LREF 0 0 6) (GSET 0 4) (LR", -"EF 0 0 7) (GSET 0 5) (LREF 0 0 8) (GSET 0 6) (LREF 0 0 1) (LOADU 1) (CALL 1)) ()", -" (current-library find-library make-library library-environment library-exports ", -"library-import library-export) (8 . #f) 3)) (current-library find-library make-l", -"ibrary library-environment library-exports library-import library-export call-wi", -"th-values) (1 . #f) 5)", -}; -#endif - void -pic_boot(pic_state *PIC_UNUSED(pic)) +pic_init_eval(pic_state *PIC_UNUSED(pic)) { #if PIC_USE_EVAL - pic_load_native(pic, &boot_compile_rom[0][0]); -#endif -#if PIC_USE_LIBRARY - pic_load_native(pic, &boot_library_rom[0][0]); + pic_load_native(pic, &eval_rom[0][0]); #endif } diff --git a/lib/ext/lib.c b/lib/ext/lib.c deleted file mode 100644 index 824c5772..00000000 --- a/lib/ext/lib.c +++ /dev/null @@ -1,44 +0,0 @@ -/** - * See Copyright Notice in picrin.h - */ - -#include "picrin.h" -#include "picrin/extra.h" - -#if PIC_USE_LIBRARY - -void -pic_deflibrary(pic_state *pic, const char *lib) -{ - pic_value name = pic_intern_cstr(pic, lib), v; - - v = pic_funcall(pic, "find-library", 1, name); - if (! pic_bool(pic, v)) { - pic_funcall(pic, "make-library", 1, name); - } -} - -void -pic_in_library(pic_state *pic, const char *lib) -{ - pic_value name = pic_intern_cstr(pic, lib); - - pic_funcall(pic, "current-library", 1, name); -} - -void -pic_export(pic_state *pic, int n, ...) -{ - size_t ai = pic_enter(pic); - va_list ap; - - va_start(ap, n); - while (n--) { - pic_value var = pic_intern_cstr(pic, va_arg(ap, const char *)); - pic_funcall(pic, "library-export", 2, var, var); - } - va_end(ap); - pic_leave(pic, ai); -} - -#endif diff --git a/lib/ext/main.c b/lib/ext/main.c new file mode 100644 index 00000000..6c62a875 --- /dev/null +++ b/lib/ext/main.c @@ -0,0 +1,60 @@ +/** + * See Copyright Notice in picrin.h + */ + +#include "picrin.h" +#include "picrin/extra.h" + +int +main(int argc, char *argv[]) +{ + pic_state *pic; + pic_value e, port; + + pic = pic_open(pic_default_allocf, NULL); + + pic_try { + if (argc == 1) { /* repl */ + while (1) { + pic_printf(pic, "> "); + e = pic_read(pic, pic_stdin(pic)); + if (pic_eof_p(pic, e)) + break; + pic_printf(pic, "~s\n", pic_funcall(pic, "eval", 1, e)); + } + } else if (argc == 2) { /* load file */ + FILE *file = fopen(argv[1], "r"); + if (! file) { + fprintf(stderr, "could not open file %s\n", argv[1]); + exit(1); + } + port = pic_fopen(pic, file, "r"); + while (1) { + e = pic_read(pic, port); + if (pic_eof_p(pic, e)) + break; + pic_void(pic, pic_funcall(pic, "eval", 1, e)); + } + } else if (argc >= 2 && strcmp(argv[1], "-c") == 0) { /* compile */ + if (argc == 2) { + port = pic_stdin(pic); + } else { + FILE *file = fopen(argv[2], "r"); + if (! file) { + fprintf(stderr, "could not open file %s\n", argv[2]); + exit(1); + } + port = pic_fopen(pic, file, "r"); + } + pic_printf(pic, "~s\n", pic_funcall(pic, "compile", 1, pic_funcall(pic, "expand", 2, pic_read(pic, port), pic_ref(pic, "default-environment")))); + } else { + fprintf(stderr, "usage: mini-picrin [-c] [file]\n"); + exit(1); + } + } + pic_catch(e) { + pic_print_error(pic, pic_stderr(pic), e); + } + + pic_close(pic); +} diff --git a/lib/include/picconf.h b/lib/include/picconf.h index 6fe9e034..e896685c 100644 --- a/lib/include/picconf.h +++ b/lib/include/picconf.h @@ -11,7 +11,6 @@ /** enable specific features */ /* #define PIC_USE_WRITE 1 */ /* #define PIC_USE_EVAL 1 */ -/* #define PIC_USE_LIBRARY 1 */ /** essential external functions */ /* #define PIC_JMPBUF jmp_buf */ diff --git a/lib/include/picrin.h b/lib/include/picrin.h index c0b60459..b4bee49a 100644 --- a/lib/include/picrin.h +++ b/lib/include/picrin.h @@ -334,6 +334,8 @@ void pic_defvar(pic_state *, const char *name, pic_value v); pic_value pic_funcall(pic_state *, const char *name, int n, ...); pic_value pic_values(pic_state *, int n, ...); pic_value pic_vvalues(pic_state *, int n, va_list); +pic_value pic_load(pic_state *, pic_value irep); /* TODO */ +void pic_load_native(pic_state *pic, const char *); /* TODO */ /* diff --git a/lib/include/picrin/extra.h b/lib/include/picrin/extra.h index cb312646..f7588a1d 100644 --- a/lib/include/picrin/extra.h +++ b/lib/include/picrin/extra.h @@ -17,20 +17,6 @@ pic_value pic_fopen(pic_state *, FILE *, const char *mode); pic_value pic_read(pic_state *, pic_value port); -pic_value pic_load(pic_state *, pic_value irep); -void pic_load_native(pic_state *pic, const char *); - -/* - * library - */ - -#if PIC_USE_LIBRARY -void pic_deflibrary(pic_state *, const char *lib); -void pic_in_library(pic_state *, const char *lib); -void pic_export(pic_state *, int n, ...); -#endif - - /* for debug */ #if PIC_USE_WRITE diff --git a/lib/include/picrin/setup.h b/lib/include/picrin/setup.h index 695ed5da..773b6bfa 100644 --- a/lib/include/picrin/setup.h +++ b/lib/include/picrin/setup.h @@ -20,10 +20,6 @@ # define PIC_USE_EVAL 1 #endif -#ifndef PIC_USE_LIBRARY -# define PIC_USE_LIBRARY 1 -#endif - #ifndef PIC_JMPBUF # include # define PIC_JMPBUF jmp_buf diff --git a/lib/ext/load.c b/lib/load.c similarity index 100% rename from lib/ext/load.c rename to lib/load.c diff --git a/lib/state.c b/lib/state.c index f1a9d75f..ef4f06bb 100644 --- a/lib/state.c +++ b/lib/state.c @@ -111,8 +111,7 @@ void pic_init_weak(pic_state *); void pic_init_load(pic_state *); void pic_init_file(pic_state *); void pic_init_state(pic_state *); - -void pic_boot(pic_state *); +void pic_init_eval(pic_state *); #define DONE pic_leave(pic, ai); @@ -147,8 +146,9 @@ pic_init_core(pic_state *pic) #if PIC_USE_LIBC pic_init_file(pic); DONE; #endif - - pic_boot(pic); DONE; +#if PIC_USE_EVAL + pic_init_eval(pic); DONE; +#endif } pic_state * diff --git a/piclib/compile.scm b/piclib/eval.scm similarity index 100% rename from piclib/compile.scm rename to piclib/eval.scm diff --git a/tools/mkboot.scm b/tools/mkboot.scm index fcaf4f89..e5c9fbe9 100644 --- a/tools/mkboot.scm +++ b/tools/mkboot.scm @@ -51,25 +51,16 @@ "#include \"picrin/extra.h\"\n" "\n" "#if PIC_USE_EVAL\n" - "static const char boot_compile_rom[][80] = {\n" - ,(generate-rom) - "};\n" - "#endif\n" - "\n" - "#if PIC_USE_LIBRARY\n" - "static const char boot_library_rom[][80] = {\n" + "static const char eval_rom[][80] = {\n" ,(generate-rom) "};\n" "#endif\n" "\n" "void\n" - "pic_boot(pic_state *PIC_UNUSED(pic))\n" + "pic_init_eval(pic_state *PIC_UNUSED(pic))\n" "{\n" "#if PIC_USE_EVAL\n" - " pic_load_native(pic, &boot_compile_rom[0][0]);\n" - "#endif\n" - "#if PIC_USE_LIBRARY\n" - " pic_load_native(pic, &boot_library_rom[0][0]);\n" + " pic_load_native(pic, &eval_rom[0][0]);\n" "#endif\n" "}\n"))