add mini-picrin

This commit is contained in:
Yuichi Nishiwaki 2017-04-14 23:58:02 +09:00
parent d99c460451
commit 342ed57507
12 changed files with 125 additions and 475 deletions

53
lib/Makefile Normal file
View File

@ -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

View File

@ -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
}

View File

@ -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

60
lib/ext/main.c Normal file
View File

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

View File

@ -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 */

View File

@ -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 */
/*

View File

@ -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

View File

@ -20,10 +20,6 @@
# define PIC_USE_EVAL 1
#endif
#ifndef PIC_USE_LIBRARY
# define PIC_USE_LIBRARY 1
#endif
#ifndef PIC_JMPBUF
# include <setjmp.h>
# define PIC_JMPBUF jmp_buf

View File

@ -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 *

View File

@ -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"))