#include "picrin.h" #include "picrin/extra.h" static const char boot_rom[][80] = { "(core#begin (core#define transformer (core#lambda (.f.2252) (core#lambda (.form.", "2253 .env.2254) ((core#lambda (.ephemeron1.2255 .ephemeron2.2256) ((core#lambda ", "(.wrap.2257 .unwrap.2258 .walk.2259) (core#begin (core#set! .wrap.2257 (core#lam", "bda (.var1.2260) ((core#lambda (.it.2261) (core#if .it.2261 .it.2261 ((core#lamb", "da (.it.2262) (core#if .it.2262 .it.2262 #f)) ((core#lambda (.var2.2263) (core#b", "egin (.ephemeron1.2255 .var1.2260 .var2.2263) (core#begin (.ephemeron2.2256 .var", "2.2263 .var1.2260) .var2.2263))) (make-identifier .var1.2260 .env.2254))))) (.ep", "hemeron1.2255 .var1.2260)))) (core#begin (core#set! .unwrap.2258 (core#lambda (.", "var2.2264) ((core#lambda (.it.2265) (core#if .it.2265 .it.2265 ((core#lambda (.i", "t.2266) (core#if .it.2266 .it.2266 #f)) .var2.2264))) (.ephemeron2.2256 .var2.22", "64)))) (core#begin (core#set! .walk.2259 (core#lambda (.f.2267 .form.2268) (core", "#if (identifier? .form.2268) (.f.2267 .form.2268) (core#if (pair? .form.2268) (c", "ons (.walk.2259 .f.2267 (car .form.2268)) (.walk.2259 .f.2267 (cdr .form.2268)))", " .form.2268)))) ((core#lambda (.form.2269) (.walk.2259 .unwrap.2258 (apply .f.22", "52 (.walk.2259 .wrap.2257 .form.2269)))) (cdr .form.2253)))))) #undefined #undef", "ined #undefined)) (make-ephemeron-table) (make-ephemeron-table))))) ((core#lambd", "a () (core#begin (core#define .define-transformer.2270 (core#lambda (.name.2290 ", ".transformer.2291) (add-macro! .name.2290 .transformer.2291))) (core#begin (core", "#define .the.2271 (core#lambda (.var.2292) (make-identifier .var.2292 default-en", "vironment))) (core#begin (core#define .the-core-define.2272 (.the.2271 (core#quo", "te core#define))) (core#begin (core#define .the-core-lambda.2273 (.the.2271 (cor", "e#quote core#lambda))) (core#begin (core#define .the-core-begin.2274 (.the.2271 ", "(core#quote core#begin))) (core#begin (core#define .the-core-quote.2275 (.the.22", "71 (core#quote core#quote))) (core#begin (core#define .the-core-set!.2276 (.the.", "2271 (core#quote core#set!))) (core#begin (core#define .the-core-if.2277 (.the.2", "271 (core#quote core#if))) (core#begin (core#define .the-core-define-macro.2278 ", "(.the.2271 (core#quote core#define-macro))) (core#begin (core#define .the-define", ".2279 (.the.2271 (core#quote define))) (core#begin (core#define .the-lambda.2280", " (.the.2271 (core#quote lambda))) (core#begin (core#define .the-begin.2281 (.the", ".2271 (core#quote begin))) (core#begin (core#define .the-quote.2282 (.the.2271 (", "core#quote quote))) (core#begin (core#define .the-set!.2283 (.the.2271 (core#quo", "te set!))) (core#begin (core#define .the-if.2284 (.the.2271 (core#quote if))) (c", "ore#begin (core#define .the-define-macro.2285 (.the.2271 (core#quote define-macr", "o))) (core#begin (.define-transformer.2270 (core#quote quote) (core#lambda (.for", "m.2293 .env.2294) (core#if (= (length .form.2293) 2) (cons .the-core-quote.2275 ", "(cons (cadr .form.2293) (core#quote ()))) (error \"malformed quote\" .form.2293)))", ") (core#begin (.define-transformer.2270 (core#quote if) (core#lambda (.form.2295", " .env.2296) ((core#lambda (.len.2297) (core#if (= .len.2297 3) (append .form.229", "5 (cons (core#quote #undefined) (core#quote ()))) (core#if (= .len.2297 4) (cons", " .the-core-if.2277 (cdr .form.2295)) (error \"malformed if\" .form.2295)))) (lengt", "h .form.2295)))) (core#begin (.define-transformer.2270 (core#quote begin) (core#", "lambda (.form.2298 .env.2299) ((core#lambda (.len.2300) (core#if (= .len.2300 1)", " #undefined (core#if (= .len.2300 2) (cadr .form.2298) (core#if (= .len.2300 3) ", "(cons .the-core-begin.2274 (cdr .form.2298)) (cons .the-core-begin.2274 (cons (c", "adr .form.2298) (cons (cons .the-begin.2281 (cddr .form.2298)) (core#quote ())))", "))))) (length .form.2298)))) (core#begin (.define-transformer.2270 (core#quote s", "et!) (core#lambda (.form.2301 .env.2302) (core#if (core#if (= (length .form.2301", ") 3) (identifier? (cadr .form.2301)) #f) (cons .the-core-set!.2276 (cdr .form.23", "01)) (error \"malformed set!\" .form.2301)))) (core#begin (core#define .check-form", "al.2286 (core#lambda (.formal.2303) ((core#lambda (.it.2304) (core#if .it.2304 .", "it.2304 ((core#lambda (.it.2305) (core#if .it.2305 .it.2305 ((core#lambda (.it.2", "306) (core#if .it.2306 .it.2306 #f)) (core#if (pair? .formal.2303) (core#if (ide", "ntifier? (car .formal.2303)) (.check-formal.2286 (cdr .formal.2303)) #f) #f)))) ", "(identifier? .formal.2303)))) (null? .formal.2303)))) (core#begin (.define-trans", "former.2270 (core#quote lambda) (core#lambda (.form.2307 .env.2308) (core#if (= ", "(length .form.2307) 1) (error \"malformed lambda\" .form.2307) (core#if (.check-fo", "rmal.2286 (cadr .form.2307)) (cons .the-core-lambda.2273 (cons (cadr .form.2307)", " (cons (cons .the-begin.2281 (cddr .form.2307)) (core#quote ())))) (error \"malfo", "rmed lambda\" .form.2307))))) (core#begin (.define-transformer.2270 (core#quote d", "efine) (core#lambda (.form.2309 .env.2310) ((core#lambda (.len.2311) (core#if (=", " .len.2311 1) (error \"malformed define\" .form.2309) ((core#lambda (.formal.2312)", " (core#if (identifier? .formal.2312) (core#if (= .len.2311 3) (cons .the-core-de", "fine.2272 (cdr .form.2309)) (error \"malformed define\" .form.2309)) (core#if (pai", "r? .formal.2312) (cons .the-define.2279 (cons (car .formal.2312) (cons (cons .th", "e-lambda.2280 (cons (cdr .formal.2312) (cddr .form.2309))) (core#quote ())))) (e", "rror \"define: binding to non-varaible object\" .form.2309)))) (cadr .form.2309)))", ") (length .form.2309)))) (core#begin (.define-transformer.2270 (core#quote defin", "e-macro) (core#lambda (.form.2313 .env.2314) (core#if (= (length .form.2313) 3) ", "(core#if (identifier? (cadr .form.2313)) (cons .the-core-define-macro.2278 (cdr ", ".form.2313)) (error \"define-macro: binding to non-variable object\" .form.2313)) ", "(error \"malformed define-macro\" .form.2313)))) (core#begin (.define-transformer.", "2270 (core#quote syntax-error) (core#lambda (.form.2315 ._.2316) (apply error (c", "dr .form.2315)))) (core#begin #undefined (core#begin (.define-transformer.2270 (", "core#quote else) (core#lambda ._.2317 (error \"invalid use of auxiliary syntax\" (", "core#quote else)))) (core#begin (.define-transformer.2270 (core#quote =>) (core#", "lambda ._.2318 (error \"invalid use of auxiliary syntax\" (core#quote =>)))) (core", "#begin (.define-transformer.2270 (core#quote unquote) (core#lambda ._.2319 (erro", "r \"invalid use of auxiliary syntax\" (core#quote unquote)))) (core#begin (.define", "-transformer.2270 (core#quote unquote-splicing) (core#lambda ._.2320 (error \"inv", "alid use of auxiliary syntax\" (core#quote unquote-splicing)))) (core#begin (.def", "ine-transformer.2270 (core#quote syntax-unquote) (core#lambda ._.2321 (error \"in", "valid use of auxiliary syntax\" (core#quote syntax-unquote)))) (core#begin (.defi", "ne-transformer.2270 (core#quote syntax-unquote-splicing) (core#lambda ._.2322 (e", "rror \"invalid use of auxiliary syntax\" (core#quote syntax-unquote-splicing)))) (", "core#begin (.define-transformer.2270 (core#quote let) (core#lambda (.form.2323 .", "env.2324) (core#if (identifier? (cadr .form.2323)) ((core#lambda (.name.2325 .fo", "rmal.2326 .body.2327) (cons (cons .the-lambda.2280 (cons (core#quote ()) (cons (", "cons .the-define.2279 (cons (cons .name.2325 (map car .formal.2326)) .body.2327)", ") (cons (cons .name.2325 (map cadr .formal.2326)) (core#quote ()))))) (core#quot", "e ()))) (car (cdr .form.2323)) (car (cdr (cdr .form.2323))) (cdr (cdr (cdr .form", ".2323)))) ((core#lambda (.formal.2328 .body.2329) (cons (cons .the-lambda.2280 (", "cons (map car .formal.2328) .body.2329)) (map cadr .formal.2328))) (car (cdr .fo", "rm.2323)) (cdr (cdr .form.2323)))))) (core#begin (.define-transformer.2270 (core", "#quote and) (core#lambda (.form.2330 .env.2331) (core#if (null? (cdr .form.2330)", ") #t (core#if (null? (cddr .form.2330)) (cadr .form.2330) (cons .the-if.2284 (co", "ns (cadr .form.2330) (cons (cons (.the.2271 (core#quote and)) (cddr .form.2330))", " (cons (core#quote #f) (core#quote ()))))))))) (core#begin (.define-transformer.", "2270 (core#quote or) (core#lambda (.form.2332 .env.2333) (core#if (null? (cdr .f", "orm.2332)) #f ((core#lambda (.tmp.2334) (cons (.the.2271 (core#quote let)) (cons", " (cons (cons .tmp.2334 (cons (cadr .form.2332) (core#quote ()))) (core#quote ())", ") (cons (cons .the-if.2284 (cons .tmp.2334 (cons .tmp.2334 (cons (cons (.the.227", "1 (core#quote or)) (cddr .form.2332)) (core#quote ()))))) (core#quote ()))))) (m", "ake-identifier (core#quote it) .env.2333))))) (core#begin (.define-transformer.2", "270 (core#quote cond) (core#lambda (.form.2335 .env.2336) ((core#lambda (.clause", "s.2337) (core#if (null? .clauses.2337) #undefined ((core#lambda (.clause.2338) (", "core#if (core#if (identifier? (car .clause.2338)) (identifier=? (.the.2271 (core", "#quote else)) (make-identifier (car .clause.2338) .env.2336)) #f) (cons .the-beg", "in.2281 (cdr .clause.2338)) (core#if (null? (cdr .clause.2338)) (cons (.the.2271", " (core#quote or)) (cons (car .clause.2338) (cons (cons (.the.2271 (core#quote co", "nd)) (cdr .clauses.2337)) (core#quote ())))) (core#if (core#if (identifier? (cad", "r .clause.2338)) (identifier=? (.the.2271 (core#quote =>)) (make-identifier (cad", "r .clause.2338) .env.2336)) #f) ((core#lambda (.tmp.2339) (cons (.the.2271 (core", "#quote let)) (cons (cons (cons .tmp.2339 (cons (car .clause.2338) (core#quote ()", "))) (core#quote ())) (cons (cons .the-if.2284 (cons .tmp.2339 (cons (cons (cadr ", "(cdr .clause.2338)) (cons .tmp.2339 (core#quote ()))) (cons (cons (.the.2271 (co", "re#quote cond)) (cddr .form.2335)) (core#quote ()))))) (core#quote ()))))) (make", "-identifier (core#quote tmp) .env.2336)) (cons .the-if.2284 (cons (car .clause.2", "338) (cons (cons .the-begin.2281 (cdr .clause.2338)) (cons (cons (.the.2271 (cor", "e#quote cond)) (cdr .clauses.2337)) (core#quote ()))))))))) (car .clauses.2337))", ")) (cdr .form.2335)))) (core#begin (.define-transformer.2270 (core#quote quasiqu", "ote) (core#lambda (.form.2340 .env.2341) (core#begin (core#define .quasiquote?.2", "342 (core#lambda (.form.2346) (core#if (pair? .form.2346) (core#if (identifier? ", "(car .form.2346)) (identifier=? (.the.2271 (core#quote quasiquote)) (make-identi", "fier (car .form.2346) .env.2341)) #f) #f))) (core#begin (core#define .unquote?.2", "343 (core#lambda (.form.2347) (core#if (pair? .form.2347) (core#if (identifier? ", "(car .form.2347)) (identifier=? (.the.2271 (core#quote unquote)) (make-identifie", "r (car .form.2347) .env.2341)) #f) #f))) (core#begin (core#define .unquote-splic", "ing?.2344 (core#lambda (.form.2348) (core#if (pair? .form.2348) (core#if (pair? ", "(car .form.2348)) (core#if (identifier? (caar .form.2348)) (identifier=? (.the.2", "271 (core#quote unquote-splicing)) (make-identifier (caar .form.2348) .env.2341)", ") #f) #f) #f))) (core#begin (core#define .qq.2345 (core#lambda (.depth.2349 .exp", "r.2350) (core#if (.unquote?.2343 .expr.2350) (core#if (= .depth.2349 1) (cadr .e", "xpr.2350) (list (.the.2271 (core#quote list)) (list (.the.2271 (core#quote quote", ")) (.the.2271 (core#quote unquote))) (.qq.2345 (- .depth.2349 1) (car (cdr .expr", ".2350))))) (core#if (.unquote-splicing?.2344 .expr.2350) (core#if (= .depth.2349", " 1) (list (.the.2271 (core#quote append)) (car (cdr (car .expr.2350))) (.qq.2345", " .depth.2349 (cdr .expr.2350))) (list (.the.2271 (core#quote cons)) (list (.the.", "2271 (core#quote list)) (list (.the.2271 (core#quote quote)) (.the.2271 (core#qu", "ote unquote-splicing))) (.qq.2345 (- .depth.2349 1) (car (cdr (car .expr.2350)))", ")) (.qq.2345 .depth.2349 (cdr .expr.2350)))) (core#if (.quasiquote?.2342 .expr.2", "350) (list (.the.2271 (core#quote list)) (list (.the.2271 (core#quote quote)) (.", "the.2271 (core#quote quasiquote))) (.qq.2345 (+ .depth.2349 1) (car (cdr .expr.2", "350)))) (core#if (pair? .expr.2350) (list (.the.2271 (core#quote cons)) (.qq.234", "5 .depth.2349 (car .expr.2350)) (.qq.2345 .depth.2349 (cdr .expr.2350))) (core#i", "f (vector? .expr.2350) (list (.the.2271 (core#quote list->vector)) (.qq.2345 .de", "pth.2349 (vector->list .expr.2350))) (list (.the.2271 (core#quote quote)) .expr.", "2350)))))))) ((core#lambda (.x.2351) (.qq.2345 1 .x.2351)) (cadr .form.2340)))))", "))) (core#begin (.define-transformer.2270 (core#quote let*) (core#lambda (.form.", "2352 .env.2353) ((core#lambda (.bindings.2354 .body.2355) (core#if (null? .bindi", "ngs.2354) (cons (.the.2271 (core#quote let)) (cons (core#quote ()) .body.2355)) ", "(cons (.the.2271 (core#quote let)) (cons (cons (cons (car (car .bindings.2354)) ", "(cdr (car .bindings.2354))) (core#quote ())) (cons (cons (.the.2271 (core#quote ", "let*)) (cons (cdr .bindings.2354) .body.2355)) (core#quote ())))))) (car (cdr .f", "orm.2352)) (cdr (cdr .form.2352))))) (core#begin (.define-transformer.2270 (core", "#quote letrec) (core#lambda (.form.2356 .env.2357) (cons (.the.2271 (core#quote ", "letrec*)) (cdr .form.2356)))) (core#begin (.define-transformer.2270 (core#quote ", "letrec*) (core#lambda (.form.2358 .env.2359) ((core#lambda (.bindings.2360 .body", ".2361) ((core#lambda (.variables.2362 .initials.2363) (cons (.the.2271 (core#quo", "te let)) (cons .variables.2362 (append .initials.2363 (append .body.2361 (core#q", "uote ())))))) (map (core#lambda (.v.2364) (cons .v.2364 (cons (core#quote #undef", "ined) (core#quote ())))) (map car .bindings.2360)) (map (core#lambda (.v.2365) (", "cons (.the.2271 (core#quote set!)) (append .v.2365 (core#quote ())))) .bindings.", "2360))) (car (cdr .form.2358)) (cdr (cdr .form.2358))))) (core#begin (.define-tr", "ansformer.2270 (core#quote let-values) (core#lambda (.form.2366 .env.2367) (cons", " (.the.2271 (core#quote let*-values)) (append (cdr .form.2366) (core#quote ())))", ")) (core#begin (.define-transformer.2270 (core#quote let*-values) (core#lambda (", ".form.2368 .env.2369) ((core#lambda (.formal.2370 .body.2371) (core#if (null? .f", "ormal.2370) (cons (.the.2271 (core#quote let)) (cons (core#quote ()) (append .bo", "dy.2371 (core#quote ())))) (cons (.the.2271 (core#quote call-with-values)) (cons", " (cons .the-lambda.2280 (cons (core#quote ()) (append (cdr (car .formal.2370)) (", "core#quote ())))) (cons (cons (.the.2271 (core#quote lambda)) (cons (append (car", " (car .formal.2370)) (core#quote ())) (cons (cons (.the.2271 (core#quote let*-va", "lues)) (cons (append (cdr .formal.2370) (core#quote ())) (append .body.2371 (cor", "e#quote ())))) (core#quote ())))) (core#quote ())))))) (car (cdr .form.2368)) (c", "dr (cdr .form.2368))))) (core#begin (.define-transformer.2270 (core#quote define", "-values) (core#lambda (.form.2372 .env.2373) ((core#lambda (.formal.2374 .body.2", "375) ((core#lambda (.arguments.2376) (cons .the-begin.2281 (append ((core#lambda", " () (core#begin (core#define .loop.2377 (core#lambda (.formal.2378) (core#if (pa", "ir? .formal.2378) (cons (cons .the-define.2279 (cons (car .formal.2378) (cons (c", "ore#quote #undefined) (core#quote ())))) (append (.loop.2377 (cdr .formal.2378))", " (core#quote ()))) (core#if (identifier? .formal.2378) (cons (cons .the-define.2", "279 (cons .formal.2378 (cons (core#quote #undefined) (core#quote ())))) (core#qu", "ote ())) (core#quote ()))))) (.loop.2377 .formal.2374)))) (cons (cons (.the.2271", " (core#quote call-with-values)) (cons (cons .the-lambda.2280 (cons (core#quote (", ")) (append .body.2375 (core#quote ())))) (cons (cons .the-lambda.2280 (cons .arg", "uments.2376 (append ((core#lambda () (core#begin (core#define .loop.2379 (core#l", "ambda (.formal.2380 .args.2381) (core#if (pair? .formal.2380) (cons (cons .the-s", "et!.2283 (cons (car .formal.2380) (cons (cons (.the.2271 (core#quote car)) (cons", " .args.2381 (core#quote ()))) (core#quote ())))) (append (.loop.2379 (cdr .forma", "l.2380) (cons (.the.2271 (core#quote cdr)) (cons .args.2381 (core#quote ())))) (", "core#quote ()))) (core#if (identifier? .formal.2380) (cons (cons .the-set!.2283 ", "(cons .formal.2380 (cons .args.2381 (core#quote ())))) (core#quote ())) (core#qu", "ote ()))))) (.loop.2379 .formal.2374 .arguments.2376)))) (core#quote ())))) (cor", "e#quote ())))) (core#quote ()))))) (make-identifier (core#quote arguments) .env.", "2373))) (car (cdr .form.2372)) (cdr (cdr .form.2372))))) (core#begin (.define-tr", "ansformer.2270 (core#quote do) (core#lambda (.form.2382 .env.2383) ((core#lambda", " (.bindings.2384 .test.2385 .cleanup.2386 .body.2387) ((core#lambda (.loop.2388)", " (cons (.the.2271 (core#quote let)) (cons .loop.2388 (cons (map (core#lambda (.x", ".2389) (cons (car .x.2389) (cons (cadr .x.2389) (core#quote ())))) .bindings.238", "4) (cons (cons .the-if.2284 (cons .test.2385 (cons (cons .the-begin.2281 .cleanu", "p.2386) (cons (cons .the-begin.2281 (append .body.2387 (cons (cons .loop.2388 (m", "ap (core#lambda (.x.2390) (core#if (null? (cdr (cdr .x.2390))) (car .x.2390) (ca", "r (cdr (cdr .x.2390))))) .bindings.2384)) (core#quote ())))) (core#quote ())))))", " (core#quote ())))))) (make-identifier (core#quote loop) .env.2383))) (car (cdr ", ".form.2382)) (car (car (cdr (cdr .form.2382)))) (cdr (car (cdr (cdr .form.2382))", ")) (cdr (cdr (cdr .form.2382)))))) (core#begin (.define-transformer.2270 (core#q", "uote when) (core#lambda (.form.2391 .env.2392) ((core#lambda (.test.2393 .body.2", "394) (cons .the-if.2284 (cons .test.2393 (cons (cons .the-begin.2281 (append .bo", "dy.2394 (core#quote ()))) (cons (core#quote #undefined) (core#quote ())))))) (ca", "r (cdr .form.2391)) (cdr (cdr .form.2391))))) (core#begin (.define-transformer.2", "270 (core#quote unless) (core#lambda (.form.2395 .env.2396) ((core#lambda (.test", ".2397 .body.2398) (cons .the-if.2284 (cons .test.2397 (cons (core#quote #undefin", "ed) (cons (cons .the-begin.2281 (append .body.2398 (core#quote ()))) (core#quote", " ())))))) (car (cdr .form.2395)) (cdr (cdr .form.2395))))) (core#begin (.define-", "transformer.2270 (core#quote case) (core#lambda (.form.2399 .env.2400) ((core#la", "mbda (.key.2401 .clauses.2402) ((core#lambda (.the-key.2403) (cons (.the.2271 (c", "ore#quote let)) (cons (cons (cons .the-key.2403 (cons .key.2401 (core#quote ()))", ") (core#quote ())) (cons ((core#lambda () (core#begin (core#define .loop.2404 (c", "ore#lambda (.clauses.2405) (core#if (null? .clauses.2405) #undefined ((core#lamb", "da (.clause.2406) (cons .the-if.2284 (cons (core#if (core#if (identifier? (car .", "clause.2406)) (identifier=? (.the.2271 (core#quote else)) (make-identifier (car ", ".clause.2406) .env.2400)) #f) #t (cons (.the.2271 (core#quote or)) (append (map ", "(core#lambda (.x.2407) (cons (.the.2271 (core#quote eqv?)) (cons .the-key.2403 (", "cons (cons .the-quote.2282 (cons .x.2407 (core#quote ()))) (core#quote ()))))) (", "car .clause.2406)) (core#quote ())))) (cons (core#if (core#if (identifier? (cadr", " .clause.2406)) (identifier=? (.the.2271 (core#quote =>)) (make-identifier (cadr", " .clause.2406) .env.2400)) #f) (cons (car (cdr (cdr .clause.2406))) (cons .the-k", "ey.2403 (core#quote ()))) (cons .the-begin.2281 (append (cdr .clause.2406) (core", "#quote ())))) (cons (.loop.2404 (cdr .clauses.2405)) (core#quote ())))))) (car .", "clauses.2405))))) (.loop.2404 .clauses.2402)))) (core#quote ()))))) (make-identi", "fier (core#quote key) .env.2400))) (car (cdr .form.2399)) (cdr (cdr .form.2399))", "))) (core#begin (.define-transformer.2270 (core#quote parameterize) (core#lambda", " (.form.2408 .env.2409) ((core#lambda (.formal.2410 .body.2411) (cons (.the.2271", " (core#quote with-dynamic-environment)) (cons (cons (.the.2271 (core#quote list)", ") (append (map (core#lambda (.x.2412) (cons (.the.2271 (core#quote cons)) (cons ", "(car .x.2412) (cons (cadr .x.2412) (core#quote ()))))) .formal.2410) (core#quote", " ()))) (cons (cons .the-lambda.2280 (cons (core#quote ()) (append .body.2411 (co", "re#quote ())))) (core#quote ()))))) (car (cdr .form.2408)) (cdr (cdr .form.2408)", ")))) (core#begin (.define-transformer.2270 (core#quote syntax-quote) (core#lambd", "a (.form.2413 .env.2414) ((core#lambda (.renames.2415) ((core#lambda (.rename.24", "16 .walk.2417) (core#begin (core#set! .rename.2416 (core#lambda (.var.2418) ((co", "re#lambda (.x.2419) (core#if .x.2419 (cadr .x.2419) (core#begin (core#set! .rena", "mes.2415 (cons (cons .var.2418 (cons (make-identifier .var.2418 .env.2414) (cons", " (cons (.the.2271 (core#quote make-identifier)) (cons (cons (core#quote quote) (", "cons .var.2418 (core#quote ()))) (cons (cons (core#quote quote) (cons .env.2414 ", "(core#quote ()))) (core#quote ())))) (core#quote ())))) .renames.2415)) (.rename", ".2416 .var.2418)))) (assq .var.2418 .renames.2415)))) (core#begin (core#set! .wa", "lk.2417 (core#lambda (.f.2420 .form.2421) (core#if (identifier? .form.2421) (.f.", "2420 .form.2421) (core#if (pair? .form.2421) (cons (.the.2271 (core#quote cons))", " (cons (cons (core#quote walk) (cons (core#quote f) (cons (cons (core#quote car)", " (cons (core#quote form) (core#quote ()))) (core#quote ())))) (cons (cons (core#", "quote walk) (cons (core#quote f) (cons (cons (core#quote cdr) (cons (core#quote ", "form) (core#quote ()))) (core#quote ())))) (core#quote ())))) (core#if (vector? ", ".form.2421) (cons (.the.2271 (core#quote list->vector)) (cons (cons (core#quote ", "walk) (cons (core#quote f) (cons (cons (core#quote vector->list) (cons (core#quo", "te form) (core#quote ()))) (core#quote ())))) (core#quote ()))) (cons (.the.2271", " (core#quote quote)) (cons .form.2421 (core#quote ())))))))) ((core#lambda (.for", "m.2422) (cons (.the.2271 (core#quote let)) (cons (map cdr .renames.2415) (cons .", "form.2422 (core#quote ()))))) (.walk.2417 .rename.2416 (cadr .form.2413)))))) #u", "ndefined #undefined)) (core#quote ())))) (core#begin (.define-transformer.2270 (", "core#quote syntax-quasiquote) (core#lambda (.form.2423 .env.2424) ((core#lambda ", "(.renames.2425) ((core#lambda (.rename.2426) (core#begin (core#set! .rename.2426", " (core#lambda (.var.2431) ((core#lambda (.x.2432) (core#if .x.2432 (cadr .x.2432", ") (core#begin (core#set! .renames.2425 (cons (cons .var.2431 (cons (make-identif", "ier .var.2431 .env.2424) (cons (cons (.the.2271 (core#quote make-identifier)) (c", "ons (cons (core#quote quote) (cons .var.2431 (core#quote ()))) (cons (cons (core", "#quote quote) (cons .env.2424 (core#quote ()))) (core#quote ())))) (core#quote (", "))))) .renames.2425)) (.rename.2426 .var.2431)))) (assq .var.2431 .renames.2425)", "))) (core#begin (core#define .syntax-quasiquote?.2427 (core#lambda (.form.2433) ", "(core#if (pair? .form.2433) (core#if (identifier? (car .form.2433)) (identifier=", "? (.the.2271 (core#quote syntax-quasiquote)) (make-identifier (car .form.2433) .", "env.2424)) #f) #f))) (core#begin (core#define .syntax-unquote?.2428 (core#lambda", " (.form.2434) (core#if (pair? .form.2434) (core#if (identifier? (car .form.2434)", ") (identifier=? (.the.2271 (core#quote syntax-unquote)) (make-identifier (car .f", "orm.2434) .env.2424)) #f) #f))) (core#begin (core#define .syntax-unquote-splicin", "g?.2429 (core#lambda (.form.2435) (core#if (pair? .form.2435) (core#if (pair? (c", "ar .form.2435)) (core#if (identifier? (caar .form.2435)) (identifier=? (.the.227", "1 (core#quote syntax-unquote-splicing)) (make-identifier (caar .form.2435) .env.", "2424)) #f) #f) #f))) (core#begin (core#define .qq.2430 (core#lambda (.depth.2436", " .expr.2437) (core#if (.syntax-unquote?.2428 .expr.2437) (core#if (= .depth.2436", " 1) (car (cdr .expr.2437)) (list (.the.2271 (core#quote list)) (list (.the.2271 ", "(core#quote quote)) (.the.2271 (core#quote syntax-unquote))) (.qq.2430 (- .depth", ".2436 1) (car (cdr .expr.2437))))) (core#if (.syntax-unquote-splicing?.2429 .exp", "r.2437) (core#if (= .depth.2436 1) (list (.the.2271 (core#quote append)) (car (c", "dr (car .expr.2437))) (.qq.2430 .depth.2436 (cdr .expr.2437))) (list (.the.2271 ", "(core#quote cons)) (list (.the.2271 (core#quote list)) (list (.the.2271 (core#qu", "ote quote)) (.the.2271 (core#quote syntax-unquote-splicing))) (.qq.2430 (- .dept", "h.2436 1) (car (cdr (car .expr.2437))))) (.qq.2430 .depth.2436 (cdr .expr.2437))", ")) (core#if (.syntax-quasiquote?.2427 .expr.2437) (list (.the.2271 (core#quote l", "ist)) (list (.the.2271 (core#quote quote)) (.the.2271 (core#quote quasiquote))) ", "(.qq.2430 (+ .depth.2436 1) (car (cdr .expr.2437)))) (core#if (pair? .expr.2437)", " (list (.the.2271 (core#quote cons)) (.qq.2430 .depth.2436 (car .expr.2437)) (.q", "q.2430 .depth.2436 (cdr .expr.2437))) (core#if (vector? .expr.2437) (list (.the.", "2271 (core#quote list->vector)) (.qq.2430 .depth.2436 (vector->list .expr.2437))", ") (core#if (identifier? .expr.2437) (.rename.2426 .expr.2437) (list (.the.2271 (", "core#quote quote)) .expr.2437))))))))) ((core#lambda (.body.2438) (cons (.the.22", "71 (core#quote let)) (cons (map cdr .renames.2425) (cons .body.2438 (core#quote ", "()))))) (.qq.2430 1 (cadr .form.2423))))))))) #undefined)) (core#quote ())))) (c", "ore#begin (.define-transformer.2270 (core#quote define-syntax) (core#lambda (.fo", "rm.2439 .env.2440) ((core#lambda (.formal.2441 .body.2442) (core#if (pair? .form", "al.2441) (cons (.the.2271 (core#quote define-syntax)) (cons (car .formal.2441) (", "cons (cons .the-lambda.2280 (cons (cdr .formal.2441) (append .body.2442 (core#qu", "ote ())))) (core#quote ())))) (cons .the-define-macro.2285 (cons .formal.2441 (c", "ons (cons (.the.2271 (core#quote transformer)) (cons (cons .the-begin.2281 (appe", "nd .body.2442 (core#quote ()))) (core#quote ()))) (core#quote ())))))) (car (cdr", " .form.2439)) (cdr (cdr .form.2439))))) (core#begin (.define-transformer.2270 (c", "ore#quote letrec-syntax) (core#lambda (.form.2443 .env.2444) ((core#lambda (.for", "mal.2445 .body.2446) (cons (core#quote let) (cons (core#quote ()) (append (map (", "core#lambda (.x.2447) (cons (.the.2271 (core#quote define-syntax)) (cons (car .x", ".2447) (cons (cadr .x.2447) (core#quote ()))))) .formal.2445) (append .body.2446", " (core#quote ())))))) (car (cdr .form.2443)) (cdr (cdr .form.2443))))) (.define-", "transformer.2270 (core#quote let-syntax) (core#lambda (.form.2448 .env.2449) (co", "ns (.the.2271 (core#quote letrec-syntax)) (append (cdr .form.2448) (core#quote (", ")))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))", }; #if PIC_USE_LIBRARY static const char boot_library_rom[][80] = { "(core#begin (core#define mangle (core#lambda (.name.2450) (core#begin (core#if (", "null? .name.2450) (error \"library name should be a list of at least one symbols\"", " .name.2450) #undefined) (core#begin (core#define .->string.2451 (core#lambda (.", "n.2453) (core#if (symbol? .n.2453) ((core#lambda (.str.2454) (core#begin (string", "-for-each (core#lambda (.c.2455) (core#if ((core#lambda (.it.2456) (core#if .it.", "2456 .it.2456 ((core#lambda (.it.2457) (core#if .it.2457 .it.2457 #f)) (char=? .", "c.2455 #\\:)))) (char=? .c.2455 #\\.)) (error \"elements of library name may not co", "ntain '.' or ':'\" .n.2453) #undefined)) .str.2454) .str.2454)) (symbol->string .", "n.2453)) (core#if (core#if (number? .n.2453) (core#if (exact? .n.2453) (<= 0 .n.", "2453) #f) #f) (number->string .n.2453) (error \"symbol or non-negative integer is", " required\" .n.2453))))) (core#begin (core#define .join.2452 (core#lambda (.strs.", "2458 .delim.2459) ((core#lambda () (core#begin (core#define .loop.2460 (core#lam", "bda (.res.2461 .strs.2462) (core#if (null? .strs.2462) .res.2461 (.loop.2460 (st", "ring-append .res.2461 .delim.2459 (car .strs.2462)) (cdr .strs.2462))))) (.loop.", "2460 (car .strs.2458) (cdr .strs.2458))))))) (core#if (symbol? .name.2450) .name", ".2450 (string->symbol (.join.2452 (map .->string.2451 .name.2450) \".\")))))))) (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.2463) (dictionary-has? *libraries* ", "(mangle .name.2463)))) (core#begin (core#define make-library (core#lambda (.name", ".2464) ((core#lambda (.name.2465) ((core#lambda (.env.2466 .exports.2467) (core#", "begin (set-identifier! (core#quote define-library) (core#quote define-library) .", "env.2466) (core#begin (set-identifier! (core#quote import) (core#quote import) .", "env.2466) (core#begin (set-identifier! (core#quote export) (core#quote export) .", "env.2466) (core#begin (set-identifier! (core#quote cond-expand) (core#quote cond", "-expand) .env.2466) (dictionary-set! *libraries* .name.2465 (cons .env.2466 .exp", "orts.2467))))))) (make-environment (string->symbol (string-append (symbol->strin", "g .name.2465) \":\"))) (make-dictionary))) (mangle .name.2464)))) (core#begin (cor", "e#define library-environment (core#lambda (.name.2468) (car (dictionary-ref *lib", "raries* (mangle .name.2468))))) (core#begin (core#define library-exports (core#l", "ambda (.name.2469) (cdr (dictionary-ref *libraries* (mangle .name.2469))))) (cor", "e#begin (core#define library-import (core#lambda (.name.2470 .sym.2471 .alias.24", "72) ((core#lambda (.uid.2473) ((core#lambda (.env.2474) (set-identifier! .alias.", "2472 .uid.2473 .env.2474)) (library-environment (current-library)))) (dictionary", "-ref (library-exports .name.2470) .sym.2471)))) (core#begin (core#define library", "-export (core#lambda (.sym.2475 .alias.2476) ((core#lambda (.env.2477 .exports.2", "478) (dictionary-set! .exports.2478 .alias.2476 (find-identifier .sym.2475 .env.", "2477))) (library-environment (current-library)) (library-exports (current-librar", "y))))) (core#begin ((core#lambda (.define-transformer.2479) (core#begin (.define", "-transformer.2479 (core#quote define-library) (core#lambda (.form.2480 ._.2481) ", "((core#lambda (.name.2482 .body.2483) (core#begin ((core#lambda (.it.2484) (core", "#if .it.2484 .it.2484 ((core#lambda (.it.2485) (core#if .it.2485 .it.2485 #f)) (", "make-library .name.2482)))) (find-library .name.2482)) (with-dynamic-environment", " (list (cons current-library .name.2482)) (core#lambda () (for-each (core#lambda", " (.expr.2486) (eval .expr.2486 .name.2482)) .body.2483))))) (cadr .form.2480) (c", "ddr .form.2480)))) (core#begin (.define-transformer.2479 (core#quote cond-expand", ") (core#lambda (.form.2487 ._.2488) ((core#lambda (.test.2489) (core#begin (core", "#set! .test.2489 (core#lambda (.form.2490) ((core#lambda (.it.2491) (core#if .it", ".2491 .it.2491 ((core#lambda (.it.2492) (core#if .it.2492 .it.2492 ((core#lambda", " (.it.2493) (core#if .it.2493 .it.2493 #f)) (core#if (pair? .form.2490) ((core#l", "ambda (.key.2494) (core#if ((core#lambda (.it.2495) (core#if .it.2495 .it.2495 #", "f)) (eqv? .key.2494 (core#quote library))) (find-library (cadr .form.2490)) (cor", "e#if ((core#lambda (.it.2496) (core#if .it.2496 .it.2496 #f)) (eqv? .key.2494 (c", "ore#quote not))) (not (.test.2489 (cadr .form.2490))) (core#if ((core#lambda (.i", "t.2497) (core#if .it.2497 .it.2497 #f)) (eqv? .key.2494 (core#quote and))) ((cor", "e#lambda () (core#begin (core#define .loop.2498 (core#lambda (.form.2499) ((core", "#lambda (.it.2500) (core#if .it.2500 .it.2500 ((core#lambda (.it.2501) (core#if ", ".it.2501 .it.2501 #f)) (core#if (.test.2489 (car .form.2499)) (.loop.2498 (cdr .", "form.2499)) #f)))) (null? .form.2499)))) (.loop.2498 (cdr .form.2490))))) (core#", "if ((core#lambda (.it.2502) (core#if .it.2502 .it.2502 #f)) (eqv? .key.2494 (cor", "e#quote or))) ((core#lambda () (core#begin (core#define .loop.2503 (core#lambda ", "(.form.2504) (core#if (pair? .form.2504) ((core#lambda (.it.2505) (core#if .it.2", "505 .it.2505 ((core#lambda (.it.2506) (core#if .it.2506 .it.2506 #f)) (.loop.250", "3 (cdr .form.2504))))) (.test.2489 (car .form.2504))) #f))) (.loop.2503 (cdr .fo", "rm.2490))))) (core#if #t #f #undefined)))))) (car .form.2490)) #f)))) (core#if (", "symbol? .form.2490) (memq .form.2490 (features)) #f)))) (eq? .form.2490 (core#qu", "ote else))))) ((core#lambda () (core#begin (core#define .loop.2507 (core#lambda ", "(.clauses.2508) (core#if (null? .clauses.2508) #undefined (core#if (.test.2489 (", "caar .clauses.2508)) (cons (make-identifier (core#quote begin) default-environme", "nt) (append (cdar .clauses.2508) (core#quote ()))) (.loop.2507 (cdr .clauses.250", "8)))))) (.loop.2507 (cdr .form.2487))))))) #undefined))) (core#begin (.define-tr", "ansformer.2479 (core#quote import) (core#lambda (.form.2509 ._.2510) ((core#lamb", "da (.caddr.2511 .prefix.2512 .getlib.2513) ((core#lambda (.extract.2514 .collect", ".2515) (core#begin (core#set! .extract.2514 (core#lambda (.spec.2516) ((core#lam", "bda (.key.2517) (core#if ((core#lambda (.it.2518) (core#if .it.2518 .it.2518 ((c", "ore#lambda (.it.2519) (core#if .it.2519 .it.2519 ((core#lambda (.it.2520) (core#", "if .it.2520 .it.2520 ((core#lambda (.it.2521) (core#if .it.2521 .it.2521 #f)) (e", "qv? .key.2517 (core#quote except))))) (eqv? .key.2517 (core#quote prefix))))) (e", "qv? .key.2517 (core#quote rename))))) (eqv? .key.2517 (core#quote only))) (.extr", "act.2514 (cadr .spec.2516)) (core#if #t (.getlib.2513 .spec.2516) #undefined))) ", "(car .spec.2516)))) (core#begin (core#set! .collect.2515 (core#lambda (.spec.252", "2) ((core#lambda (.key.2523) (core#if ((core#lambda (.it.2524) (core#if .it.2524", " .it.2524 #f)) (eqv? .key.2523 (core#quote only))) ((core#lambda (.alist.2525) (", "map (core#lambda (.var.2526) (assq .var.2526 .alist.2525)) (cddr .spec.2522))) (", ".collect.2515 (cadr .spec.2522))) (core#if ((core#lambda (.it.2527) (core#if .it", ".2527 .it.2527 #f)) (eqv? .key.2523 (core#quote rename))) ((core#lambda (.alist.", "2528 .renames.2529) (map (core#lambda (.s.2530) ((core#lambda (.it.2531) (core#i", "f .it.2531 .it.2531 ((core#lambda (.it.2532) (core#if .it.2532 .it.2532 #f)) .s.", "2530))) (assq (car .s.2530) .renames.2529))) .alist.2528)) (.collect.2515 (cadr ", ".spec.2522)) (map (core#lambda (.x.2533) (cons (car .x.2533) (cadr .x.2533))) (c", "ddr .spec.2522))) (core#if ((core#lambda (.it.2534) (core#if .it.2534 .it.2534 #", "f)) (eqv? .key.2523 (core#quote prefix))) ((core#lambda (.alist.2535) (map (core", "#lambda (.s.2536) (cons (.prefix.2512 (.caddr.2511 .spec.2522) (car .s.2536)) (c", "dr .s.2536))) .alist.2535)) (.collect.2515 (cadr .spec.2522))) (core#if ((core#l", "ambda (.it.2537) (core#if .it.2537 .it.2537 #f)) (eqv? .key.2523 (core#quote exc", "ept))) ((core#lambda (.alist.2538) ((core#lambda () (core#begin (core#define .lo", "op.2539 (core#lambda (.alist.2540) (core#if (null? .alist.2540) (core#quote ()) ", "(core#if (memq (caar .alist.2540) (cddr .spec.2522)) (.loop.2539 (cdr .alist.254", "0)) (cons (car .alist.2540) (.loop.2539 (cdr .alist.2540))))))) (.loop.2539 .ali", "st.2538))))) (.collect.2515 (cadr .spec.2522))) (core#if #t (dictionary-map (cor", "e#lambda (.x.2541) (cons .x.2541 .x.2541)) (library-exports (.getlib.2513 .spec.", "2522))) #undefined)))))) (car .spec.2522)))) ((core#lambda (.import.2542) (core#", "begin (core#set! .import.2542 (core#lambda (.spec.2543) ((core#lambda (.lib.2544", " .alist.2545) (for-each (core#lambda (.slot.2546) (library-import .lib.2544 (cdr", " .slot.2546) (car .slot.2546))) .alist.2545)) (.extract.2514 .spec.2543) (.colle", "ct.2515 .spec.2543)))) (for-each .import.2542 (cdr .form.2509)))) #undefined))))", " #undefined #undefined)) (core#lambda (.x.2547) (car (cdr (cdr .x.2547)))) (core", "#lambda (.prefix.2548 .symbol.2549) (string->symbol (string-append (symbol->stri", "ng .prefix.2548) (symbol->string .symbol.2549)))) (core#lambda (.name.2550) (cor", "e#if (find-library .name.2550) .name.2550 (error \"library not found\" .name.2550)", "))))) (.define-transformer.2479 (core#quote export) (core#lambda (.form.2551 ._.", "2552) ((core#lambda (.collect.2553 .export.2554) (core#begin (core#set! .collect", ".2553 (core#lambda (.spec.2555) (core#if (symbol? .spec.2555) (cons .spec.2555 .", "spec.2555) (core#if (core#if (list? .spec.2555) (core#if (= (length .spec.2555) ", "3) (eq? (car .spec.2555) (core#quote rename)) #f) #f) (cons (list-ref .spec.2555", " 1) (list-ref .spec.2555 2)) (error \"malformed export\"))))) (core#begin (core#se", "t! .export.2554 (core#lambda (.spec.2556) ((core#lambda (.slot.2557) (library-ex", "port (car .slot.2557) (cdr .slot.2557))) (.collect.2553 .spec.2556)))) (for-each", " .export.2554 (cdr .form.2551))))) #undefined #undefined))))))) (core#lambda (.n", "ame.2558 .macro.2559) (add-macro! .name.2558 .macro.2559))) ((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.2560) (core#begin (.export-keywords.2", "560 (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 define-syntax syntax-quote", " syntax-unquote syntax-quasiquote syntax-unquote-splicing let-syntax letrec-synt", "ax syntax-error))) (core#begin (.export-keywords.2560 (core#quote (features eq? ", "eqv? equal? not boolean? boolean=? pair? cons car cdr null? set-car! set-cdr! ca", "ar cadr cdar cddr list? make-list list length 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-port port? input-port? output-port? port-", "open? close-port eof-object? eof-object read-u8 peek-u8 read-bytevector! write-u", "8 write-bytevector flush-output-port open-input-bytevector open-output-bytevecto", "r get-output-bytevector number? exact? inexact? inexact exact = < > <= >= + - * ", "/ number->string string->number procedure? apply symbol? symbol=? symbol->string", " string->symbol make-identifier identifier? identifier=? identifier-base identif", "ier-environment vector? vector make-vector vector-length vector-ref vector-set! ", "vector-copy! vector-copy vector-append vector-fill! vector-map vector-for-each l", "ist->vector vector->list string->vector vector->string bytevector? bytevector ma", "ke-bytevector bytevector-length bytevector-u8-ref bytevector-u8-set! bytevector-", "copy! bytevector-copy bytevector-append bytevector->list list->bytevector call-w", "ith-current-continuation call/cc values call-with-values char? char->integer int", "eger->char char=? char? char<=? char>=? current-exception-handlers with-", "exception-handler raise raise-continuable error error-object? error-object-messa", "ge error-object-irritants error-object-type string? string make-string string-le", "ngth string-ref string-set! string-copy string-copy! string-fill! string-append ", "string-map string-for-each list->string string->list string=? string? ", "string<=? string>=? make-parameter with-dynamic-environment read make-dictionary", " dictionary? dictionary dictionary-has? dictionary-ref dictionary-set! dictionar", "y-delete! dictionary-size dictionary-map dictionary-for-each dictionary->alist a", "list->dictionary dictionary->plist plist->dictionary make-record record? record-", "type record-datum default-environment make-environment find-identifier set-ident", "ifier! eval compile add-macro! make-ephemeron-table write write-simple write-sha", "red display))) (.export-keywords.2560 (core#quote (find-library make-library cur", "rent-library)))))) (core#lambda (.keywords.2561) ((core#lambda (.env.2562 .expor", "ts.2563) (for-each (core#lambda (.keyword.2564) (dictionary-set! .exports.2563 .", "keyword.2564 .keyword.2564)) .keywords.2561)) (library-environment (core#quote (", "picrin base))) (library-exports (core#quote (picrin base)))))) (core#begin (core", "#set! eval ((core#lambda (.e.2565) (core#lambda (.expr.2566 . .lib.2567) ((core#", "lambda (.lib.2568) (.e.2565 .expr.2566 (library-environment .lib.2568))) (core#i", "f (null? .lib.2567) (current-library) (car .lib.2567))))) eval)) (core#begin (ma", "ke-library (core#quote (picrin user))) (current-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 }