add built-in library
This commit is contained in:
parent
f192c96650
commit
63c05209f8
|
@ -0,0 +1,14 @@
|
|||
(define (caar p)
|
||||
(car (car p)))
|
||||
|
||||
(define (cadr p)
|
||||
(car (cdr p)))
|
||||
|
||||
(define (cdar p)
|
||||
(cdr (car p)))
|
||||
|
||||
(define (cddr p)
|
||||
(cdr (cdr p)))
|
||||
|
||||
(define (list . args)
|
||||
args)
|
43
src/init.c
43
src/init.c
|
@ -1,3 +1,6 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "picrin.h"
|
||||
|
||||
void pic_init_pair(pic_state *);
|
||||
|
@ -8,6 +11,44 @@ void pic_init_system(pic_state *);
|
|||
void pic_init_file(pic_state *);
|
||||
void pic_init_proc(pic_state *);
|
||||
|
||||
void
|
||||
pic_load_stdlib(pic_state *pic)
|
||||
{
|
||||
static const char *fn = "piclib/built-in.scm";
|
||||
FILE *file;
|
||||
bool r;
|
||||
pic_value v;
|
||||
struct pic_proc *proc;
|
||||
|
||||
file = fopen(fn, "r");
|
||||
if (file == NULL) {
|
||||
fputs("fatal error: could not read built-in.scm", stderr);
|
||||
abort();
|
||||
}
|
||||
|
||||
r = pic_parse_file(pic, file, &v);
|
||||
if (! r) {
|
||||
fputs("fatal error: built-in.scm broken", stderr);
|
||||
abort();
|
||||
}
|
||||
|
||||
proc = pic_codegen(pic, v);
|
||||
if (proc == NULL) {
|
||||
fputs("fatal error: built-in.scm compilation failure", stderr);
|
||||
abort();
|
||||
}
|
||||
|
||||
v = pic_run(pic, proc, pic_nil_value());
|
||||
if (pic_undef_p(v)) {
|
||||
fputs("fatal error: built-in.scm evaluation failure", stderr);
|
||||
abort();
|
||||
}
|
||||
|
||||
#if DEBUG
|
||||
puts("successfully loaded stdlib");
|
||||
#endif
|
||||
}
|
||||
|
||||
#define DONE pic_gc_arena_restore(pic, ai);
|
||||
|
||||
void
|
||||
|
@ -23,4 +64,6 @@ pic_init_core(pic_state *pic)
|
|||
pic_init_system(pic); DONE;
|
||||
pic_init_file(pic); DONE;
|
||||
pic_init_proc(pic); DONE;
|
||||
|
||||
pic_load_stdlib(pic); DONE;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue