400 lines
31 KiB
C
400 lines
31 KiB
C
#include "picrin.h"
|
|
#include "picrin/extra.h"
|
|
|
|
static const char boot_rom[][80] = {
|
|
"((core#lambda () (core#begin (core#define .define-transformer.2252 (core#lambda ",
|
|
"(.name.2272 .transformer.2273) (add-macro! .name.2272 .transformer.2273))) (core",
|
|
"#begin (core#define .the.2253 (core#lambda (.var.2274) (make-identifier .var.227",
|
|
"4 default-environment))) (core#begin (core#define .the-core-define.2254 (.the.22",
|
|
"53 (core#quote core#define))) (core#begin (core#define .the-core-lambda.2255 (.t",
|
|
"he.2253 (core#quote core#lambda))) (core#begin (core#define .the-core-begin.2256",
|
|
" (.the.2253 (core#quote core#begin))) (core#begin (core#define .the-core-quote.2",
|
|
"257 (.the.2253 (core#quote core#quote))) (core#begin (core#define .the-core-set!",
|
|
".2258 (.the.2253 (core#quote core#set!))) (core#begin (core#define .the-core-if.",
|
|
"2259 (.the.2253 (core#quote core#if))) (core#begin (core#define .the-core-define",
|
|
"-macro.2260 (.the.2253 (core#quote core#define-macro))) (core#begin (core#define",
|
|
" .the-define.2261 (.the.2253 (core#quote define))) (core#begin (core#define .the",
|
|
"-lambda.2262 (.the.2253 (core#quote lambda))) (core#begin (core#define .the-begi",
|
|
"n.2263 (.the.2253 (core#quote begin))) (core#begin (core#define .the-quote.2264 ",
|
|
"(.the.2253 (core#quote quote))) (core#begin (core#define .the-set!.2265 (.the.22",
|
|
"53 (core#quote set!))) (core#begin (core#define .the-if.2266 (.the.2253 (core#qu",
|
|
"ote if))) (core#begin (core#define .the-define-macro.2267 (.the.2253 (core#quote",
|
|
" define-macro))) (core#begin (.define-transformer.2252 (core#quote quote) (core#",
|
|
"lambda (.form.2275 .env.2276) (core#if (= (length .form.2275) 2) (cons .the-core",
|
|
"-quote.2257 (cons (cadr .form.2275) (core#quote ()))) (error \"malformed quote\" .",
|
|
"form.2275)))) (core#begin (.define-transformer.2252 (core#quote if) (core#lambda",
|
|
" (.form.2277 .env.2278) ((core#lambda (.len.2279) (core#if (= .len.2279 3) (appe",
|
|
"nd .form.2277 (cons (core#quote #undefined) (core#quote ()))) (core#if (= .len.2",
|
|
"279 4) (cons .the-core-if.2259 (cdr .form.2277)) (error \"malformed if\" .form.227",
|
|
"7)))) (length .form.2277)))) (core#begin (.define-transformer.2252 (core#quote b",
|
|
"egin) (core#lambda (.form.2280 .env.2281) ((core#lambda (.len.2282) (core#if (= ",
|
|
".len.2282 1) #undefined (core#if (= .len.2282 2) (cadr .form.2280) (core#if (= .",
|
|
"len.2282 3) (cons .the-core-begin.2256 (cdr .form.2280)) (cons .the-core-begin.2",
|
|
"256 (cons (cadr .form.2280) (cons (cons .the-begin.2263 (cddr .form.2280)) (core",
|
|
"#quote ())))))))) (length .form.2280)))) (core#begin (.define-transformer.2252 (",
|
|
"core#quote set!) (core#lambda (.form.2283 .env.2284) (core#if (core#if (= (lengt",
|
|
"h .form.2283) 3) (identifier? (cadr .form.2283)) #f) (cons .the-core-set!.2258 (",
|
|
"cdr .form.2283)) (error \"malformed set!\" .form.2283)))) (core#begin (core#define",
|
|
" .check-formal.2268 (core#lambda (.formal.2285) ((core#lambda (.it.2286) (core#i",
|
|
"f .it.2286 .it.2286 ((core#lambda (.it.2287) (core#if .it.2287 .it.2287 ((core#l",
|
|
"ambda (.it.2288) (core#if .it.2288 .it.2288 #f)) (core#if (pair? .formal.2285) (",
|
|
"core#if (identifier? (car .formal.2285)) (.check-formal.2268 (cdr .formal.2285))",
|
|
" #f) #f)))) (identifier? .formal.2285)))) (null? .formal.2285)))) (core#begin (.",
|
|
"define-transformer.2252 (core#quote lambda) (core#lambda (.form.2289 .env.2290) ",
|
|
"(core#if (= (length .form.2289) 1) (error \"malformed lambda\" .form.2289) (core#i",
|
|
"f (.check-formal.2268 (cadr .form.2289)) (cons .the-core-lambda.2255 (cons (cadr",
|
|
" .form.2289) (cons (cons .the-begin.2263 (cddr .form.2289)) (core#quote ())))) (",
|
|
"error \"malformed lambda\" .form.2289))))) (core#begin (.define-transformer.2252 (",
|
|
"core#quote define) (core#lambda (.form.2291 .env.2292) ((core#lambda (.len.2293)",
|
|
" (core#if (= .len.2293 1) (error \"malformed define\" .form.2291) ((core#lambda (.",
|
|
"formal.2294) (core#if (identifier? .formal.2294) (core#if (= .len.2293 3) (cons ",
|
|
".the-core-define.2254 (cdr .form.2291)) (error \"malformed define\" .form.2291)) (",
|
|
"core#if (pair? .formal.2294) (cons .the-define.2261 (cons (car .formal.2294) (co",
|
|
"ns (cons .the-lambda.2262 (cons (cdr .formal.2294) (cddr .form.2291))) (core#quo",
|
|
"te ())))) (error \"define: binding to non-varaible object\" .form.2291)))) (cadr .",
|
|
"form.2291)))) (length .form.2291)))) (core#begin (.define-transformer.2252 (core",
|
|
"#quote define-macro) (core#lambda (.form.2295 .env.2296) (core#if (= (length .fo",
|
|
"rm.2295) 3) (core#if (identifier? (cadr .form.2295)) (cons .the-core-define-macr",
|
|
"o.2260 (cdr .form.2295)) (error \"define-macro: binding to non-variable object\" .",
|
|
"form.2295)) (error \"malformed define-macro\" .form.2295)))) (core#begin #undefine",
|
|
"d (core#begin (.define-transformer.2252 (core#quote else) (core#lambda ._.2297 (",
|
|
"error \"invalid use of auxiliary syntax\" (core#quote else)))) (core#begin (.defin",
|
|
"e-transformer.2252 (core#quote =>) (core#lambda ._.2298 (error \"invalid use of a",
|
|
"uxiliary syntax\" (core#quote =>)))) (core#begin (.define-transformer.2252 (core#",
|
|
"quote unquote) (core#lambda ._.2299 (error \"invalid use of auxiliary syntax\" (co",
|
|
"re#quote unquote)))) (core#begin (.define-transformer.2252 (core#quote unquote-s",
|
|
"plicing) (core#lambda ._.2300 (error \"invalid use of auxiliary syntax\" (core#quo",
|
|
"te unquote-splicing)))) (core#begin (.define-transformer.2252 (core#quote let) (",
|
|
"core#lambda (.form.2301 .env.2302) (core#if (identifier? (cadr .form.2301)) ((co",
|
|
"re#lambda (.name.2303 .formal.2304 .body.2305) (cons (cons .the-lambda.2262 (con",
|
|
"s (core#quote ()) (cons (cons .the-define.2261 (cons (cons .name.2303 (map car .",
|
|
"formal.2304)) .body.2305)) (cons (cons .name.2303 (map cadr .formal.2304)) (core",
|
|
"#quote ()))))) (core#quote ()))) (car (cdr .form.2301)) (car (cdr (cdr .form.230",
|
|
"1))) (cdr (cdr (cdr .form.2301)))) ((core#lambda (.formal.2306 .body.2307) (cons",
|
|
" (cons .the-lambda.2262 (cons (map car .formal.2306) .body.2307)) (map cadr .for",
|
|
"mal.2306))) (car (cdr .form.2301)) (cdr (cdr .form.2301)))))) (core#begin (.defi",
|
|
"ne-transformer.2252 (core#quote and) (core#lambda (.form.2308 .env.2309) (core#i",
|
|
"f (null? (cdr .form.2308)) #t (core#if (null? (cddr .form.2308)) (cadr .form.230",
|
|
"8) (cons .the-if.2266 (cons (cadr .form.2308) (cons (cons (.the.2253 (core#quote",
|
|
" and)) (cddr .form.2308)) (cons (core#quote #f) (core#quote ()))))))))) (core#be",
|
|
"gin (.define-transformer.2252 (core#quote or) (core#lambda (.form.2310 .env.2311",
|
|
") (core#if (null? (cdr .form.2310)) #f ((core#lambda (.tmp.2312) (cons (.the.225",
|
|
"3 (core#quote let)) (cons (cons (cons .tmp.2312 (cons (cadr .form.2310) (core#qu",
|
|
"ote ()))) (core#quote ())) (cons (cons .the-if.2266 (cons .tmp.2312 (cons .tmp.2",
|
|
"312 (cons (cons (.the.2253 (core#quote or)) (cddr .form.2310)) (core#quote ())))",
|
|
")) (core#quote ()))))) (make-identifier (core#quote it) .env.2311))))) (core#beg",
|
|
"in (.define-transformer.2252 (core#quote cond) (core#lambda (.form.2313 .env.231",
|
|
"4) ((core#lambda (.clauses.2315) (core#if (null? .clauses.2315) #undefined ((cor",
|
|
"e#lambda (.clause.2316) (core#if (core#if (identifier? (car .clause.2316)) (iden",
|
|
"tifier=? (.the.2253 (core#quote else)) (make-identifier (car .clause.2316) .env.",
|
|
"2314)) #f) (cons .the-begin.2263 (cdr .clause.2316)) (core#if (null? (cdr .claus",
|
|
"e.2316)) (cons (.the.2253 (core#quote or)) (cons (car .clause.2316) (cons (cons ",
|
|
"(.the.2253 (core#quote cond)) (cdr .clauses.2315)) (core#quote ())))) (core#if (",
|
|
"core#if (identifier? (cadr .clause.2316)) (identifier=? (.the.2253 (core#quote =",
|
|
">)) (make-identifier (cadr .clause.2316) .env.2314)) #f) ((core#lambda (.tmp.231",
|
|
"7) (cons (.the.2253 (core#quote let)) (cons (cons (cons .tmp.2317 (cons (car .cl",
|
|
"ause.2316) (core#quote ()))) (core#quote ())) (cons (cons .the-if.2266 (cons .tm",
|
|
"p.2317 (cons (cons (cadr (cdr .clause.2316)) (cons .tmp.2317 (core#quote ()))) (",
|
|
"cons (cons (.the.2253 (core#quote cond)) (cddr .form.2313)) (core#quote ()))))) ",
|
|
"(core#quote ()))))) (make-identifier (core#quote tmp) .env.2314)) (cons .the-if.",
|
|
"2266 (cons (car .clause.2316) (cons (cons .the-begin.2263 (cdr .clause.2316)) (c",
|
|
"ons (cons (.the.2253 (core#quote cond)) (cdr .clauses.2315)) (core#quote ())))))",
|
|
")))) (car .clauses.2315)))) (cdr .form.2313)))) (core#begin (.define-transformer",
|
|
".2252 (core#quote quasiquote) (core#lambda (.form.2318 .env.2319) (core#begin (c",
|
|
"ore#define .quasiquote?.2320 (core#lambda (.form.2324) (core#if (pair? .form.232",
|
|
"4) (core#if (identifier? (car .form.2324)) (identifier=? (.the.2253 (core#quote ",
|
|
"quasiquote)) (make-identifier (car .form.2324) .env.2319)) #f) #f))) (core#begin",
|
|
" (core#define .unquote?.2321 (core#lambda (.form.2325) (core#if (pair? .form.232",
|
|
"5) (core#if (identifier? (car .form.2325)) (identifier=? (.the.2253 (core#quote ",
|
|
"unquote)) (make-identifier (car .form.2325) .env.2319)) #f) #f))) (core#begin (c",
|
|
"ore#define .unquote-splicing?.2322 (core#lambda (.form.2326) (core#if (pair? .fo",
|
|
"rm.2326) (core#if (pair? (car .form.2326)) (core#if (identifier? (caar .form.232",
|
|
"6)) (identifier=? (.the.2253 (core#quote unquote-splicing)) (make-identifier (ca",
|
|
"ar .form.2326) .env.2319)) #f) #f) #f))) (core#begin (core#define .qq.2323 (core",
|
|
"#lambda (.depth.2327 .expr.2328) (core#if (.unquote?.2321 .expr.2328) (core#if (",
|
|
"= .depth.2327 1) (cadr .expr.2328) (list (.the.2253 (core#quote list)) (list (.t",
|
|
"he.2253 (core#quote quote)) (.the.2253 (core#quote unquote))) (.qq.2323 (- .dept",
|
|
"h.2327 1) (car (cdr .expr.2328))))) (core#if (.unquote-splicing?.2322 .expr.2328",
|
|
") (core#if (= .depth.2327 1) (list (.the.2253 (core#quote append)) (car (cdr (ca",
|
|
"r .expr.2328))) (.qq.2323 .depth.2327 (cdr .expr.2328))) (list (.the.2253 (core#",
|
|
"quote cons)) (list (.the.2253 (core#quote list)) (list (.the.2253 (core#quote qu",
|
|
"ote)) (.the.2253 (core#quote unquote-splicing))) (.qq.2323 (- .depth.2327 1) (ca",
|
|
"r (cdr (car .expr.2328))))) (.qq.2323 .depth.2327 (cdr .expr.2328)))) (core#if (",
|
|
".quasiquote?.2320 .expr.2328) (list (.the.2253 (core#quote list)) (list (.the.22",
|
|
"53 (core#quote quote)) (.the.2253 (core#quote quasiquote))) (.qq.2323 (+ .depth.",
|
|
"2327 1) (car (cdr .expr.2328)))) (core#if (pair? .expr.2328) (list (.the.2253 (c",
|
|
"ore#quote cons)) (.qq.2323 .depth.2327 (car .expr.2328)) (.qq.2323 .depth.2327 (",
|
|
"cdr .expr.2328))) (core#if (vector? .expr.2328) (list (.the.2253 (core#quote lis",
|
|
"t->vector)) (.qq.2323 .depth.2327 (vector->list .expr.2328))) (list (.the.2253 (",
|
|
"core#quote quote)) .expr.2328)))))))) ((core#lambda (.x.2329) (.qq.2323 1 .x.232",
|
|
"9)) (cadr .form.2318)))))))) (core#begin (.define-transformer.2252 (core#quote l",
|
|
"et*) (core#lambda (.form.2330 .env.2331) ((core#lambda (.bindings.2332 .body.233",
|
|
"3) (core#if (null? .bindings.2332) (cons (.the.2253 (core#quote let)) (cons (cor",
|
|
"e#quote ()) .body.2333)) (cons (.the.2253 (core#quote let)) (cons (cons (cons (c",
|
|
"ar (car .bindings.2332)) (cdr (car .bindings.2332))) (core#quote ())) (cons (con",
|
|
"s (.the.2253 (core#quote let*)) (cons (cdr .bindings.2332) .body.2333)) (core#qu",
|
|
"ote ())))))) (car (cdr .form.2330)) (cdr (cdr .form.2330))))) (core#begin (.defi",
|
|
"ne-transformer.2252 (core#quote letrec) (core#lambda (.form.2334 .env.2335) (con",
|
|
"s (.the.2253 (core#quote letrec*)) (cdr .form.2334)))) (core#begin (.define-tran",
|
|
"sformer.2252 (core#quote letrec*) (core#lambda (.form.2336 .env.2337) ((core#lam",
|
|
"bda (.bindings.2338 .body.2339) ((core#lambda (.variables.2340 .initials.2341) (",
|
|
"cons (.the.2253 (core#quote let)) (cons .variables.2340 (append .initials.2341 (",
|
|
"append .body.2339 (core#quote ())))))) (map (core#lambda (.v.2342) (cons .v.2342",
|
|
" (cons (core#quote #undefined) (core#quote ())))) (map car .bindings.2338)) (map",
|
|
" (core#lambda (.v.2343) (cons (.the.2253 (core#quote set!)) (append .v.2343 (cor",
|
|
"e#quote ())))) .bindings.2338))) (car (cdr .form.2336)) (cdr (cdr .form.2336))))",
|
|
") (core#begin (.define-transformer.2252 (core#quote let-values) (core#lambda (.f",
|
|
"orm.2344 .env.2345) (cons (.the.2253 (core#quote let*-values)) (append (cdr .for",
|
|
"m.2344) (core#quote ()))))) (core#begin (.define-transformer.2252 (core#quote le",
|
|
"t*-values) (core#lambda (.form.2346 .env.2347) ((core#lambda (.formals.2348 .bod",
|
|
"y.2349) (core#if (null? .formals.2348) (cons (.the.2253 (core#quote let)) (cons ",
|
|
"(core#quote ()) (append .body.2349 (core#quote ())))) ((core#lambda (.formal.235",
|
|
"0) (cons (.the.2253 (core#quote call-with-values)) (cons (cons .the-lambda.2262 ",
|
|
"(cons (core#quote ()) (cdr .formal.2350))) (cons (cons (.the.2253 (core#quote la",
|
|
"mbda)) (cons (car .formal.2350) (cons (cons (.the.2253 (core#quote let*-values))",
|
|
" (cons (cdr .formals.2348) .body.2349)) (core#quote ())))) (core#quote ()))))) (",
|
|
"car .formals.2348)))) (cadr .form.2346) (cddr .form.2346)))) (core#begin (.defin",
|
|
"e-transformer.2252 (core#quote define-values) (core#lambda (.form.2351 .env.2352",
|
|
") ((core#lambda (.formal.2353 .body.2354) ((core#lambda (.arguments.2355) (cons ",
|
|
".the-begin.2263 (append ((core#lambda () (core#begin (core#define .loop.2356 (co",
|
|
"re#lambda (.formal.2357) (core#if (pair? .formal.2357) (cons (cons .the-define.2",
|
|
"261 (cons (car .formal.2357) (cons (core#quote #undefined) (core#quote ())))) (.",
|
|
"loop.2356 (cdr .formal.2357))) (core#if (identifier? .formal.2357) (cons (cons .",
|
|
"the-define.2261 (cons .formal.2357 (cons (core#quote #undefined) (core#quote ())",
|
|
"))) (core#quote ())) (core#quote ()))))) (.loop.2356 .formal.2353)))) (cons (con",
|
|
"s (.the.2253 (core#quote call-with-values)) (cons (cons .the-lambda.2262 (cons (",
|
|
"core#quote ()) (append .body.2354 (core#quote ())))) (cons (cons .the-lambda.226",
|
|
"2 (cons .arguments.2355 (append ((core#lambda () (core#begin (core#define .loop.",
|
|
"2358 (core#lambda (.formal.2359 .args.2360) (core#if (pair? .formal.2359) (cons ",
|
|
"(cons .the-set!.2265 (cons (car .formal.2359) (cons (cons (.the.2253 (core#quote",
|
|
" car)) (cons .args.2360 (core#quote ()))) (core#quote ())))) (.loop.2358 (cdr .f",
|
|
"ormal.2359) (cons (.the.2253 (core#quote cdr)) (cons .args.2360 (core#quote ()))",
|
|
"))) (core#if (identifier? .formal.2359) (cons (cons .the-set!.2265 (cons .formal",
|
|
".2359 (cons .args.2360 (core#quote ())))) (core#quote ())) (core#quote ()))))) (",
|
|
".loop.2358 .formal.2353 .arguments.2355)))) (core#quote ())))) (core#quote ())))",
|
|
") (core#quote ()))))) (make-identifier (core#quote arguments) .env.2352))) (cadr",
|
|
" .form.2351) (cddr .form.2351)))) (core#begin (.define-transformer.2252 (core#qu",
|
|
"ote do) (core#lambda (.form.2361 .env.2362) ((core#lambda (.bindings.2363 .test.",
|
|
"2364 .cleanup.2365 .body.2366) ((core#lambda (.loop.2367) (cons (.the.2253 (core",
|
|
"#quote let)) (cons .loop.2367 (cons (map (core#lambda (.x.2368) (cons (car .x.23",
|
|
"68) (cons (cadr .x.2368) (core#quote ())))) .bindings.2363) (cons (cons .the-if.",
|
|
"2266 (cons .test.2364 (cons (cons .the-begin.2263 .cleanup.2365) (cons (cons .th",
|
|
"e-begin.2263 (append .body.2366 (cons (cons .loop.2367 (map (core#lambda (.x.236",
|
|
"9) (core#if (null? (cdr (cdr .x.2369))) (car .x.2369) (car (cdr (cdr .x.2369))))",
|
|
") .bindings.2363)) (core#quote ())))) (core#quote ()))))) (core#quote ())))))) (",
|
|
"make-identifier (core#quote loop) .env.2362))) (car (cdr .form.2361)) (car (car ",
|
|
"(cdr (cdr .form.2361)))) (cdr (car (cdr (cdr .form.2361)))) (cdr (cdr (cdr .form",
|
|
".2361)))))) (core#begin (.define-transformer.2252 (core#quote when) (core#lambda",
|
|
" (.form.2370 .env.2371) ((core#lambda (.test.2372 .body.2373) (cons .the-if.2266",
|
|
" (cons .test.2372 (cons (cons .the-begin.2263 (append .body.2373 (core#quote ())",
|
|
")) (cons (core#quote #undefined) (core#quote ())))))) (car (cdr .form.2370)) (cd",
|
|
"r (cdr .form.2370))))) (core#begin (.define-transformer.2252 (core#quote unless)",
|
|
" (core#lambda (.form.2374 .env.2375) ((core#lambda (.test.2376 .body.2377) (cons",
|
|
" .the-if.2266 (cons .test.2376 (cons (core#quote #undefined) (cons (cons .the-be",
|
|
"gin.2263 (append .body.2377 (core#quote ()))) (core#quote ())))))) (car (cdr .fo",
|
|
"rm.2374)) (cdr (cdr .form.2374))))) (core#begin (.define-transformer.2252 (core#",
|
|
"quote case) (core#lambda (.form.2378 .env.2379) ((core#lambda (.key.2380 .clause",
|
|
"s.2381) ((core#lambda (.the-key.2382) (cons (.the.2253 (core#quote let)) (cons (",
|
|
"cons (cons .the-key.2382 (cons .key.2380 (core#quote ()))) (core#quote ())) (con",
|
|
"s ((core#lambda () (core#begin (core#define .loop.2383 (core#lambda (.clauses.23",
|
|
"84) (core#if (null? .clauses.2384) #undefined ((core#lambda (.clause.2385) (cons",
|
|
" .the-if.2266 (cons (core#if (core#if (identifier? (car .clause.2385)) (identifi",
|
|
"er=? (.the.2253 (core#quote else)) (make-identifier (car .clause.2385) .env.2379",
|
|
")) #f) #t (cons (.the.2253 (core#quote or)) (append (map (core#lambda (.x.2386) ",
|
|
"(cons (.the.2253 (core#quote eqv?)) (cons .the-key.2382 (cons (cons .the-quote.2",
|
|
"264 (cons .x.2386 (core#quote ()))) (core#quote ()))))) (car .clause.2385)) (cor",
|
|
"e#quote ())))) (cons (core#if (core#if (identifier? (cadr .clause.2385)) (identi",
|
|
"fier=? (.the.2253 (core#quote =>)) (make-identifier (cadr .clause.2385) .env.237",
|
|
"9)) #f) (cons (car (cdr (cdr .clause.2385))) (cons .the-key.2382 (core#quote ())",
|
|
")) (cons .the-begin.2263 (append (cdr .clause.2385) (core#quote ())))) (cons (.l",
|
|
"oop.2383 (cdr .clauses.2384)) (core#quote ())))))) (car .clauses.2384))))) (.loo",
|
|
"p.2383 .clauses.2381)))) (core#quote ()))))) (make-identifier (core#quote key) .",
|
|
"env.2379))) (car (cdr .form.2378)) (cdr (cdr .form.2378))))) (.define-transforme",
|
|
"r.2252 (core#quote parameterize) (core#lambda (.form.2387 .env.2388) ((core#lamb",
|
|
"da (.formal.2389 .body.2390) (cons (.the.2253 (core#quote with-dynamic-environme",
|
|
"nt)) (cons (cons (.the.2253 (core#quote list)) (append (map (core#lambda (.x.239",
|
|
"1) (cons (.the.2253 (core#quote cons)) (cons (car .x.2391) (cons (cadr .x.2391) ",
|
|
"(core#quote ()))))) .formal.2389) (core#quote ()))) (cons (cons .the-lambda.2262",
|
|
" (cons (core#quote ()) (append .body.2390 (core#quote ())))) (core#quote ())))))",
|
|
" (car (cdr .form.2387)) (cdr (cdr .form.2387))))))))))))))))))))))))))))))))))))",
|
|
")))))))))))))))",
|
|
|
|
};
|
|
|
|
#if PIC_USE_LIBRARY
|
|
static const char boot_library_rom[][80] = {
|
|
"(core#begin (core#define mangle (core#lambda (.name.2392) (core#begin (core#if (",
|
|
"null? .name.2392) (error \"library name should be a list of at least one symbols\"",
|
|
" .name.2392) #undefined) (core#begin (core#define .->string.2393 (core#lambda (.",
|
|
"n.2395) (core#if (symbol? .n.2395) ((core#lambda (.str.2396) (core#begin (string",
|
|
"-for-each (core#lambda (.c.2397) (core#if ((core#lambda (.it.2398) (core#if .it.",
|
|
"2398 .it.2398 ((core#lambda (.it.2399) (core#if .it.2399 .it.2399 #f)) (char=? .",
|
|
"c.2397 #\\:)))) (char=? .c.2397 #\\.)) (error \"elements of library name may not co",
|
|
"ntain '.' or ':'\" .n.2395) #undefined)) .str.2396) .str.2396)) (symbol->string .",
|
|
"n.2395)) (core#if (core#if (number? .n.2395) (core#if (exact? .n.2395) (<= 0 .n.",
|
|
"2395) #f) #f) (number->string .n.2395) (error \"symbol or non-negative integer is",
|
|
" required\" .n.2395))))) (core#begin (core#define .join.2394 (core#lambda (.strs.",
|
|
"2400 .delim.2401) ((core#lambda () (core#begin (core#define .loop.2402 (core#lam",
|
|
"bda (.res.2403 .strs.2404) (core#if (null? .strs.2404) .res.2403 (.loop.2402 (st",
|
|
"ring-append .res.2403 .delim.2401 (car .strs.2404)) (cdr .strs.2404))))) (.loop.",
|
|
"2402 (car .strs.2400) (cdr .strs.2400))))))) (core#if (symbol? .name.2392) .name",
|
|
".2392 (string->symbol (.join.2394 (map .->string.2393 .name.2392) \".\")))))))) (c",
|
|
"ore#begin (core#define current-library (make-parameter (core#quote (picrin user)",
|
|
") mangle)) (core#begin (core#define *libraries* (make-dictionary)) (core#begin (",
|
|
"core#define find-library (core#lambda (.name.2405) (dictionary-has? *libraries* ",
|
|
"(mangle .name.2405)))) (core#begin (core#define make-library (core#lambda (.name",
|
|
".2406) ((core#lambda (.name.2407) ((core#lambda (.env.2408 .exports.2409) (core#",
|
|
"begin (set-identifier! (core#quote define-library) (core#quote define-library) .",
|
|
"env.2408) (core#begin (set-identifier! (core#quote import) (core#quote import) .",
|
|
"env.2408) (core#begin (set-identifier! (core#quote export) (core#quote export) .",
|
|
"env.2408) (core#begin (set-identifier! (core#quote cond-expand) (core#quote cond",
|
|
"-expand) .env.2408) (dictionary-set! *libraries* .name.2407 (cons .env.2408 .exp",
|
|
"orts.2409))))))) (make-environment (string->symbol (string-append (symbol->strin",
|
|
"g .name.2407) \":\"))) (make-dictionary))) (mangle .name.2406)))) (core#begin (cor",
|
|
"e#define library-environment (core#lambda (.name.2410) (car (dictionary-ref *lib",
|
|
"raries* (mangle .name.2410))))) (core#begin (core#define library-exports (core#l",
|
|
"ambda (.name.2411) (cdr (dictionary-ref *libraries* (mangle .name.2411))))) (cor",
|
|
"e#begin (core#define library-import (core#lambda (.name.2412 .sym.2413 .alias.24",
|
|
"14) ((core#lambda (.uid.2415) ((core#lambda (.env.2416) (set-identifier! .alias.",
|
|
"2414 .uid.2415 .env.2416)) (library-environment (current-library)))) (dictionary",
|
|
"-ref (library-exports .name.2412) .sym.2413)))) (core#begin (core#define library",
|
|
"-export (core#lambda (.sym.2417 .alias.2418) ((core#lambda (.env.2419 .exports.2",
|
|
"420) (dictionary-set! .exports.2420 .alias.2418 (find-identifier .sym.2417 .env.",
|
|
"2419))) (library-environment (current-library)) (library-exports (current-librar",
|
|
"y))))) (core#begin ((core#lambda (.define-transformer.2421) (core#begin (.define",
|
|
"-transformer.2421 (core#quote define-library) (core#lambda (.form.2422 ._.2423) ",
|
|
"((core#lambda (.name.2424 .body.2425) (core#begin ((core#lambda (.it.2426) (core",
|
|
"#if .it.2426 .it.2426 ((core#lambda (.it.2427) (core#if .it.2427 .it.2427 #f)) (",
|
|
"make-library .name.2424)))) (find-library .name.2424)) (with-dynamic-environment",
|
|
" (list (cons current-library .name.2424)) (core#lambda () (for-each (core#lambda",
|
|
" (.expr.2428) (eval .expr.2428 .name.2424)) .body.2425))))) (cadr .form.2422) (c",
|
|
"ddr .form.2422)))) (core#begin (.define-transformer.2421 (core#quote cond-expand",
|
|
") (core#lambda (.form.2429 ._.2430) ((core#lambda (.test.2431) (core#begin (core",
|
|
"#set! .test.2431 (core#lambda (.form.2432) ((core#lambda (.it.2433) (core#if .it",
|
|
".2433 .it.2433 ((core#lambda (.it.2434) (core#if .it.2434 .it.2434 ((core#lambda",
|
|
" (.it.2435) (core#if .it.2435 .it.2435 #f)) (core#if (pair? .form.2432) ((core#l",
|
|
"ambda (.key.2436) (core#if ((core#lambda (.it.2437) (core#if .it.2437 .it.2437 #",
|
|
"f)) (eqv? .key.2436 (core#quote library))) (find-library (cadr .form.2432)) (cor",
|
|
"e#if ((core#lambda (.it.2438) (core#if .it.2438 .it.2438 #f)) (eqv? .key.2436 (c",
|
|
"ore#quote not))) (not (.test.2431 (cadr .form.2432))) (core#if ((core#lambda (.i",
|
|
"t.2439) (core#if .it.2439 .it.2439 #f)) (eqv? .key.2436 (core#quote and))) ((cor",
|
|
"e#lambda () (core#begin (core#define .loop.2440 (core#lambda (.form.2441) ((core",
|
|
"#lambda (.it.2442) (core#if .it.2442 .it.2442 ((core#lambda (.it.2443) (core#if ",
|
|
".it.2443 .it.2443 #f)) (core#if (.test.2431 (car .form.2441)) (.loop.2440 (cdr .",
|
|
"form.2441)) #f)))) (null? .form.2441)))) (.loop.2440 (cdr .form.2432))))) (core#",
|
|
"if ((core#lambda (.it.2444) (core#if .it.2444 .it.2444 #f)) (eqv? .key.2436 (cor",
|
|
"e#quote or))) ((core#lambda () (core#begin (core#define .loop.2445 (core#lambda ",
|
|
"(.form.2446) (core#if (pair? .form.2446) ((core#lambda (.it.2447) (core#if .it.2",
|
|
"447 .it.2447 ((core#lambda (.it.2448) (core#if .it.2448 .it.2448 #f)) (.loop.244",
|
|
"5 (cdr .form.2446))))) (.test.2431 (car .form.2446))) #f))) (.loop.2445 (cdr .fo",
|
|
"rm.2432))))) (core#if #t #f #undefined)))))) (car .form.2432)) #f)))) (core#if (",
|
|
"symbol? .form.2432) (memq .form.2432 (features)) #f)))) (eq? .form.2432 (core#qu",
|
|
"ote else))))) ((core#lambda () (core#begin (core#define .loop.2449 (core#lambda ",
|
|
"(.clauses.2450) (core#if (null? .clauses.2450) #undefined (core#if (.test.2431 (",
|
|
"caar .clauses.2450)) (cons (make-identifier (core#quote begin) default-environme",
|
|
"nt) (append (cdar .clauses.2450) (core#quote ()))) (.loop.2449 (cdr .clauses.245",
|
|
"0)))))) (.loop.2449 (cdr .form.2429))))))) #undefined))) (core#begin (.define-tr",
|
|
"ansformer.2421 (core#quote import) (core#lambda (.form.2451 ._.2452) ((core#lamb",
|
|
"da (.caddr.2453 .prefix.2454 .getlib.2455) ((core#lambda (.extract.2456 .collect",
|
|
".2457) (core#begin (core#set! .extract.2456 (core#lambda (.spec.2458) ((core#lam",
|
|
"bda (.key.2459) (core#if ((core#lambda (.it.2460) (core#if .it.2460 .it.2460 ((c",
|
|
"ore#lambda (.it.2461) (core#if .it.2461 .it.2461 ((core#lambda (.it.2462) (core#",
|
|
"if .it.2462 .it.2462 ((core#lambda (.it.2463) (core#if .it.2463 .it.2463 #f)) (e",
|
|
"qv? .key.2459 (core#quote except))))) (eqv? .key.2459 (core#quote prefix))))) (e",
|
|
"qv? .key.2459 (core#quote rename))))) (eqv? .key.2459 (core#quote only))) (.extr",
|
|
"act.2456 (cadr .spec.2458)) (core#if #t (.getlib.2455 .spec.2458) #undefined))) ",
|
|
"(car .spec.2458)))) (core#begin (core#set! .collect.2457 (core#lambda (.spec.246",
|
|
"4) ((core#lambda (.key.2465) (core#if ((core#lambda (.it.2466) (core#if .it.2466",
|
|
" .it.2466 #f)) (eqv? .key.2465 (core#quote only))) ((core#lambda (.alist.2467) (",
|
|
"map (core#lambda (.var.2468) (assq .var.2468 .alist.2467)) (cddr .spec.2464))) (",
|
|
".collect.2457 (cadr .spec.2464))) (core#if ((core#lambda (.it.2469) (core#if .it",
|
|
".2469 .it.2469 #f)) (eqv? .key.2465 (core#quote rename))) ((core#lambda (.alist.",
|
|
"2470 .renames.2471) (map (core#lambda (.s.2472) ((core#lambda (.it.2473) (core#i",
|
|
"f .it.2473 .it.2473 ((core#lambda (.it.2474) (core#if .it.2474 .it.2474 #f)) .s.",
|
|
"2472))) (assq (car .s.2472) .renames.2471))) .alist.2470)) (.collect.2457 (cadr ",
|
|
".spec.2464)) (map (core#lambda (.x.2475) (cons (car .x.2475) (cadr .x.2475))) (c",
|
|
"ddr .spec.2464))) (core#if ((core#lambda (.it.2476) (core#if .it.2476 .it.2476 #",
|
|
"f)) (eqv? .key.2465 (core#quote prefix))) ((core#lambda (.alist.2477) (map (core",
|
|
"#lambda (.s.2478) (cons (.prefix.2454 (.caddr.2453 .spec.2464) (car .s.2478)) (c",
|
|
"dr .s.2478))) .alist.2477)) (.collect.2457 (cadr .spec.2464))) (core#if ((core#l",
|
|
"ambda (.it.2479) (core#if .it.2479 .it.2479 #f)) (eqv? .key.2465 (core#quote exc",
|
|
"ept))) ((core#lambda (.alist.2480) ((core#lambda () (core#begin (core#define .lo",
|
|
"op.2481 (core#lambda (.alist.2482) (core#if (null? .alist.2482) (core#quote ()) ",
|
|
"(core#if (memq (caar .alist.2482) (cddr .spec.2464)) (.loop.2481 (cdr .alist.248",
|
|
"2)) (cons (car .alist.2482) (.loop.2481 (cdr .alist.2482))))))) (.loop.2481 .ali",
|
|
"st.2480))))) (.collect.2457 (cadr .spec.2464))) (core#if #t (dictionary-map (cor",
|
|
"e#lambda (.x.2483) (cons .x.2483 .x.2483)) (library-exports (.getlib.2455 .spec.",
|
|
"2464))) #undefined)))))) (car .spec.2464)))) ((core#lambda (.import.2484) (core#",
|
|
"begin (core#set! .import.2484 (core#lambda (.spec.2485) ((core#lambda (.lib.2486",
|
|
" .alist.2487) (for-each (core#lambda (.slot.2488) (library-import .lib.2486 (cdr",
|
|
" .slot.2488) (car .slot.2488))) .alist.2487)) (.extract.2456 .spec.2485) (.colle",
|
|
"ct.2457 .spec.2485)))) (for-each .import.2484 (cdr .form.2451)))) #undefined))))",
|
|
" #undefined #undefined)) (core#lambda (.x.2489) (car (cdr (cdr .x.2489)))) (core",
|
|
"#lambda (.prefix.2490 .symbol.2491) (string->symbol (string-append (symbol->stri",
|
|
"ng .prefix.2490) (symbol->string .symbol.2491)))) (core#lambda (.name.2492) (cor",
|
|
"e#if (find-library .name.2492) .name.2492 (error \"library not found\" .name.2492)",
|
|
"))))) (.define-transformer.2421 (core#quote export) (core#lambda (.form.2493 ._.",
|
|
"2494) ((core#lambda (.collect.2495 .export.2496) (core#begin (core#set! .collect",
|
|
".2495 (core#lambda (.spec.2497) (core#if (symbol? .spec.2497) (cons .spec.2497 .",
|
|
"spec.2497) (core#if (core#if (list? .spec.2497) (core#if (= (length .spec.2497) ",
|
|
"3) (eq? (car .spec.2497) (core#quote rename)) #f) #f) (cons (list-ref .spec.2497",
|
|
" 1) (list-ref .spec.2497 2)) (error \"malformed export\"))))) (core#begin (core#se",
|
|
"t! .export.2496 (core#lambda (.spec.2498) ((core#lambda (.slot.2499) (library-ex",
|
|
"port (car .slot.2499) (cdr .slot.2499))) (.collect.2495 .spec.2498)))) (for-each",
|
|
" .export.2496 (cdr .form.2493))))) #undefined #undefined))))))) (core#lambda (.n",
|
|
"ame.2500 .macro.2501) (add-macro! .name.2500 .macro.2501))) ((core#lambda () (co",
|
|
"re#begin (make-library (core#quote (picrin base))) (core#begin (set-car! (dictio",
|
|
"nary-ref *libraries* (mangle (core#quote (picrin base)))) default-environment) (",
|
|
"core#begin ((core#lambda (.export-keywords.2502) (core#begin (.export-keywords.2",
|
|
"502 (core#quote (define lambda quote set! if begin define-macro let let* letrec ",
|
|
"letrec* let-values let*-values define-values quasiquote unquote unquote-splicing",
|
|
" and or cond case else => do when unless parameterize))) (core#begin (.export-ke",
|
|
"ywords.2502 (core#quote (features eq? eqv? equal? not boolean? boolean=? pair? c",
|
|
"ons car cdr null? set-car! set-cdr! caar cadr cdar cddr list? make-list list len",
|
|
"gth append reverse list-tail list-ref list-set! list-copy map for-each memq memv",
|
|
" member assq assv assoc current-input-port current-output-port current-error-por",
|
|
"t port? input-port? output-port? port-open? close-port eof-object? eof-object re",
|
|
"ad-u8 peek-u8 read-bytevector! write-u8 write-bytevector flush-output-port open-",
|
|
"input-bytevector open-output-bytevector get-output-bytevector number? exact? ine",
|
|
"xact? inexact exact = < > <= >= + - * / number->string string->number procedure?",
|
|
" apply symbol? symbol=? symbol->string string->symbol make-identifier identifier",
|
|
"? identifier=? identifier-base identifier-environment vector? vector make-vector",
|
|
" vector-length vector-ref vector-set! vector-copy! vector-copy vector-append vec",
|
|
"tor-fill! vector-map vector-for-each list->vector vector->list string->vector ve",
|
|
"ctor->string bytevector? bytevector make-bytevector bytevector-length bytevector",
|
|
"-u8-ref bytevector-u8-set! bytevector-copy! bytevector-copy bytevector-append by",
|
|
"tevector->list list->bytevector call-with-current-continuation call/cc values ca",
|
|
"ll-with-values char? char->integer integer->char char=? char<? char>? char<=? ch",
|
|
"ar>=? current-exception-handlers with-exception-handler raise raise-continuable ",
|
|
"error error-object? error-object-message error-object-irritants error-object-typ",
|
|
"e string? string make-string string-length string-ref string-set! string-copy st",
|
|
"ring-copy! string-fill! string-append string-map string-for-each list->string st",
|
|
"ring->list string=? string<? string>? string<=? string>=? make-parameter with-dy",
|
|
"namic-environment read make-dictionary dictionary? dictionary dictionary-has? di",
|
|
"ctionary-ref dictionary-set! dictionary-delete! dictionary-size dictionary-map d",
|
|
"ictionary-for-each dictionary->alist alist->dictionary dictionary->plist plist->",
|
|
"dictionary make-record record? record-type record-datum default-environment make",
|
|
"-environment find-identifier set-identifier! eval compile add-macro! make-epheme",
|
|
"ron-table write write-simple write-shared display))) (.export-keywords.2502 (cor",
|
|
"e#quote (find-library make-library current-library)))))) (core#lambda (.keywords",
|
|
".2503) ((core#lambda (.env.2504 .exports.2505) (for-each (core#lambda (.keyword.",
|
|
"2506) (dictionary-set! .exports.2505 .keyword.2506 .keyword.2506)) .keywords.250",
|
|
"3)) (library-environment (core#quote (picrin base))) (library-exports (core#quot",
|
|
"e (picrin base)))))) (core#begin (core#set! eval ((core#lambda (.e.2507) (core#l",
|
|
"ambda (.expr.2508 . .lib.2509) ((core#lambda (.lib.2510) (.e.2507 .expr.2508 (li",
|
|
"brary-environment .lib.2510))) (core#if (null? .lib.2509) (current-library) (car",
|
|
" .lib.2509))))) eval)) (core#begin (make-library (core#quote (picrin user))) (cu",
|
|
"rrent-library (core#quote (picrin user))))))))))))))))))))",
|
|
|
|
};
|
|
#endif
|
|
|
|
void
|
|
pic_boot(pic_state *pic)
|
|
{
|
|
pic_load_native(pic, &boot_rom[0][0]);
|
|
#if PIC_USE_LIBRARY
|
|
pic_load_native(pic, &boot_library_rom[0][0]);
|
|
#endif
|
|
}
|