From 82939650a4dcc1f765c7c3bc52f2bed9f9d1fbdd Mon Sep 17 00:00:00 2001 From: Yuichi Nishiwaki Date: Tue, 4 Apr 2017 03:55:23 +0900 Subject: [PATCH] add macro-objects and global-objects --- bin/picrin-bootstrap | Bin 773948 -> 778044 bytes lib/dict.c | 9 +- lib/ext/boot.c | 742 +++++++++++++++++++++---------------------- lib/ext/compile.c | 14 +- lib/state.c | 10 + piclib/boot.scm | 599 +++++++++++++++++----------------- piclib/library.scm | 502 ++++++++++++++--------------- 7 files changed, 920 insertions(+), 956 deletions(-) diff --git a/bin/picrin-bootstrap b/bin/picrin-bootstrap index 3252e5102d3f4d5be74a4fefe9ba8720e3186fd7..dc6de7e286b9f9f57db9df74f1ae1f1c9942055b 100755 GIT binary patch delta 108771 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 delta 107917 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

RY!vong>#Zg=_t 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 (core#lambda ._.2274 (error \"invalid use of a", -"uxiliary syntax\" (core#quote =>)))) (core#begin (.define-transformer.2228 (core#", -"quote unquote) (core#lambda ._.2275 (error \"invalid use of auxiliary syntax\" (co", -"re#quote unquote)))) (core#begin (.define-transformer.2228 (core#quote unquote-s", -"plicing) (core#lambda ._.2276 (error \"invalid use of auxiliary syntax\" (core#quo", -"te unquote-splicing)))) (core#begin (.define-transformer.2228 (core#quote let) (", -"core#lambda (.form.2277 .env.2278) (core#if (identifier? (cadr .form.2277)) ((co", -"re#lambda (.name.2279 .formal.2280 .body.2281) (cons (cons .the-lambda.2238 (con", -"s (core#quote ()) (cons (cons .the-define.2237 (cons (cons .name.2279 (map car .", -"formal.2280)) .body.2281)) (cons (cons .name.2279 (map cadr .formal.2280)) (core", -"#quote ()))))) (core#quote ()))) (car (cdr .form.2277)) (car (cdr (cdr .form.227", -"7))) (cdr (cdr (cdr .form.2277)))) ((core#lambda (.formal.2282 .body.2283) (cons", -" (cons .the-lambda.2238 (cons (map car .formal.2282) .body.2283)) (map cadr .for", -"mal.2282))) (car (cdr .form.2277)) (cdr (cdr .form.2277)))))) (core#begin (.defi", -"ne-transformer.2228 (core#quote and) (core#lambda (.form.2284 .env.2285) (core#i", -"f (null? (cdr .form.2284)) #t (core#if (null? (cddr .form.2284)) (cadr .form.228", -"4) (cons .the-if.2242 (cons (cadr .form.2284) (cons (cons (.the.2229 (core#quote", -" and)) (cddr .form.2284)) (cons (core#quote #f) (core#quote ()))))))))) (core#be", -"gin (.define-transformer.2228 (core#quote or) (core#lambda (.form.2286 .env.2287", -") (core#if (null? (cdr .form.2286)) #f ((core#lambda (.tmp.2288) (cons (.the.222", -"9 (core#quote let)) (cons (cons (cons .tmp.2288 (cons (cadr .form.2286) (core#qu", -"ote ()))) (core#quote ())) (cons (cons .the-if.2242 (cons .tmp.2288 (cons .tmp.2", -"288 (cons (cons (.the.2229 (core#quote or)) (cddr .form.2286)) (core#quote ())))", -")) (core#quote ()))))) (make-identifier (core#quote it) .env.2287))))) (core#beg", -"in (.define-transformer.2228 (core#quote cond) (core#lambda (.form.2289 .env.229", -"0) ((core#lambda (.clauses.2291) (core#if (null? .clauses.2291) #undefined ((cor", -"e#lambda (.clause.2292) (core#if (core#if (identifier? (car .clause.2292)) (iden", -"tifier=? (.the.2229 (core#quote else)) (make-identifier (car .clause.2292) .env.", -"2290)) #f) (cons .the-begin.2239 (cdr .clause.2292)) (core#if (null? (cdr .claus", -"e.2292)) (cons (.the.2229 (core#quote or)) (cons (car .clause.2292) (cons (cons ", -"(.the.2229 (core#quote cond)) (cdr .clauses.2291)) (core#quote ())))) (core#if (", -"core#if (identifier? (cadr .clause.2292)) (identifier=? (.the.2229 (core#quote =", -">)) (make-identifier (cadr .clause.2292) .env.2290)) #f) ((core#lambda (.tmp.229", -"3) (cons (.the.2229 (core#quote let)) (cons (cons (cons .tmp.2293 (cons (car .cl", -"ause.2292) (core#quote ()))) (core#quote ())) (cons (cons .the-if.2242 (cons .tm", -"p.2293 (cons (cons (cadr (cdr .clause.2292)) (cons .tmp.2293 (core#quote ()))) (", -"cons (cons (.the.2229 (core#quote cond)) (cddr .form.2289)) (core#quote ()))))) ", -"(core#quote ()))))) (make-identifier (core#quote tmp) .env.2290)) (cons .the-if.", -"2242 (cons (car .clause.2292) (cons (cons .the-begin.2239 (cdr .clause.2292)) (c", -"ons (cons (.the.2229 (core#quote cond)) (cdr .clauses.2291)) (core#quote ())))))", -")))) (car .clauses.2291)))) (cdr .form.2289)))) (core#begin (.define-transformer", -".2228 (core#quote quasiquote) (core#lambda (.form.2294 .env.2295) (core#begin (c", -"ore#define .quasiquote?.2296 (core#lambda (.form.2300) (core#if (pair? .form.230", -"0) (core#if (identifier? (car .form.2300)) (identifier=? (.the.2229 (core#quote ", -"quasiquote)) (make-identifier (car .form.2300) .env.2295)) #f) #f))) (core#begin", -" (core#define .unquote?.2297 (core#lambda (.form.2301) (core#if (pair? .form.230", -"1) (core#if (identifier? (car .form.2301)) (identifier=? (.the.2229 (core#quote ", -"unquote)) (make-identifier (car .form.2301) .env.2295)) #f) #f))) (core#begin (c", -"ore#define .unquote-splicing?.2298 (core#lambda (.form.2302) (core#if (pair? .fo", -"rm.2302) (core#if (pair? (car .form.2302)) (core#if (identifier? (caar .form.230", -"2)) (identifier=? (.the.2229 (core#quote unquote-splicing)) (make-identifier (ca", -"ar .form.2302) .env.2295)) #f) #f) #f))) (core#begin (core#define .qq.2299 (core", -"#lambda (.depth.2303 .expr.2304) (core#if (.unquote?.2297 .expr.2304) (core#if (", -"= .depth.2303 1) (cadr .expr.2304) (list (.the.2229 (core#quote list)) (list (.t", -"he.2229 (core#quote quote)) (.the.2229 (core#quote unquote))) (.qq.2299 (- .dept", -"h.2303 1) (car (cdr .expr.2304))))) (core#if (.unquote-splicing?.2298 .expr.2304", -") (core#if (= .depth.2303 1) (list (.the.2229 (core#quote append)) (car (cdr (ca", -"r .expr.2304))) (.qq.2299 .depth.2303 (cdr .expr.2304))) (list (.the.2229 (core#", -"quote cons)) (list (.the.2229 (core#quote list)) (list (.the.2229 (core#quote qu", -"ote)) (.the.2229 (core#quote unquote-splicing))) (.qq.2299 (- .depth.2303 1) (ca", -"r (cdr (car .expr.2304))))) (.qq.2299 .depth.2303 (cdr .expr.2304)))) (core#if (", -".quasiquote?.2296 .expr.2304) (list (.the.2229 (core#quote list)) (list (.the.22", -"29 (core#quote quote)) (.the.2229 (core#quote quasiquote))) (.qq.2299 (+ .depth.", -"2303 1) (car (cdr .expr.2304)))) (core#if (pair? .expr.2304) (list (.the.2229 (c", -"ore#quote cons)) (.qq.2299 .depth.2303 (car .expr.2304)) (.qq.2299 .depth.2303 (", -"cdr .expr.2304))) (core#if (vector? .expr.2304) (list (.the.2229 (core#quote lis", -"t->vector)) (.qq.2299 .depth.2303 (vector->list .expr.2304))) (list (.the.2229 (", -"core#quote quote)) .expr.2304)))))))) ((core#lambda (.x.2305) (.qq.2299 1 .x.230", -"5)) (cadr .form.2294)))))))) (core#begin (.define-transformer.2228 (core#quote l", -"et*) (core#lambda (.form.2306 .env.2307) ((core#lambda (.bindings.2308 .body.230", -"9) (core#if (null? .bindings.2308) (cons (.the.2229 (core#quote let)) (cons (cor", -"e#quote ()) .body.2309)) (cons (.the.2229 (core#quote let)) (cons (cons (cons (c", -"ar (car .bindings.2308)) (cdr (car .bindings.2308))) (core#quote ())) (cons (con", -"s (.the.2229 (core#quote let*)) (cons (cdr .bindings.2308) .body.2309)) (core#qu", -"ote ())))))) (car (cdr .form.2306)) (cdr (cdr .form.2306))))) (core#begin (.defi", -"ne-transformer.2228 (core#quote letrec) (core#lambda (.form.2310 .env.2311) (con", -"s (.the.2229 (core#quote letrec*)) (cdr .form.2310)))) (core#begin (.define-tran", -"sformer.2228 (core#quote letrec*) (core#lambda (.form.2312 .env.2313) ((core#lam", -"bda (.bindings.2314 .body.2315) ((core#lambda (.variables.2316 .initials.2317) (", -"cons (.the.2229 (core#quote let)) (cons .variables.2316 (append .initials.2317 (", -"append .body.2315 (core#quote ())))))) (map (core#lambda (.v.2318) (cons .v.2318", -" (cons (core#quote #undefined) (core#quote ())))) (map car .bindings.2314)) (map", -" (core#lambda (.v.2319) (cons (.the.2229 (core#quote set!)) (append .v.2319 (cor", -"e#quote ())))) .bindings.2314))) (car (cdr .form.2312)) (cdr (cdr .form.2312))))", -") (core#begin (.define-transformer.2228 (core#quote let-values) (core#lambda (.f", -"orm.2320 .env.2321) (cons (.the.2229 (core#quote let*-values)) (append (cdr .for", -"m.2320) (core#quote ()))))) (core#begin (.define-transformer.2228 (core#quote le", -"t*-values) (core#lambda (.form.2322 .env.2323) ((core#lambda (.formals.2324 .bod", -"y.2325) (core#if (null? .formals.2324) (cons (.the.2229 (core#quote let)) (cons ", -"(core#quote ()) (append .body.2325 (core#quote ())))) ((core#lambda (.formal.232", -"6) (cons (.the.2229 (core#quote call-with-values)) (cons (cons .the-lambda.2238 ", -"(cons (core#quote ()) (cdr .formal.2326))) (cons (cons (.the.2229 (core#quote la", -"mbda)) (cons (car .formal.2326) (cons (cons (.the.2229 (core#quote let*-values))", -" (cons (cdr .formals.2324) .body.2325)) (core#quote ())))) (core#quote ()))))) (", -"car .formals.2324)))) (cadr .form.2322) (cddr .form.2322)))) (core#begin (.defin", -"e-transformer.2228 (core#quote define-values) (core#lambda (.form.2327 .env.2328", -") ((core#lambda (.formal.2329 .body.2330) ((core#lambda (.arguments.2331) (cons ", -".the-begin.2239 (append ((core#lambda () (core#begin (core#define .loop.2332 (co", -"re#lambda (.formal.2333) (core#if (pair? .formal.2333) (cons (cons .the-define.2", -"237 (cons (car .formal.2333) (cons (core#quote #undefined) (core#quote ())))) (.", -"loop.2332 (cdr .formal.2333))) (core#if (identifier? .formal.2333) (cons (cons .", -"the-define.2237 (cons .formal.2333 (cons (core#quote #undefined) (core#quote ())", -"))) (core#quote ())) (core#quote ()))))) (.loop.2332 .formal.2329)))) (cons (con", -"s (.the.2229 (core#quote call-with-values)) (cons (cons .the-lambda.2238 (cons (", -"core#quote ()) (append .body.2330 (core#quote ())))) (cons (cons .the-lambda.223", -"8 (cons .arguments.2331 (append ((core#lambda () (core#begin (core#define .loop.", -"2334 (core#lambda (.formal.2335 .args.2336) (core#if (pair? .formal.2335) (cons ", -"(cons .the-set!.2241 (cons (car .formal.2335) (cons (cons (.the.2229 (core#quote", -" car)) (cons .args.2336 (core#quote ()))) (core#quote ())))) (.loop.2334 (cdr .f", -"ormal.2335) (cons (.the.2229 (core#quote cdr)) (cons .args.2336 (core#quote ()))", -"))) (core#if (identifier? .formal.2335) (cons (cons .the-set!.2241 (cons .formal", -".2335 (cons .args.2336 (core#quote ())))) (core#quote ())) (core#quote ()))))) (", -".loop.2334 .formal.2329 .arguments.2331)))) (core#quote ())))) (core#quote ())))", -") (core#quote ()))))) (make-identifier (core#quote arguments) .env.2328))) (cadr", -" .form.2327) (cddr .form.2327)))) (core#begin (.define-transformer.2228 (core#qu", -"ote do) (core#lambda (.form.2337 .env.2338) ((core#lambda (.bindings.2339 .test.", -"2340 .cleanup.2341 .body.2342) ((core#lambda (.loop.2343) (cons (.the.2229 (core", -"#quote let)) (cons .loop.2343 (cons (map (core#lambda (.x.2344) (cons (car .x.23", -"44) (cons (cadr .x.2344) (core#quote ())))) .bindings.2339) (cons (cons .the-if.", -"2242 (cons .test.2340 (cons (cons .the-begin.2239 .cleanup.2341) (cons (cons .th", -"e-begin.2239 (append .body.2342 (cons (cons .loop.2343 (map (core#lambda (.x.234", -"5) (core#if (null? (cdr (cdr .x.2345))) (car .x.2345) (car (cdr (cdr .x.2345))))", -") .bindings.2339)) (core#quote ())))) (core#quote ()))))) (core#quote ())))))) (", -"make-identifier (core#quote loop) .env.2338))) (car (cdr .form.2337)) (car (car ", -"(cdr (cdr .form.2337)))) (cdr (car (cdr (cdr .form.2337)))) (cdr (cdr (cdr .form", -".2337)))))) (core#begin (.define-transformer.2228 (core#quote when) (core#lambda", -" (.form.2346 .env.2347) ((core#lambda (.test.2348 .body.2349) (cons .the-if.2242", -" (cons .test.2348 (cons (cons .the-begin.2239 (append .body.2349 (core#quote ())", -")) (cons (core#quote #undefined) (core#quote ())))))) (car (cdr .form.2346)) (cd", -"r (cdr .form.2346))))) (core#begin (.define-transformer.2228 (core#quote unless)", -" (core#lambda (.form.2350 .env.2351) ((core#lambda (.test.2352 .body.2353) (cons", -" .the-if.2242 (cons .test.2352 (cons (core#quote #undefined) (cons (cons .the-be", -"gin.2239 (append .body.2353 (core#quote ()))) (core#quote ())))))) (car (cdr .fo", -"rm.2350)) (cdr (cdr .form.2350))))) (core#begin (.define-transformer.2228 (core#", -"quote case) (core#lambda (.form.2354 .env.2355) ((core#lambda (.key.2356 .clause", -"s.2357) ((core#lambda (.the-key.2358) (cons (.the.2229 (core#quote let)) (cons (", -"cons (cons .the-key.2358 (cons .key.2356 (core#quote ()))) (core#quote ())) (con", -"s ((core#lambda () (core#begin (core#define .loop.2359 (core#lambda (.clauses.23", -"60) (core#if (null? .clauses.2360) #undefined ((core#lambda (.clause.2361) (cons", -" .the-if.2242 (cons (core#if (core#if (identifier? (car .clause.2361)) (identifi", -"er=? (.the.2229 (core#quote else)) (make-identifier (car .clause.2361) .env.2355", -")) #f) #t (cons (.the.2229 (core#quote or)) (append (map (core#lambda (.x.2362) ", -"(cons (.the.2229 (core#quote eqv?)) (cons .the-key.2358 (cons (cons .the-quote.2", -"240 (cons .x.2362 (core#quote ()))) (core#quote ()))))) (car .clause.2361)) (cor", -"e#quote ())))) (cons (core#if (core#if (identifier? (cadr .clause.2361)) (identi", -"fier=? (.the.2229 (core#quote =>)) (make-identifier (cadr .clause.2361) .env.235", -"5)) #f) (cons (car (cdr (cdr .clause.2361))) (cons .the-key.2358 (core#quote ())", -")) (cons .the-begin.2239 (append (cdr .clause.2361) (core#quote ())))) (cons (.l", -"oop.2359 (cdr .clauses.2360)) (core#quote ())))))) (car .clauses.2360))))) (.loo", -"p.2359 .clauses.2357)))) (core#quote ()))))) (make-identifier (core#quote key) .", -"env.2355))) (car (cdr .form.2354)) (cdr (cdr .form.2354))))) (.define-transforme", -"r.2228 (core#quote parameterize) (core#lambda (.form.2363 .env.2364) ((core#lamb", -"da (.formal.2365 .body.2366) (cons (.the.2229 (core#quote with-dynamic-environme", -"nt)) (cons (cons (.the.2229 (core#quote list)) (append (map (core#lambda (.x.236", -"7) (cons (.the.2229 (core#quote cons)) (cons (car .x.2367) (cons (cadr .x.2367) ", -"(core#quote ()))))) .formal.2365) (core#quote ()))) (cons (cons .the-lambda.2238", -" (cons (core#quote ()) (append .body.2366 (core#quote ())))) (core#quote ())))))", -" (car (cdr .form.2363)) (cdr (cdr .form.2363))))))))))))))))))))))))))))))))))))", -")))))))))))))))", +"((core#lambda (.define-transformer.2228 .the.2229) ((core#lambda (.the-core-defi", +"ne.2230 .the-core-lambda.2231 .the-core-begin.2232 .the-core-quote.2233 .the-cor", +"e-set!.2234 .the-core-if.2235 .the-core-define-macro.2236 .the-define.2237 .the-", +"lambda.2238 .the-begin.2239 .the-quote.2240 .the-set!.2241 .the-if.2242 .the-def", +"ine-macro.2243) (core#begin (.define-transformer.2228 (core#quote quote) (core#l", +"ambda (.form.2248 .env.2249) (core#if (= (length .form.2248) 2) (cons .the-core-", +"quote.2233 (cons (cadr .form.2248) (core#quote ()))) (error \"malformed quote\" .f", +"orm.2248)))) (core#begin (.define-transformer.2228 (core#quote if) (core#lambda ", +"(.form.2250 .env.2251) ((core#lambda (.len.2252) (core#if (= .len.2252 3) (appen", +"d .form.2250 (cons (core#quote #undefined) (core#quote ()))) (core#if (= .len.22", +"52 4) (cons .the-core-if.2235 (cdr .form.2250)) (error \"malformed if\" .form.2250", +")))) (length .form.2250)))) (core#begin (.define-transformer.2228 (core#quote be", +"gin) (core#lambda (.form.2253 .env.2254) ((core#lambda (.len.2255) (core#if (= .", +"len.2255 1) #undefined (core#if (= .len.2255 2) (cadr .form.2253) (core#if (= .l", +"en.2255 3) (cons .the-core-begin.2232 (cdr .form.2253)) (cons .the-core-begin.22", +"32 (cons (cadr .form.2253) (cons (cons .the-begin.2239 (cddr .form.2253)) (core#", +"quote ())))))))) (length .form.2253)))) (core#begin (.define-transformer.2228 (c", +"ore#quote set!) (core#lambda (.form.2256 .env.2257) (core#if (core#if (= (length", +" .form.2256) 3) (identifier? (cadr .form.2256)) #f) (cons .the-core-set!.2234 (c", +"dr .form.2256)) (error \"malformed set!\" .form.2256)))) (core#begin (core#define ", +".check-formal.2244 (core#lambda (.formal.2258) ((core#lambda (.it.2259) (core#if", +" .it.2259 .it.2259 ((core#lambda (.it.2260) (core#if .it.2260 .it.2260 ((core#la", +"mbda (.it.2261) (core#if .it.2261 .it.2261 #f)) (core#if (pair? .formal.2258) (c", +"ore#if (identifier? (car .formal.2258)) (.check-formal.2244 (cdr .formal.2258)) ", +"#f) #f)))) (identifier? .formal.2258)))) (null? .formal.2258)))) (core#begin (.d", +"efine-transformer.2228 (core#quote lambda) (core#lambda (.form.2262 .env.2263) (", +"core#if (= (length .form.2262) 1) (error \"malformed lambda\" .form.2262) (core#if", +" (.check-formal.2244 (cadr .form.2262)) (cons .the-core-lambda.2231 (cons (cadr ", +".form.2262) (cons (cons .the-begin.2239 (cddr .form.2262)) (core#quote ())))) (e", +"rror \"malformed lambda\" .form.2262))))) (core#begin (.define-transformer.2228 (c", +"ore#quote define) (core#lambda (.form.2264 .env.2265) ((core#lambda (.len.2266) ", +"(core#if (= .len.2266 1) (error \"malformed define\" .form.2264) ((core#lambda (.f", +"ormal.2267) (core#if (identifier? .formal.2267) (core#if (= .len.2266 3) (cons .", +"the-core-define.2230 (cdr .form.2264)) (error \"malformed define\" .form.2264)) (c", +"ore#if (pair? .formal.2267) (cons .the-define.2237 (cons (car .formal.2267) (con", +"s (cons .the-lambda.2238 (cons (cdr .formal.2267) (cddr .form.2264))) (core#quot", +"e ())))) (error \"define: binding to non-varaible object\" .form.2264)))) (cadr .f", +"orm.2264)))) (length .form.2264)))) (core#begin (.define-transformer.2228 (core#", +"quote define-macro) (core#lambda (.form.2268 .env.2269) (core#if (= (length .for", +"m.2268) 3) (core#if (identifier? (cadr .form.2268)) (cons .the-core-define-macro", +".2236 (cdr .form.2268)) (error \"define-macro: binding to non-variable object\" .f", +"orm.2268)) (error \"malformed define-macro\" .form.2268)))) (core#begin #undefined", +" (core#begin (.define-transformer.2228 (core#quote else) (core#lambda ._.2270 (e", +"rror \"invalid use of auxiliary syntax\" (core#quote else)))) (core#begin (.define", +"-transformer.2228 (core#quote =>) (core#lambda ._.2271 (error \"invalid use of au", +"xiliary syntax\" (core#quote =>)))) (core#begin (.define-transformer.2228 (core#q", +"uote unquote) (core#lambda ._.2272 (error \"invalid use of auxiliary syntax\" (cor", +"e#quote unquote)))) (core#begin (.define-transformer.2228 (core#quote unquote-sp", +"licing) (core#lambda ._.2273 (error \"invalid use of auxiliary syntax\" (core#quot", +"e unquote-splicing)))) (core#begin (.define-transformer.2228 (core#quote let) (c", +"ore#lambda (.form.2274 .env.2275) (core#if (identifier? (cadr .form.2274)) ((cor", +"e#lambda (.name.2276 .formal.2277 .body.2278) (cons (cons .the-lambda.2238 (cons", +" (core#quote ()) (cons (cons .the-define.2237 (cons (cons .name.2276 (map car .f", +"ormal.2277)) .body.2278)) (cons (cons .name.2276 (map cadr .formal.2277)) (core#", +"quote ()))))) (core#quote ()))) (car (cdr .form.2274)) (car (cdr (cdr .form.2274", +"))) (cdr (cdr (cdr .form.2274)))) ((core#lambda (.formal.2279 .body.2280) (cons ", +"(cons .the-lambda.2238 (cons (map car .formal.2279) .body.2280)) (map cadr .form", +"al.2279))) (car (cdr .form.2274)) (cdr (cdr .form.2274)))))) (core#begin (.defin", +"e-transformer.2228 (core#quote and) (core#lambda (.form.2281 .env.2282) (core#if", +" (null? (cdr .form.2281)) #t (core#if (null? (cddr .form.2281)) (cadr .form.2281", +") (cons .the-if.2242 (cons (cadr .form.2281) (cons (cons (.the.2229 (core#quote ", +"and)) (cddr .form.2281)) (cons (core#quote #f) (core#quote ()))))))))) (core#beg", +"in (.define-transformer.2228 (core#quote or) (core#lambda (.form.2283 .env.2284)", +" (core#if (null? (cdr .form.2283)) #f ((core#lambda (.tmp.2285) (cons (.the.2229", +" (core#quote let)) (cons (cons (cons .tmp.2285 (cons (cadr .form.2283) (core#quo", +"te ()))) (core#quote ())) (cons (cons .the-if.2242 (cons .tmp.2285 (cons .tmp.22", +"85 (cons (cons (.the.2229 (core#quote or)) (cddr .form.2283)) (core#quote ()))))", +") (core#quote ()))))) (make-identifier (core#quote it) .env.2284))))) (core#begi", +"n (.define-transformer.2228 (core#quote cond) (core#lambda (.form.2286 .env.2287", +") ((core#lambda (.clauses.2288) (core#if (null? .clauses.2288) #undefined ((core", +"#lambda (.clause.2289) (core#if (core#if (identifier? (car .clause.2289)) (ident", +"ifier=? (.the.2229 (core#quote else)) (make-identifier (car .clause.2289) .env.2", +"287)) #f) (cons .the-begin.2239 (cdr .clause.2289)) (core#if (null? (cdr .clause", +".2289)) (cons (.the.2229 (core#quote or)) (cons (car .clause.2289) (cons (cons (", +".the.2229 (core#quote cond)) (cdr .clauses.2288)) (core#quote ())))) (core#if (c", +"ore#if (identifier? (cadr .clause.2289)) (identifier=? (.the.2229 (core#quote =>", +")) (make-identifier (cadr .clause.2289) .env.2287)) #f) ((core#lambda (.tmp.2290", +") (cons (.the.2229 (core#quote let)) (cons (cons (cons .tmp.2290 (cons (car .cla", +"use.2289) (core#quote ()))) (core#quote ())) (cons (cons .the-if.2242 (cons .tmp", +".2290 (cons (cons (cadr (cdr .clause.2289)) (cons .tmp.2290 (core#quote ()))) (c", +"ons (cons (.the.2229 (core#quote cond)) (cddr .form.2286)) (core#quote ()))))) (", +"core#quote ()))))) (make-identifier (core#quote tmp) .env.2287)) (cons .the-if.2", +"242 (cons (car .clause.2289) (cons (cons .the-begin.2239 (cdr .clause.2289)) (co", +"ns (cons (.the.2229 (core#quote cond)) (cdr .clauses.2288)) (core#quote ()))))))", +"))) (car .clauses.2288)))) (cdr .form.2286)))) (core#begin (.define-transformer.", +"2228 (core#quote quasiquote) (core#lambda (.form.2291 .env.2292) (core#begin (co", +"re#define .quasiquote?.2293 (core#lambda (.form.2297) (core#if (pair? .form.2297", +") (core#if (identifier? (car .form.2297)) (identifier=? (.the.2229 (core#quote q", +"uasiquote)) (make-identifier (car .form.2297) .env.2292)) #f) #f))) (core#begin ", +"(core#define .unquote?.2294 (core#lambda (.form.2298) (core#if (pair? .form.2298", +") (core#if (identifier? (car .form.2298)) (identifier=? (.the.2229 (core#quote u", +"nquote)) (make-identifier (car .form.2298) .env.2292)) #f) #f))) (core#begin (co", +"re#define .unquote-splicing?.2295 (core#lambda (.form.2299) (core#if (pair? .for", +"m.2299) (core#if (pair? (car .form.2299)) (core#if (identifier? (caar .form.2299", +")) (identifier=? (.the.2229 (core#quote unquote-splicing)) (make-identifier (caa", +"r .form.2299) .env.2292)) #f) #f) #f))) (core#begin (core#define .qq.2296 (core#", +"lambda (.depth.2300 .expr.2301) (core#if (.unquote?.2294 .expr.2301) (core#if (=", +" .depth.2300 1) (cadr .expr.2301) (list (.the.2229 (core#quote list)) (list (.th", +"e.2229 (core#quote quote)) (.the.2229 (core#quote unquote))) (.qq.2296 (- .depth", +".2300 1) (car (cdr .expr.2301))))) (core#if (.unquote-splicing?.2295 .expr.2301)", +" (core#if (= .depth.2300 1) (list (.the.2229 (core#quote append)) (car (cdr (car", +" .expr.2301))) (.qq.2296 .depth.2300 (cdr .expr.2301))) (list (.the.2229 (core#q", +"uote cons)) (list (.the.2229 (core#quote list)) (list (.the.2229 (core#quote quo", +"te)) (.the.2229 (core#quote unquote-splicing))) (.qq.2296 (- .depth.2300 1) (car", +" (cdr (car .expr.2301))))) (.qq.2296 .depth.2300 (cdr .expr.2301)))) (core#if (.", +"quasiquote?.2293 .expr.2301) (list (.the.2229 (core#quote list)) (list (.the.222", +"9 (core#quote quote)) (.the.2229 (core#quote quasiquote))) (.qq.2296 (+ .depth.2", +"300 1) (car (cdr .expr.2301)))) (core#if (pair? .expr.2301) (list (.the.2229 (co", +"re#quote cons)) (.qq.2296 .depth.2300 (car .expr.2301)) (.qq.2296 .depth.2300 (c", +"dr .expr.2301))) (core#if (vector? .expr.2301) (list (.the.2229 (core#quote list", +"->vector)) (.qq.2296 .depth.2300 (vector->list .expr.2301))) (list (.the.2229 (c", +"ore#quote quote)) .expr.2301)))))))) ((core#lambda (.x.2302) (.qq.2296 1 .x.2302", +")) (cadr .form.2291)))))))) (core#begin (.define-transformer.2228 (core#quote le", +"t*) (core#lambda (.form.2303 .env.2304) ((core#lambda (.bindings.2305 .body.2306", +") (core#if (null? .bindings.2305) (cons (.the.2229 (core#quote let)) (cons (core", +"#quote ()) .body.2306)) (cons (.the.2229 (core#quote let)) (cons (cons (cons (ca", +"r (car .bindings.2305)) (cdr (car .bindings.2305))) (core#quote ())) (cons (cons", +" (.the.2229 (core#quote let*)) (cons (cdr .bindings.2305) .body.2306)) (core#quo", +"te ())))))) (car (cdr .form.2303)) (cdr (cdr .form.2303))))) (core#begin (.defin", +"e-transformer.2228 (core#quote letrec) (core#lambda (.form.2307 .env.2308) (cons", +" (.the.2229 (core#quote letrec*)) (cdr .form.2307)))) (core#begin (.define-trans", +"former.2228 (core#quote letrec*) (core#lambda (.form.2309 .env.2310) ((core#lamb", +"da (.bindings.2311 .body.2312) ((core#lambda (.variables.2313 .initials.2314) (c", +"ons (.the.2229 (core#quote let)) (cons .variables.2313 (append .initials.2314 (a", +"ppend .body.2312 (core#quote ())))))) (map (core#lambda (.v.2315) (cons .v.2315 ", +"(cons (core#quote #undefined) (core#quote ())))) (map car .bindings.2311)) (map ", +"(core#lambda (.v.2316) (cons (.the.2229 (core#quote set!)) (append .v.2316 (core", +"#quote ())))) .bindings.2311))) (car (cdr .form.2309)) (cdr (cdr .form.2309)))))", +" (core#begin (.define-transformer.2228 (core#quote let-values) (core#lambda (.fo", +"rm.2317 .env.2318) (cons (.the.2229 (core#quote let*-values)) (append (cdr .form", +".2317) (core#quote ()))))) (core#begin (.define-transformer.2228 (core#quote let", +"*-values) (core#lambda (.form.2319 .env.2320) ((core#lambda (.formals.2321 .body", +".2322) (core#if (null? .formals.2321) (cons (.the.2229 (core#quote let)) (cons (", +"core#quote ()) (append .body.2322 (core#quote ())))) ((core#lambda (.formal.2323", +") (cons (.the.2229 (core#quote call-with-values)) (cons (cons .the-lambda.2238 (", +"cons (core#quote ()) (cdr .formal.2323))) (cons (cons (.the.2229 (core#quote lam", +"bda)) (cons (car .formal.2323) (cons (cons (.the.2229 (core#quote let*-values)) ", +"(cons (cdr .formals.2321) .body.2322)) (core#quote ())))) (core#quote ()))))) (c", +"ar .formals.2321)))) (cadr .form.2319) (cddr .form.2319)))) (core#begin (.define", +"-transformer.2228 (core#quote define-values) (core#lambda (.form.2324 .env.2325)", +" ((core#lambda (.formal.2326 .body.2327) ((core#lambda (.tmps.2328) (cons .the-b", +"egin.2239 (append ((core#lambda () (core#begin (core#define .loop.2329 (core#lam", +"bda (.formal.2330) (core#if (identifier? .formal.2330) (cons (cons .the-define.2", +"237 (cons .formal.2330 (cons (core#quote #undefined) (core#quote ())))) (core#qu", +"ote ())) (core#if (pair? .formal.2330) (cons (cons .the-define.2237 (cons (car .", +"formal.2330) (cons (core#quote #undefined) (core#quote ())))) (.loop.2329 (cdr .", +"formal.2330))) (core#quote ()))))) (.loop.2329 .formal.2326)))) (cons (cons (.th", +"e.2229 (core#quote call-with-values)) (cons (cons .the-lambda.2238 (cons (core#q", +"uote ()) .body.2327)) (cons (cons .the-lambda.2238 (cons .tmps.2328 ((core#lambd", +"a () (core#begin (core#define .loop.2331 (core#lambda (.formal.2332 .tmps.2333) ", +"(core#if (identifier? .formal.2332) (cons (cons .the-set!.2241 (cons .formal.233", +"2 (cons .tmps.2333 (core#quote ())))) (core#quote ())) (core#if (pair? .formal.2", +"332) (cons (cons .the-set!.2241 (cons (car .formal.2332) (cons (car .tmps.2333) ", +"(core#quote ())))) (.loop.2331 (cdr .formal.2332) (cdr .tmps.2333))) (core#quote", +" ()))))) (.loop.2331 .formal.2326 .tmps.2328)))))) (core#quote ())))) (core#quot", +"e ()))))) ((core#lambda () (core#begin (core#define .loop.2334 (core#lambda (.fo", +"rmal.2335) (core#if (identifier? .formal.2335) (make-identifier .formal.2335 .en", +"v.2325) (core#if (pair? .formal.2335) (cons (make-identifier (car .formal.2335) ", +".env.2325) (.loop.2334 (cdr .formal.2335))) (core#quote ()))))) (.loop.2334 .for", +"mal.2326)))))) (cadr .form.2324) (cddr .form.2324)))) (core#begin (.define-trans", +"former.2228 (core#quote do) (core#lambda (.form.2336 .env.2337) ((core#lambda (.", +"bindings.2338 .test.2339 .cleanup.2340 .body.2341) ((core#lambda (.loop.2342) (c", +"ons (.the.2229 (core#quote let)) (cons .loop.2342 (cons (map (core#lambda (.x.23", +"43) (cons (car .x.2343) (cons (cadr .x.2343) (core#quote ())))) .bindings.2338) ", +"(cons (cons .the-if.2242 (cons .test.2339 (cons (cons .the-begin.2239 .cleanup.2", +"340) (cons (cons .the-begin.2239 (append .body.2341 (cons (cons .loop.2342 (map ", +"(core#lambda (.x.2344) (core#if (null? (cdr (cdr .x.2344))) (car .x.2344) (car (", +"cdr (cdr .x.2344))))) .bindings.2338)) (core#quote ())))) (core#quote ()))))) (c", +"ore#quote ())))))) (make-identifier (core#quote loop) .env.2337))) (car (cdr .fo", +"rm.2336)) (car (car (cdr (cdr .form.2336)))) (cdr (car (cdr (cdr .form.2336)))) ", +"(cdr (cdr (cdr .form.2336)))))) (core#begin (.define-transformer.2228 (core#quot", +"e when) (core#lambda (.form.2345 .env.2346) ((core#lambda (.test.2347 .body.2348", +") (cons .the-if.2242 (cons .test.2347 (cons (cons .the-begin.2239 (append .body.", +"2348 (core#quote ()))) (cons (core#quote #undefined) (core#quote ())))))) (car (", +"cdr .form.2345)) (cdr (cdr .form.2345))))) (core#begin (.define-transformer.2228", +" (core#quote unless) (core#lambda (.form.2349 .env.2350) ((core#lambda (.test.23", +"51 .body.2352) (cons .the-if.2242 (cons .test.2351 (cons (core#quote #undefined)", +" (cons (cons .the-begin.2239 (append .body.2352 (core#quote ()))) (core#quote ()", +")))))) (car (cdr .form.2349)) (cdr (cdr .form.2349))))) (core#begin (.define-tra", +"nsformer.2228 (core#quote case) (core#lambda (.form.2353 .env.2354) ((core#lambd", +"a (.key.2355 .clauses.2356) ((core#lambda (.the-key.2357) (cons (.the.2229 (core", +"#quote let)) (cons (cons (cons .the-key.2357 (cons .key.2355 (core#quote ()))) (", +"core#quote ())) (cons ((core#lambda () (core#begin (core#define .loop.2358 (core", +"#lambda (.clauses.2359) (core#if (null? .clauses.2359) #undefined ((core#lambda ", +"(.clause.2360) (cons .the-if.2242 (cons (core#if (core#if (identifier? (car .cla", +"use.2360)) (identifier=? (.the.2229 (core#quote else)) (make-identifier (car .cl", +"ause.2360) .env.2354)) #f) #t (cons (.the.2229 (core#quote or)) (append (map (co", +"re#lambda (.x.2361) (cons (.the.2229 (core#quote eqv?)) (cons .the-key.2357 (con", +"s (cons .the-quote.2240 (cons .x.2361 (core#quote ()))) (core#quote ()))))) (car", +" .clause.2360)) (core#quote ())))) (cons (core#if (core#if (identifier? (cadr .c", +"lause.2360)) (identifier=? (.the.2229 (core#quote =>)) (make-identifier (cadr .c", +"lause.2360) .env.2354)) #f) (cons (car (cdr (cdr .clause.2360))) (cons .the-key.", +"2357 (core#quote ()))) (cons .the-begin.2239 (append (cdr .clause.2360) (core#qu", +"ote ())))) (cons (.loop.2358 (cdr .clauses.2359)) (core#quote ())))))) (car .cla", +"uses.2359))))) (.loop.2358 .clauses.2356)))) (core#quote ()))))) (make-identifie", +"r (core#quote key) .env.2354))) (car (cdr .form.2353)) (cdr (cdr .form.2353)))))", +" (.define-transformer.2228 (core#quote parameterize) (core#lambda (.form.2362 .e", +"nv.2363) ((core#lambda (.formal.2364 .body.2365) (cons (.the.2229 (core#quote wi", +"th-dynamic-environment)) (cons (cons (.the.2229 (core#quote list)) (append (map ", +"(core#lambda (.x.2366) (cons (.the.2229 (core#quote cons)) (cons (car .x.2366) (", +"cons (cadr .x.2366) (core#quote ()))))) .formal.2364) (core#quote ()))) (cons (c", +"ons .the-lambda.2238 (cons (core#quote ()) (append .body.2365 (core#quote ()))))", +" (core#quote ()))))) (car (cdr .form.2362)) (cdr (cdr .form.2362))))))))))))))))", +")))))))))))))))))) (.the.2229 (core#quote core#define)) (.the.2229 (core#quote c", +"ore#lambda)) (.the.2229 (core#quote core#begin)) (.the.2229 (core#quote core#quo", +"te)) (.the.2229 (core#quote core#set!)) (.the.2229 (core#quote core#if)) (.the.2", +"229 (core#quote core#define-macro)) (.the.2229 (core#quote define)) (.the.2229 (", +"core#quote lambda)) (.the.2229 (core#quote begin)) (.the.2229 (core#quote quote)", +") (.the.2229 (core#quote set!)) (.the.2229 (core#quote if)) (.the.2229 (core#quo", +"te define-macro)))) (core#lambda (.name.2367 .transformer.2368) (dictionary-set!", +" (macro-objects) .name.2367 .transformer.2368)) (core#lambda (.var.2369) (make-i", +"dentifier .var.2369 default-environment)))", }; #if PIC_USE_LIBRARY static const char boot_library_rom[][80] = { -"(core#begin (core#define mangle (core#lambda (.name.2368) (core#begin (core#if (", -"null? .name.2368) (error \"library name should be a list of at least one symbols\"", -" .name.2368) #undefined) (core#begin (core#define .->string.2369 (core#lambda (.", -"n.2371) (core#if (symbol? .n.2371) ((core#lambda (.str.2372) (core#begin (string", -"-for-each (core#lambda (.c.2373) (core#if ((core#lambda (.it.2374) (core#if .it.", -"2374 .it.2374 ((core#lambda (.it.2375) (core#if .it.2375 .it.2375 #f)) (char=? .", -"c.2373 #\\:)))) (char=? .c.2373 #\\.)) (error \"elements of library name may not co", -"ntain '.' or ':'\" .n.2371) #undefined)) .str.2372) .str.2372)) (symbol->string .", -"n.2371)) (core#if (core#if (number? .n.2371) (core#if (exact? .n.2371) (<= 0 .n.", -"2371) #f) #f) (number->string .n.2371) (error \"symbol or non-negative integer is", -" required\" .n.2371))))) (core#begin (core#define .join.2370 (core#lambda (.strs.", -"2376 .delim.2377) ((core#lambda () (core#begin (core#define .loop.2378 (core#lam", -"bda (.res.2379 .strs.2380) (core#if (null? .strs.2380) .res.2379 (.loop.2378 (st", -"ring-append .res.2379 .delim.2377 (car .strs.2380)) (cdr .strs.2380))))) (.loop.", -"2378 (car .strs.2376) (cdr .strs.2376))))))) (core#if (symbol? .name.2368) .name", -".2368 (string->symbol (.join.2370 (map .->string.2369 .name.2368) \".\")))))))) (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.2381) (dictionary-has? *libraries* ", -"(mangle .name.2381)))) (core#begin (core#define make-library (core#lambda (.name", -".2382) ((core#lambda (.name.2383) ((core#lambda (.env.2384 .exports.2385) (core#", -"begin (set-identifier! (core#quote define-library) (core#quote define-library) .", -"env.2384) (core#begin (set-identifier! (core#quote import) (core#quote import) .", -"env.2384) (core#begin (set-identifier! (core#quote export) (core#quote export) .", -"env.2384) (core#begin (set-identifier! (core#quote cond-expand) (core#quote cond", -"-expand) .env.2384) (dictionary-set! *libraries* .name.2383 (cons .env.2384 .exp", -"orts.2385))))))) (make-environment (string->symbol (string-append (symbol->strin", -"g .name.2383) \":\"))) (make-dictionary))) (mangle .name.2382)))) (core#begin (cor", -"e#define library-environment (core#lambda (.name.2386) (car (dictionary-ref *lib", -"raries* (mangle .name.2386))))) (core#begin (core#define library-exports (core#l", -"ambda (.name.2387) (cdr (dictionary-ref *libraries* (mangle .name.2387))))) (cor", -"e#begin (core#define library-import (core#lambda (.name.2388 .sym.2389 .alias.23", -"90) ((core#lambda (.uid.2391) ((core#lambda (.env.2392) (set-identifier! .alias.", -"2390 .uid.2391 .env.2392)) (library-environment (current-library)))) (dictionary", -"-ref (library-exports .name.2388) .sym.2389)))) (core#begin (core#define library", -"-export (core#lambda (.sym.2393 .alias.2394) ((core#lambda (.env.2395 .exports.2", -"396) (dictionary-set! .exports.2396 .alias.2394 (find-identifier .sym.2393 .env.", -"2395))) (library-environment (current-library)) (library-exports (current-librar", -"y))))) (core#begin ((core#lambda (.define-transformer.2397) (core#begin (.define", -"-transformer.2397 (core#quote define-library) (core#lambda (.form.2398 ._.2399) ", -"((core#lambda (.name.2400 .body.2401) (core#begin ((core#lambda (.it.2402) (core", -"#if .it.2402 .it.2402 ((core#lambda (.it.2403) (core#if .it.2403 .it.2403 #f)) (", -"make-library .name.2400)))) (find-library .name.2400)) (with-dynamic-environment", -" (list (cons current-library .name.2400)) (core#lambda () (for-each (core#lambda", -" (.expr.2404) (eval .expr.2404 .name.2400)) .body.2401))))) (cadr .form.2398) (c", -"ddr .form.2398)))) (core#begin (.define-transformer.2397 (core#quote cond-expand", -") (core#lambda (.form.2405 ._.2406) ((core#lambda (.test.2407) (core#begin (core", -"#set! .test.2407 (core#lambda (.form.2408) ((core#lambda (.it.2409) (core#if .it", -".2409 .it.2409 ((core#lambda (.it.2410) (core#if .it.2410 .it.2410 ((core#lambda", -" (.it.2411) (core#if .it.2411 .it.2411 #f)) (core#if (pair? .form.2408) ((core#l", -"ambda (.key.2412) (core#if ((core#lambda (.it.2413) (core#if .it.2413 .it.2413 #", -"f)) (eqv? .key.2412 (core#quote library))) (find-library (cadr .form.2408)) (cor", -"e#if ((core#lambda (.it.2414) (core#if .it.2414 .it.2414 #f)) (eqv? .key.2412 (c", -"ore#quote not))) (not (.test.2407 (cadr .form.2408))) (core#if ((core#lambda (.i", -"t.2415) (core#if .it.2415 .it.2415 #f)) (eqv? .key.2412 (core#quote and))) ((cor", -"e#lambda () (core#begin (core#define .loop.2416 (core#lambda (.form.2417) ((core", -"#lambda (.it.2418) (core#if .it.2418 .it.2418 ((core#lambda (.it.2419) (core#if ", -".it.2419 .it.2419 #f)) (core#if (.test.2407 (car .form.2417)) (.loop.2416 (cdr .", -"form.2417)) #f)))) (null? .form.2417)))) (.loop.2416 (cdr .form.2408))))) (core#", -"if ((core#lambda (.it.2420) (core#if .it.2420 .it.2420 #f)) (eqv? .key.2412 (cor", -"e#quote or))) ((core#lambda () (core#begin (core#define .loop.2421 (core#lambda ", -"(.form.2422) (core#if (pair? .form.2422) ((core#lambda (.it.2423) (core#if .it.2", -"423 .it.2423 ((core#lambda (.it.2424) (core#if .it.2424 .it.2424 #f)) (.loop.242", -"1 (cdr .form.2422))))) (.test.2407 (car .form.2422))) #f))) (.loop.2421 (cdr .fo", -"rm.2408))))) (core#if #t #f #undefined)))))) (car .form.2408)) #f)))) (core#if (", -"symbol? .form.2408) (memq .form.2408 (features)) #f)))) (eq? .form.2408 (core#qu", -"ote else))))) ((core#lambda () (core#begin (core#define .loop.2425 (core#lambda ", -"(.clauses.2426) (core#if (null? .clauses.2426) #undefined (core#if (.test.2407 (", -"caar .clauses.2426)) (cons (make-identifier (core#quote begin) default-environme", -"nt) (append (cdar .clauses.2426) (core#quote ()))) (.loop.2425 (cdr .clauses.242", -"6)))))) (.loop.2425 (cdr .form.2405))))))) #undefined))) (core#begin (.define-tr", -"ansformer.2397 (core#quote import) (core#lambda (.form.2427 ._.2428) ((core#lamb", -"da (.caddr.2429 .prefix.2430 .getlib.2431) ((core#lambda (.extract.2432 .collect", -".2433) (core#begin (core#set! .extract.2432 (core#lambda (.spec.2434) ((core#lam", -"bda (.key.2435) (core#if ((core#lambda (.it.2436) (core#if .it.2436 .it.2436 ((c", -"ore#lambda (.it.2437) (core#if .it.2437 .it.2437 ((core#lambda (.it.2438) (core#", -"if .it.2438 .it.2438 ((core#lambda (.it.2439) (core#if .it.2439 .it.2439 #f)) (e", -"qv? .key.2435 (core#quote except))))) (eqv? .key.2435 (core#quote prefix))))) (e", -"qv? .key.2435 (core#quote rename))))) (eqv? .key.2435 (core#quote only))) (.extr", -"act.2432 (cadr .spec.2434)) (core#if #t (.getlib.2431 .spec.2434) #undefined))) ", -"(car .spec.2434)))) (core#begin (core#set! .collect.2433 (core#lambda (.spec.244", -"0) ((core#lambda (.key.2441) (core#if ((core#lambda (.it.2442) (core#if .it.2442", -" .it.2442 #f)) (eqv? .key.2441 (core#quote only))) ((core#lambda (.alist.2443) (", -"map (core#lambda (.var.2444) (assq .var.2444 .alist.2443)) (cddr .spec.2440))) (", -".collect.2433 (cadr .spec.2440))) (core#if ((core#lambda (.it.2445) (core#if .it", -".2445 .it.2445 #f)) (eqv? .key.2441 (core#quote rename))) ((core#lambda (.alist.", -"2446 .renames.2447) (map (core#lambda (.s.2448) ((core#lambda (.it.2449) (core#i", -"f .it.2449 .it.2449 ((core#lambda (.it.2450) (core#if .it.2450 .it.2450 #f)) .s.", -"2448))) (assq (car .s.2448) .renames.2447))) .alist.2446)) (.collect.2433 (cadr ", -".spec.2440)) (map (core#lambda (.x.2451) (cons (car .x.2451) (cadr .x.2451))) (c", -"ddr .spec.2440))) (core#if ((core#lambda (.it.2452) (core#if .it.2452 .it.2452 #", -"f)) (eqv? .key.2441 (core#quote prefix))) ((core#lambda (.alist.2453) (map (core", -"#lambda (.s.2454) (cons (.prefix.2430 (.caddr.2429 .spec.2440) (car .s.2454)) (c", -"dr .s.2454))) .alist.2453)) (.collect.2433 (cadr .spec.2440))) (core#if ((core#l", -"ambda (.it.2455) (core#if .it.2455 .it.2455 #f)) (eqv? .key.2441 (core#quote exc", -"ept))) ((core#lambda (.alist.2456) ((core#lambda () (core#begin (core#define .lo", -"op.2457 (core#lambda (.alist.2458) (core#if (null? .alist.2458) (core#quote ()) ", -"(core#if (memq (caar .alist.2458) (cddr .spec.2440)) (.loop.2457 (cdr .alist.245", -"8)) (cons (car .alist.2458) (.loop.2457 (cdr .alist.2458))))))) (.loop.2457 .ali", -"st.2456))))) (.collect.2433 (cadr .spec.2440))) (core#if #t (dictionary-map (cor", -"e#lambda (.x.2459) (cons .x.2459 .x.2459)) (library-exports (.getlib.2431 .spec.", -"2440))) #undefined)))))) (car .spec.2440)))) ((core#lambda (.import.2460) (core#", -"begin (core#set! .import.2460 (core#lambda (.spec.2461) ((core#lambda (.lib.2462", -" .alist.2463) (for-each (core#lambda (.slot.2464) (library-import .lib.2462 (cdr", -" .slot.2464) (car .slot.2464))) .alist.2463)) (.extract.2432 .spec.2461) (.colle", -"ct.2433 .spec.2461)))) (for-each .import.2460 (cdr .form.2427)))) #undefined))))", -" #undefined #undefined)) (core#lambda (.x.2465) (car (cdr (cdr .x.2465)))) (core", -"#lambda (.prefix.2466 .symbol.2467) (string->symbol (string-append (symbol->stri", -"ng .prefix.2466) (symbol->string .symbol.2467)))) (core#lambda (.name.2468) (cor", -"e#if (find-library .name.2468) .name.2468 (error \"library not found\" .name.2468)", -"))))) (.define-transformer.2397 (core#quote export) (core#lambda (.form.2469 ._.", -"2470) ((core#lambda (.collect.2471 .export.2472) (core#begin (core#set! .collect", -".2471 (core#lambda (.spec.2473) (core#if (symbol? .spec.2473) (cons .spec.2473 .", -"spec.2473) (core#if (core#if (list? .spec.2473) (core#if (= (length .spec.2473) ", -"3) (eq? (car .spec.2473) (core#quote rename)) #f) #f) (cons (list-ref .spec.2473", -" 1) (list-ref .spec.2473 2)) (error \"malformed export\"))))) (core#begin (core#se", -"t! .export.2472 (core#lambda (.spec.2474) ((core#lambda (.slot.2475) (library-ex", -"port (car .slot.2475) (cdr .slot.2475))) (.collect.2471 .spec.2474)))) (for-each", -" .export.2472 (cdr .form.2469))))) #undefined #undefined))))))) (core#lambda (.n", -"ame.2476 .macro.2477) (add-macro! .name.2476 .macro.2477))) ((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.2478) (core#begin (.export-keywords.2", -"478 (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.2478 (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<=? 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>=? 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.2478 (cor", -"e#quote (find-library make-library current-library)))))) (core#lambda (.keywords", -".2479) ((core#lambda (.env.2480 .exports.2481) (for-each (core#lambda (.keyword.", -"2482) (dictionary-set! .exports.2481 .keyword.2482 .keyword.2482)) .keywords.247", -"9)) (library-environment (core#quote (picrin base))) (library-exports (core#quot", -"e (picrin base)))))) (core#begin (core#set! eval ((core#lambda (.e.2483) (core#l", -"ambda (.expr.2484 . .lib.2485) ((core#lambda (.lib.2486) (.e.2483 .expr.2484 (li", -"brary-environment .lib.2486))) (core#if (null? .lib.2485) (current-library) (car", -" .lib.2485))))) eval)) (core#begin (make-library (core#quote (picrin user))) (cu", -"rrent-library (core#quote (picrin user))))))))))))))))))))", +"(core#begin (core#define current-library #undefined) (core#begin (core#define fi", +"nd-library #undefined) (core#begin (core#define make-library #undefined) (core#b", +"egin (core#define library-environment #undefined) (core#begin (core#define libra", +"ry-exports #undefined) (core#begin (core#define library-import #undefined) (core", +"#begin (core#define library-export #undefined) (call-with-values (core#lambda ()", +" ((core#lambda () (core#begin (core#define .mangle.2370 (core#lambda (.name.2379", +") (core#begin (core#if (null? .name.2379) (error \"library name should be a list ", +"of at least one symbols\" .name.2379) #undefined) (core#begin (core#define .->str", +"ing.2380 (core#lambda (.n.2382) (core#if (symbol? .n.2382) ((core#lambda (.str.2", +"383) (core#begin (string-for-each (core#lambda (.c.2384) (core#if ((core#lambda ", +"(.it.2385) (core#if .it.2385 .it.2385 ((core#lambda (.it.2386) (core#if .it.2386", +" .it.2386 #f)) (char=? .c.2384 #\\:)))) (char=? .c.2384 #\\.)) (error \"elements of", +" library name may not contain '.' or ':'\" .n.2382) #undefined)) .str.2383) .str.", +"2383)) (symbol->string .n.2382)) (core#if (core#if (number? .n.2382) (core#if (e", +"xact? .n.2382) (<= 0 .n.2382) #f) #f) (number->string .n.2382) (error \"symbol or", +" non-negative integer is required\" .n.2382))))) (core#begin (core#define .join.2", +"381 (core#lambda (.strs.2387 .delim.2388) ((core#lambda () (core#begin (core#def", +"ine .loop.2389 (core#lambda (.res.2390 .strs.2391) (core#if (null? .strs.2391) .", +"res.2390 (.loop.2389 (string-append .res.2390 .delim.2388 (car .strs.2391)) (cdr", +" .strs.2391))))) (.loop.2389 (car .strs.2387) (cdr .strs.2387))))))) (core#if (s", +"ymbol? .name.2379) .name.2379 (string->symbol (.join.2381 (map .->string.2380 .n", +"ame.2379) \".\")))))))) (core#begin (core#define .current-library.2371 (make-param", +"eter (core#quote (picrin user)) .mangle.2370)) (core#begin (core#define .*librar", +"ies*.2372 (make-dictionary)) (core#begin (core#define .find-library.2373 (core#l", +"ambda (.name.2392) (dictionary-has? .*libraries*.2372 (.mangle.2370 .name.2392))", +")) (core#begin (core#define .make-library.2374 (core#lambda (.name.2393) ((core#", +"lambda (.name.2394) ((core#lambda (.env.2395 .exports.2396) (core#begin (set-ide", +"ntifier! (core#quote define-library) (core#quote define-library) .env.2395) (cor", +"e#begin (set-identifier! (core#quote import) (core#quote import) .env.2395) (cor", +"e#begin (set-identifier! (core#quote export) (core#quote export) .env.2395) (cor", +"e#begin (set-identifier! (core#quote cond-expand) (core#quote cond-expand) .env.", +"2395) (dictionary-set! .*libraries*.2372 .name.2394 (cons .env.2395 .exports.239", +"6))))))) (make-environment (string->symbol (string-append (symbol->string .name.", +"2394) \":\"))) (make-dictionary))) (.mangle.2370 .name.2393)))) (core#begin (core#", +"define .library-environment.2375 (core#lambda (.name.2397) (car (dictionary-ref ", +".*libraries*.2372 (.mangle.2370 .name.2397))))) (core#begin (core#define .librar", +"y-exports.2376 (core#lambda (.name.2398) (cdr (dictionary-ref .*libraries*.2372 ", +"(.mangle.2370 .name.2398))))) (core#begin (core#define .library-import.2377 (cor", +"e#lambda (.name.2399 .sym.2400 .alias.2401) ((core#lambda (.uid.2402) ((core#lam", +"bda (.env.2403) (set-identifier! .alias.2401 .uid.2402 .env.2403)) (.library-env", +"ironment.2375 (.current-library.2371)))) (dictionary-ref (.library-exports.2376 ", +".name.2399) .sym.2400)))) (core#begin (core#define .library-export.2378 (core#la", +"mbda (.sym.2404 .alias.2405) ((core#lambda (.env.2406 .exports.2407) (dictionary", +"-set! .exports.2407 .alias.2405 (find-identifier .sym.2404 .env.2406))) (.librar", +"y-environment.2375 (.current-library.2371)) (.library-exports.2376 (.current-lib", +"rary.2371))))) (core#begin ((core#lambda (.define-transformer.2408) (core#begin ", +"(.define-transformer.2408 (core#quote define-library) (core#lambda (.form.2409 .", +"_.2410) ((core#lambda (.name.2411 .body.2412) (core#begin ((core#lambda (.it.241", +"3) (core#if .it.2413 .it.2413 ((core#lambda (.it.2414) (core#if .it.2414 .it.241", +"4 #f)) (.make-library.2374 .name.2411)))) (.find-library.2373 .name.2411)) (with", +"-dynamic-environment (list (cons .current-library.2371 .name.2411)) (core#lambda", +" () (for-each (core#lambda (.expr.2415) (eval .expr.2415 .name.2411)) .body.2412", +"))))) (cadr .form.2409) (cddr .form.2409)))) (core#begin (.define-transformer.24", +"08 (core#quote cond-expand) (core#lambda (.form.2416 ._.2417) ((core#lambda (.te", +"st.2418) (core#begin (core#set! .test.2418 (core#lambda (.form.2419) ((core#lamb", +"da (.it.2420) (core#if .it.2420 .it.2420 ((core#lambda (.it.2421) (core#if .it.2", +"421 .it.2421 ((core#lambda (.it.2422) (core#if .it.2422 .it.2422 #f)) (core#if (", +"pair? .form.2419) ((core#lambda (.key.2423) (core#if ((core#lambda (.it.2424) (c", +"ore#if .it.2424 .it.2424 #f)) (eqv? .key.2423 (core#quote library))) (.find-libr", +"ary.2373 (cadr .form.2419)) (core#if ((core#lambda (.it.2425) (core#if .it.2425 ", +".it.2425 #f)) (eqv? .key.2423 (core#quote not))) (not (.test.2418 (cadr .form.24", +"19))) (core#if ((core#lambda (.it.2426) (core#if .it.2426 .it.2426 #f)) (eqv? .k", +"ey.2423 (core#quote and))) ((core#lambda () (core#begin (core#define .loop.2427 ", +"(core#lambda (.form.2428) ((core#lambda (.it.2429) (core#if .it.2429 .it.2429 ((", +"core#lambda (.it.2430) (core#if .it.2430 .it.2430 #f)) (core#if (.test.2418 (car", +" .form.2428)) (.loop.2427 (cdr .form.2428)) #f)))) (null? .form.2428)))) (.loop.", +"2427 (cdr .form.2419))))) (core#if ((core#lambda (.it.2431) (core#if .it.2431 .i", +"t.2431 #f)) (eqv? .key.2423 (core#quote or))) ((core#lambda () (core#begin (core", +"#define .loop.2432 (core#lambda (.form.2433) (core#if (pair? .form.2433) ((core#", +"lambda (.it.2434) (core#if .it.2434 .it.2434 ((core#lambda (.it.2435) (core#if .", +"it.2435 .it.2435 #f)) (.loop.2432 (cdr .form.2433))))) (.test.2418 (car .form.24", +"33))) #f))) (.loop.2432 (cdr .form.2419))))) (core#if #t #f #undefined)))))) (ca", +"r .form.2419)) #f)))) (core#if (symbol? .form.2419) (memq .form.2419 (features))", +" #f)))) (eq? .form.2419 (core#quote else))))) ((core#lambda () (core#begin (core", +"#define .loop.2436 (core#lambda (.clauses.2437) (core#if (null? .clauses.2437) #", +"undefined (core#if (.test.2418 (caar .clauses.2437)) (cons (make-identifier (cor", +"e#quote begin) default-environment) (append (cdar .clauses.2437) (core#quote ())", +")) (.loop.2436 (cdr .clauses.2437)))))) (.loop.2436 (cdr .form.2416))))))) #unde", +"fined))) (core#begin (.define-transformer.2408 (core#quote import) (core#lambda ", +"(.form.2438 ._.2439) ((core#lambda (.caddr.2440 .prefix.2441 .getlib.2442) ((cor", +"e#lambda (.extract.2443 .collect.2444) (core#begin (core#set! .extract.2443 (cor", +"e#lambda (.spec.2445) ((core#lambda (.key.2446) (core#if ((core#lambda (.it.2447", +") (core#if .it.2447 .it.2447 ((core#lambda (.it.2448) (core#if .it.2448 .it.2448", +" ((core#lambda (.it.2449) (core#if .it.2449 .it.2449 ((core#lambda (.it.2450) (c", +"ore#if .it.2450 .it.2450 #f)) (eqv? .key.2446 (core#quote except))))) (eqv? .key", +".2446 (core#quote prefix))))) (eqv? .key.2446 (core#quote rename))))) (eqv? .key", +".2446 (core#quote only))) (.extract.2443 (cadr .spec.2445)) (core#if #t (.getlib", +".2442 .spec.2445) #undefined))) (car .spec.2445)))) (core#begin (core#set! .coll", +"ect.2444 (core#lambda (.spec.2451) ((core#lambda (.key.2452) (core#if ((core#lam", +"bda (.it.2453) (core#if .it.2453 .it.2453 #f)) (eqv? .key.2452 (core#quote only)", +")) ((core#lambda (.alist.2454) (map (core#lambda (.var.2455) (assq .var.2455 .al", +"ist.2454)) (cddr .spec.2451))) (.collect.2444 (cadr .spec.2451))) (core#if ((cor", +"e#lambda (.it.2456) (core#if .it.2456 .it.2456 #f)) (eqv? .key.2452 (core#quote ", +"rename))) ((core#lambda (.alist.2457 .renames.2458) (map (core#lambda (.s.2459) ", +"((core#lambda (.it.2460) (core#if .it.2460 .it.2460 ((core#lambda (.it.2461) (co", +"re#if .it.2461 .it.2461 #f)) .s.2459))) (assq (car .s.2459) .renames.2458))) .al", +"ist.2457)) (.collect.2444 (cadr .spec.2451)) (map (core#lambda (.x.2462) (cons (", +"car .x.2462) (cadr .x.2462))) (cddr .spec.2451))) (core#if ((core#lambda (.it.24", +"63) (core#if .it.2463 .it.2463 #f)) (eqv? .key.2452 (core#quote prefix))) ((core", +"#lambda (.alist.2464) (map (core#lambda (.s.2465) (cons (.prefix.2441 (.caddr.24", +"40 .spec.2451) (car .s.2465)) (cdr .s.2465))) .alist.2464)) (.collect.2444 (cadr", +" .spec.2451))) (core#if ((core#lambda (.it.2466) (core#if .it.2466 .it.2466 #f))", +" (eqv? .key.2452 (core#quote except))) ((core#lambda (.alist.2467) ((core#lambda", +" () (core#begin (core#define .loop.2468 (core#lambda (.alist.2469) (core#if (nul", +"l? .alist.2469) (core#quote ()) (core#if (memq (caar .alist.2469) (cddr .spec.24", +"51)) (.loop.2468 (cdr .alist.2469)) (cons (car .alist.2469) (.loop.2468 (cdr .al", +"ist.2469))))))) (.loop.2468 .alist.2467))))) (.collect.2444 (cadr .spec.2451))) ", +"(core#if #t (dictionary-map (core#lambda (.x.2470) (cons .x.2470 .x.2470)) (.lib", +"rary-exports.2376 (.getlib.2442 .spec.2451))) #undefined)))))) (car .spec.2451))", +")) ((core#lambda (.import.2471) (core#begin (core#set! .import.2471 (core#lambda", +" (.spec.2472) ((core#lambda (.lib.2473 .alist.2474) (for-each (core#lambda (.slo", +"t.2475) (.library-import.2377 .lib.2473 (cdr .slot.2475) (car .slot.2475))) .ali", +"st.2474)) (.extract.2443 .spec.2472) (.collect.2444 .spec.2472)))) (for-each .im", +"port.2471 (cdr .form.2438)))) #undefined)))) #undefined #undefined)) (core#lambd", +"a (.x.2476) (car (cdr (cdr .x.2476)))) (core#lambda (.prefix.2477 .symbol.2478) ", +"(string->symbol (string-append (symbol->string .prefix.2477) (symbol->string .sy", +"mbol.2478)))) (core#lambda (.name.2479) (core#if (.find-library.2373 .name.2479)", +" .name.2479 (error \"library not found\" .name.2479)))))) (.define-transformer.240", +"8 (core#quote export) (core#lambda (.form.2480 ._.2481) ((core#lambda (.collect.", +"2482 .export.2483) (core#begin (core#set! .collect.2482 (core#lambda (.spec.2484", +") (core#if (symbol? .spec.2484) (cons .spec.2484 .spec.2484) (core#if (core#if (", +"list? .spec.2484) (core#if (= (length .spec.2484) 3) (eq? (car .spec.2484) (core", +"#quote rename)) #f) #f) (cons (list-ref .spec.2484 1) (list-ref .spec.2484 2)) (", +"error \"malformed export\"))))) (core#begin (core#set! .export.2483 (core#lambda (", +".spec.2485) ((core#lambda (.slot.2486) (.library-export.2378 (car .slot.2486) (c", +"dr .slot.2486))) (.collect.2482 .spec.2485)))) (for-each .export.2483 (cdr .form", +".2480))))) #undefined #undefined))))))) (core#lambda (.name.2487 .macro.2488) (d", +"ictionary-set! (macro-objects) .name.2487 .macro.2488))) (core#begin ((core#lamb", +"da () (core#begin (.make-library.2374 (core#quote (picrin base))) (core#begin (s", +"et-car! (dictionary-ref .*libraries*.2372 (.mangle.2370 (core#quote (picrin base", +")))) default-environment) (core#begin ((core#lambda (.exports.2489) ((core#lambd", +"a (.export-keyword.2490) ((core#lambda () (core#begin (for-each .export-keyword.", +"2490 (core#quote (define lambda quote set! if begin define-macro let let* letrec", +" letrec* let-values let*-values define-values quasiquote unquote unquote-splicin", +"g and or cond case else => do when unless parameterize))) (core#begin (.export-k", +"eyword.2490 (core#quote boolean?)) (dictionary-for-each .export-keyword.2490 (gl", +"obal-objects))))))) (core#lambda (.keyword.2491) (dictionary-set! .exports.2489 ", +".keyword.2491 .keyword.2491)))) (.library-exports.2376 (core#quote (picrin base)", +"))) (core#begin (core#set! eval ((core#lambda (.e.2492) (core#lambda (.expr.2493", +" . .lib.2494) ((core#lambda (.lib.2495) (.e.2492 .expr.2493 (.library-environmen", +"t.2375 .lib.2495))) (core#if (null? .lib.2494) (.current-library.2371) (car .lib", +".2494))))) eval)) (.make-library.2374 (core#quote (picrin user))))))))) (values ", +".current-library.2371 .find-library.2373 .make-library.2374 .library-environment", +".2375 .library-exports.2376 .library-import.2377 .library-export.2378)))))))))))", +")))) (core#lambda (.current-library.2496 .find-library.2497 .make-library.2498 .", +"library-environment.2499 .library-exports.2500 .library-import.2501 .library-exp", +"ort.2502) (core#begin (core#set! current-library .current-library.2496) (core#be", +"gin (core#set! find-library .find-library.2497) (core#begin (core#set! make-libr", +"ary .make-library.2498) (core#begin (core#set! library-environment .library-envi", +"ronment.2499) (core#begin (core#set! library-exports .library-exports.2500) (cor", +"e#begin (core#set! library-import .library-import.2501) (core#set! library-expor", +"t .library-export.2502))))))))))))))))", }; #endif diff --git a/lib/ext/compile.c b/lib/ext/compile.c index 6d9bdf62..002cc9be 100644 --- a/lib/ext/compile.c +++ b/lib/ext/compile.c @@ -393,17 +393,11 @@ pic_compile_find_identifier(pic_state *pic) } static pic_value -pic_compile_add_macro(pic_state *pic) +pic_compile_macro_objects(pic_state *pic) { - pic_value id, mac, uid; + pic_get_args(pic, ""); - pic_get_args(pic, "ol", &id, &mac); - - TYPE_CHECK(pic, id, id); - - uid = pic_find_identifier(pic, id, default_env(pic)); - define_macro(pic, uid, mac); - return pic_undef_value(pic); + return pic->macros; } static pic_value @@ -451,7 +445,7 @@ pic_init_compile(pic_state *pic) pic_defun(pic, "make-environment", pic_compile_make_environment); pic_defun(pic, "find-identifier", pic_compile_find_identifier); pic_defun(pic, "set-identifier!", pic_compile_set_identifier); - pic_defun(pic, "add-macro!", pic_compile_add_macro); + pic_defun(pic, "macro-objects", pic_compile_macro_objects); pic_defun(pic, "compile", pic_compile_compile); pic_defun(pic, "eval", pic_compile_eval); } diff --git a/lib/state.c b/lib/state.c index a5609096..b6da30fc 100644 --- a/lib/state.c +++ b/lib/state.c @@ -81,6 +81,14 @@ pic_add_feature(pic_state *pic, const char *feature) pic_push(pic, pic_intern_cstr(pic, feature), pic->features); } +static pic_value +pic_global_objects(pic_state *pic) +{ + pic_get_args(pic, ""); + + return pic->globals; +} + void pic_init_bool(pic_state *); void pic_init_pair(pic_state *); void pic_init_port(pic_state *); @@ -110,6 +118,8 @@ pic_init_core(pic_state *pic) { size_t ai = pic_enter(pic); + pic_defun(pic, "global-objects", pic_global_objects); + pic_init_features(pic); DONE; pic_init_bool(pic); DONE; pic_init_pair(pic); DONE; diff --git a/piclib/boot.scm b/piclib/boot.scm index 69f401b0..2cd1d140 100644 --- a/piclib/boot.scm +++ b/piclib/boot.scm @@ -1,330 +1,333 @@ -(let () - (define (define-transformer name transformer) - (add-macro! name transformer)) +(let ((define-transformer + (lambda (name transformer) + (dictionary-set! (macro-objects) name transformer))) + (the ; synonym for #'var + (lambda (var) + (make-identifier var default-environment)))) + ;; cache popular identifiers + (let ((the-core-define (the 'core#define)) + (the-core-lambda (the 'core#lambda)) + (the-core-begin (the 'core#begin)) + (the-core-quote (the 'core#quote)) + (the-core-set! (the 'core#set!)) + (the-core-if (the 'core#if)) + (the-core-define-macro (the 'core#define-macro)) + (the-define (the 'define)) + (the-lambda (the 'lambda)) + (the-begin (the 'begin)) + (the-quote (the 'quote)) + (the-set! (the 'set!)) + (the-if (the 'if)) + (the-define-macro (the 'define-macro))) - (define (the var) ; synonym for #'var - (make-identifier var default-environment)) + (define-transformer 'quote + (lambda (form env) + (if (= (length form) 2) + `(,the-core-quote ,(cadr form)) + (error "malformed quote" form)))) - (define the-core-define (the 'core#define)) - (define the-core-lambda (the 'core#lambda)) - (define the-core-begin (the 'core#begin)) - (define the-core-quote (the 'core#quote)) - (define the-core-set! (the 'core#set!)) - (define the-core-if (the 'core#if)) - (define the-core-define-macro (the 'core#define-macro)) + (define-transformer 'if + (lambda (form env) + (let ((len (length form))) + (cond + ((= len 3) `(,@form #undefined)) + ((= len 4) `(,the-core-if . ,(cdr form))) + (else (error "malformed if" form)))))) - (define the-define (the 'define)) - (define the-lambda (the 'lambda)) - (define the-begin (the 'begin)) - (define the-quote (the 'quote)) - (define the-set! (the 'set!)) - (define the-if (the 'if)) - (define the-define-macro (the 'define-macro)) + (define-transformer 'begin + (lambda (form env) + (let ((len (length form))) + (cond + ((= len 1) #undefined) + ((= len 2) (cadr form)) + ((= len 3) `(,the-core-begin . ,(cdr form))) + (else `(,the-core-begin ,(cadr form) (,the-begin . ,(cddr form)))))))) - (define-transformer 'quote - (lambda (form env) - (if (= (length form) 2) - `(,the-core-quote ,(cadr form)) - (error "malformed quote" form)))) + (define-transformer 'set! + (lambda (form env) + (if (and (= (length form) 3) (identifier? (cadr form))) + `(,the-core-set! . ,(cdr form)) + (error "malformed set!" form)))) - (define-transformer 'if - (lambda (form env) - (let ((len (length form))) - (cond - ((= len 3) `(,@form #undefined)) - ((= len 4) `(,the-core-if . ,(cdr form))) - (else (error "malformed if" form)))))) + (define (check-formal formal) + (or (null? formal) + (identifier? formal) + (and (pair? formal) + (identifier? (car formal)) + (check-formal (cdr formal))))) - (define-transformer 'begin - (lambda (form env) - (let ((len (length form))) - (cond - ((= len 1) #undefined) - ((= len 2) (cadr form)) - ((= len 3) `(,the-core-begin . ,(cdr form))) - (else `(,the-core-begin ,(cadr form) (,the-begin . ,(cddr form)))))))) + (define-transformer 'lambda + (lambda (form env) + (if (= (length form) 1) + (error "malformed lambda" form) + (if (check-formal (cadr form)) + `(,the-core-lambda ,(cadr form) (,the-begin . ,(cddr form))) + (error "malformed lambda" form))))) - (define-transformer 'set! - (lambda (form env) - (if (and (= (length form) 3) (identifier? (cadr form))) - `(,the-core-set! . ,(cdr form)) - (error "malformed set!" form)))) + (define-transformer 'define + (lambda (form env) + (let ((len (length form))) + (if (= len 1) + (error "malformed define" form) + (let ((formal (cadr form))) + (if (identifier? formal) + (if (= len 3) + `(,the-core-define . ,(cdr form)) + (error "malformed define" form)) + (if (pair? formal) + `(,the-define ,(car formal) (,the-lambda ,(cdr formal) . ,(cddr form))) + (error "define: binding to non-varaible object" form)))))))) - (define (check-formal formal) - (or (null? formal) - (identifier? formal) - (and (pair? formal) - (identifier? (car formal)) - (check-formal (cdr formal))))) - - (define-transformer 'lambda - (lambda (form env) - (if (= (length form) 1) - (error "malformed lambda" form) - (if (check-formal (cadr form)) - `(,the-core-lambda ,(cadr form) (,the-begin . ,(cddr form))) - (error "malformed lambda" form))))) - - (define-transformer 'define - (lambda (form env) - (let ((len (length form))) - (if (= len 1) - (error "malformed define" form) - (let ((formal (cadr form))) - (if (identifier? formal) - (if (= len 3) - `(,the-core-define . ,(cdr form)) - (error "malformed define" form)) - (if (pair? formal) - `(,the-define ,(car formal) (,the-lambda ,(cdr formal) . ,(cddr form))) - (error "define: binding to non-varaible object" form)))))))) - - (define-transformer 'define-macro - (lambda (form env) - (if (= (length form) 3) - (if (identifier? (cadr form)) - `(,the-core-define-macro . ,(cdr form)) - (error "define-macro: binding to non-variable object" form)) - (error "malformed define-macro" form)))) + (define-transformer 'define-macro + (lambda (form env) + (if (= (length form) 3) + (if (identifier? (cadr form)) + `(,the-core-define-macro . ,(cdr form)) + (error "define-macro: binding to non-variable object" form)) + (error "malformed define-macro" form)))) - (define-macro define-auxiliary-syntax - (lambda (form _) - `(define-transformer ',(cadr form) - (lambda _ - (error "invalid use of auxiliary syntax" ',(cadr form)))))) + (define-macro define-auxiliary-syntax + (lambda (form _) + `(define-transformer ',(cadr form) + (lambda _ + (error "invalid use of auxiliary syntax" ',(cadr form)))))) - (define-auxiliary-syntax else) - (define-auxiliary-syntax =>) - (define-auxiliary-syntax unquote) - (define-auxiliary-syntax unquote-splicing) + (define-auxiliary-syntax else) + (define-auxiliary-syntax =>) + (define-auxiliary-syntax unquote) + (define-auxiliary-syntax unquote-splicing) - (define-transformer 'let - (lambda (form env) - (if (identifier? (cadr form)) - (let ((name (car (cdr form))) - (formal (car (cdr (cdr form)))) - (body (cdr (cdr (cdr form))))) - `((,the-lambda () - (,the-define (,name . ,(map car formal)) . ,body) - (,name . ,(map cadr formal))))) - (let ((formal (car (cdr form))) - (body (cdr (cdr form)))) - `((,the-lambda ,(map car formal) . ,body) . ,(map cadr formal)))))) + (define-transformer 'let + (lambda (form env) + (if (identifier? (cadr form)) + (let ((name (car (cdr form))) + (formal (car (cdr (cdr form)))) + (body (cdr (cdr (cdr form))))) + `((,the-lambda () + (,the-define (,name . ,(map car formal)) . ,body) + (,name . ,(map cadr formal))))) + (let ((formal (car (cdr form))) + (body (cdr (cdr form)))) + `((,the-lambda ,(map car formal) . ,body) . ,(map cadr formal)))))) - (define-transformer 'and - (lambda (form env) - (if (null? (cdr form)) - #t - (if (null? (cddr form)) - (cadr form) - `(,the-if ,(cadr form) (,(the 'and) . ,(cddr form)) #f))))) + (define-transformer 'and + (lambda (form env) + (if (null? (cdr form)) + #t + (if (null? (cddr form)) + (cadr form) + `(,the-if ,(cadr form) (,(the 'and) . ,(cddr form)) #f))))) - (define-transformer 'or - (lambda (form env) - (if (null? (cdr form)) - #f - (let ((tmp (make-identifier 'it env))) ; should we use #f as the env for tmp? - `(,(the 'let) ((,tmp ,(cadr form))) - (,the-if ,tmp ,tmp (,(the 'or) . ,(cddr form)))))))) + (define-transformer 'or + (lambda (form env) + (if (null? (cdr form)) + #f + (let ((tmp (make-identifier 'it env))) ; should we use #f as the env for tmp? + `(,(the 'let) ((,tmp ,(cadr form))) + (,the-if ,tmp ,tmp (,(the 'or) . ,(cddr form)))))))) - (define-transformer 'cond - (lambda (form env) - (let ((clauses (cdr form))) - (if (null? clauses) - #undefined - (let ((clause (car clauses))) - (if (and (identifier? (car clause)) - (identifier=? (the 'else) (make-identifier (car clause) env))) - `(,the-begin . ,(cdr clause)) - (if (null? (cdr clause)) - `(,(the 'or) ,(car clause) (,(the 'cond) . ,(cdr clauses))) - (if (and (identifier? (cadr clause)) - (identifier=? (the '=>) (make-identifier (cadr clause) env))) - (let ((tmp (make-identifier 'tmp env))) - `(,(the 'let) ((,tmp ,(car clause))) - (,the-if ,tmp (,(cadr (cdr clause)) ,tmp) (,(the 'cond) . ,(cddr form))))) - `(,the-if ,(car clause) - (,the-begin . ,(cdr clause)) - (,(the 'cond) . ,(cdr clauses))))))))))) + (define-transformer 'cond + (lambda (form env) + (let ((clauses (cdr form))) + (if (null? clauses) + #undefined + (let ((clause (car clauses))) + (if (and (identifier? (car clause)) + (identifier=? (the 'else) (make-identifier (car clause) env))) + `(,the-begin . ,(cdr clause)) + (if (null? (cdr clause)) + `(,(the 'or) ,(car clause) (,(the 'cond) . ,(cdr clauses))) + (if (and (identifier? (cadr clause)) + (identifier=? (the '=>) (make-identifier (cadr clause) env))) + (let ((tmp (make-identifier 'tmp env))) + `(,(the 'let) ((,tmp ,(car clause))) + (,the-if ,tmp (,(cadr (cdr clause)) ,tmp) (,(the 'cond) . ,(cddr form))))) + `(,the-if ,(car clause) + (,the-begin . ,(cdr clause)) + (,(the 'cond) . ,(cdr clauses))))))))))) - (define-transformer 'quasiquote - (lambda (form env) + (define-transformer 'quasiquote + (lambda (form env) - (define (quasiquote? form) - (and (pair? form) - (identifier? (car form)) - (identifier=? (the 'quasiquote) (make-identifier (car form) env)))) + (define (quasiquote? form) + (and (pair? form) + (identifier? (car form)) + (identifier=? (the 'quasiquote) (make-identifier (car form) env)))) - (define (unquote? form) - (and (pair? form) - (identifier? (car form)) - (identifier=? (the 'unquote) (make-identifier (car form) env)))) + (define (unquote? form) + (and (pair? form) + (identifier? (car form)) + (identifier=? (the 'unquote) (make-identifier (car form) env)))) - (define (unquote-splicing? form) - (and (pair? form) - (pair? (car form)) - (identifier? (caar form)) - (identifier=? (the 'unquote-splicing) (make-identifier (caar form) env)))) + (define (unquote-splicing? form) + (and (pair? form) + (pair? (car form)) + (identifier? (caar form)) + (identifier=? (the 'unquote-splicing) (make-identifier (caar form) env)))) - (define (qq depth expr) - (cond - ;; unquote - ((unquote? expr) - (if (= depth 1) - (cadr expr) - (list (the 'list) - (list (the 'quote) (the 'unquote)) - (qq (- depth 1) (car (cdr expr)))))) - ;; unquote-splicing - ((unquote-splicing? expr) - (if (= depth 1) - (list (the 'append) - (car (cdr (car expr))) - (qq depth (cdr expr))) - (list (the 'cons) - (list (the 'list) - (list (the 'quote) (the 'unquote-splicing)) - (qq (- depth 1) (car (cdr (car expr))))) - (qq depth (cdr expr))))) - ;; quasiquote - ((quasiquote? expr) - (list (the 'list) - (list (the 'quote) (the 'quasiquote)) - (qq (+ depth 1) (car (cdr expr))))) - ;; list - ((pair? expr) - (list (the 'cons) - (qq depth (car expr)) - (qq depth (cdr expr)))) - ;; vector - ((vector? expr) - (list (the 'list->vector) (qq depth (vector->list expr)))) - ;; simple datum - (else - (list (the 'quote) expr)))) + (define (qq depth expr) + (cond + ;; unquote + ((unquote? expr) + (if (= depth 1) + (cadr expr) + (list (the 'list) + (list (the 'quote) (the 'unquote)) + (qq (- depth 1) (car (cdr expr)))))) + ;; unquote-splicing + ((unquote-splicing? expr) + (if (= depth 1) + (list (the 'append) + (car (cdr (car expr))) + (qq depth (cdr expr))) + (list (the 'cons) + (list (the 'list) + (list (the 'quote) (the 'unquote-splicing)) + (qq (- depth 1) (car (cdr (car expr))))) + (qq depth (cdr expr))))) + ;; quasiquote + ((quasiquote? expr) + (list (the 'list) + (list (the 'quote) (the 'quasiquote)) + (qq (+ depth 1) (car (cdr expr))))) + ;; list + ((pair? expr) + (list (the 'cons) + (qq depth (car expr)) + (qq depth (cdr expr)))) + ;; vector + ((vector? expr) + (list (the 'list->vector) (qq depth (vector->list expr)))) + ;; simple datum + (else + (list (the 'quote) expr)))) - (let ((x (cadr form))) - (qq 1 x)))) + (let ((x (cadr form))) + (qq 1 x)))) - (define-transformer 'let* - (lambda (form env) - (let ((bindings (car (cdr form))) - (body (cdr (cdr form)))) - (if (null? bindings) - `(,(the 'let) () . ,body) - `(,(the 'let) ((,(car (car bindings)) . ,(cdr (car bindings)))) - (,(the 'let*) ,(cdr bindings) . ,body)))))) + (define-transformer 'let* + (lambda (form env) + (let ((bindings (car (cdr form))) + (body (cdr (cdr form)))) + (if (null? bindings) + `(,(the 'let) () . ,body) + `(,(the 'let) ((,(car (car bindings)) . ,(cdr (car bindings)))) + (,(the 'let*) ,(cdr bindings) . ,body)))))) - (define-transformer 'letrec - (lambda (form env) - `(,(the 'letrec*) . ,(cdr form)))) + (define-transformer 'letrec + (lambda (form env) + `(,(the 'letrec*) . ,(cdr form)))) - (define-transformer 'letrec* - (lambda (form env) - (let ((bindings (car (cdr form))) - (body (cdr (cdr form)))) - (let ((variables (map (lambda (v) `(,v #undefined)) (map car bindings))) - (initials (map (lambda (v) `(,(the 'set!) ,@v)) bindings))) - `(,(the 'let) ,variables - ,@initials - ,@body))))) + (define-transformer 'letrec* + (lambda (form env) + (let ((bindings (car (cdr form))) + (body (cdr (cdr form)))) + (let ((variables (map (lambda (v) `(,v #undefined)) (map car bindings))) + (initials (map (lambda (v) `(,(the 'set!) ,@v)) bindings))) + `(,(the 'let) ,variables + ,@initials + ,@body))))) - (define-transformer 'let-values - (lambda (form env) - `(,(the 'let*-values) ,@(cdr form)))) + (define-transformer 'let-values + (lambda (form env) + `(,(the 'let*-values) ,@(cdr form)))) - (define-transformer 'let*-values - (lambda (form env) - (let ((formals (cadr form)) - (body (cddr form))) - (if (null? formals) - `(,(the 'let) () ,@body) - (let ((formal (car formals))) - `(,(the 'call-with-values) (,the-lambda () . ,(cdr formal)) - (,(the 'lambda) ,(car formal) - (,(the 'let*-values) ,(cdr formals) . ,body)))))))) + (define-transformer 'let*-values + (lambda (form env) + (let ((formals (cadr form)) + (body (cddr form))) + (if (null? formals) + `(,(the 'let) () ,@body) + (let ((formal (car formals))) + `(,(the 'call-with-values) (,the-lambda () . ,(cdr formal)) + (,(the 'lambda) ,(car formal) + (,(the 'let*-values) ,(cdr formals) . ,body)))))))) - (define-transformer 'define-values - (lambda (form env) - (let ((formal (cadr form)) - (body (cddr form))) - (let ((arguments (make-identifier 'arguments env))) - `(,the-begin - ,@(let loop ((formal formal)) - (if (pair? formal) - `((,the-define ,(car formal) #undefined) . ,(loop (cdr formal))) - (if (identifier? formal) - `((,the-define ,formal #undefined)) - '()))) - (,(the 'call-with-values) (,the-lambda () ,@body) - (,the-lambda - ,arguments - ,@(let loop ((formal formal) (args arguments)) - (if (pair? formal) - `((,the-set! ,(car formal) (,(the 'car) ,args)) . ,(loop (cdr formal) `(,(the 'cdr) ,args))) - (if (identifier? formal) - `((,the-set! ,formal ,args)) - '())))))))))) + (define-transformer 'define-values + (lambda (form env) + (let ((formal (cadr form)) + (body (cddr form))) + (let ((tmps (let loop ((formal formal)) + (if (identifier? formal) + (make-identifier formal env) + (if (pair? formal) + (cons (make-identifier (car formal) env) (loop (cdr formal))) + '()))))) + `(,the-begin + ,@(let loop ((formal formal)) + (if (identifier? formal) + `((,the-define ,formal #undefined)) + (if (pair? formal) + (cons `(,the-define ,(car formal) #undefined) (loop (cdr formal))) + '()))) + (,(the 'call-with-values) (,the-lambda () . ,body) + (,the-lambda ,tmps . ,(let loop ((formal formal) (tmps tmps)) + (if (identifier? formal) + `((,the-set! ,formal ,tmps)) + (if (pair? formal) + (cons `(,the-set! ,(car formal) ,(car tmps)) + (loop (cdr formal) (cdr tmps))) + '())))))))))) - (define-transformer 'do - (lambda (form env) - (let ((bindings (car (cdr form))) - (test (car (car (cdr (cdr form))))) - (cleanup (cdr (car (cdr (cdr form))))) - (body (cdr (cdr (cdr form))))) - (let ((loop (make-identifier 'loop env))) - `(,(the 'let) ,loop ,(map (lambda (x) `(,(car x) ,(cadr x))) bindings) - (,the-if ,test - (,the-begin . ,cleanup) - (,the-begin - ,@body - (,loop . ,(map (lambda (x) - (if (null? (cdr (cdr x))) - (car x) - (car (cdr (cdr x))))) - bindings))))))))) + (define-transformer 'do + (lambda (form env) + (let ((bindings (car (cdr form))) + (test (car (car (cdr (cdr form))))) + (cleanup (cdr (car (cdr (cdr form))))) + (body (cdr (cdr (cdr form))))) + (let ((loop (make-identifier 'loop env))) + `(,(the 'let) ,loop ,(map (lambda (x) `(,(car x) ,(cadr x))) bindings) + (,the-if ,test + (,the-begin . ,cleanup) + (,the-begin + ,@body + (,loop . ,(map (lambda (x) + (if (null? (cdr (cdr x))) + (car x) + (car (cdr (cdr x))))) + bindings))))))))) - (define-transformer 'when - (lambda (form env) - (let ((test (car (cdr form))) - (body (cdr (cdr form)))) - `(,the-if ,test - (,the-begin ,@body) - #undefined)))) + (define-transformer 'when + (lambda (form env) + (let ((test (car (cdr form))) + (body (cdr (cdr form)))) + `(,the-if ,test + (,the-begin ,@body) + #undefined)))) - (define-transformer 'unless - (lambda (form env) - (let ((test (car (cdr form))) - (body (cdr (cdr form)))) - `(,the-if ,test - #undefined - (,the-begin ,@body))))) + (define-transformer 'unless + (lambda (form env) + (let ((test (car (cdr form))) + (body (cdr (cdr form)))) + `(,the-if ,test + #undefined + (,the-begin ,@body))))) - (define-transformer 'case - (lambda (form env) - (let ((key (car (cdr form))) - (clauses (cdr (cdr form)))) - (let ((the-key (make-identifier 'key env))) - `(,(the 'let) ((,the-key ,key)) - ,(let loop ((clauses clauses)) - (if (null? clauses) - #undefined - (let ((clause (car clauses))) - `(,the-if ,(if (and (identifier? (car clause)) - (identifier=? (the 'else) (make-identifier (car clause) env))) - #t - `(,(the 'or) ,@(map (lambda (x) `(,(the 'eqv?) ,the-key (,the-quote ,x))) (car clause)))) - ,(if (and (identifier? (cadr clause)) - (identifier=? (the '=>) (make-identifier (cadr clause) env))) - `(,(car (cdr (cdr clause))) ,the-key) - `(,the-begin ,@(cdr clause))) - ,(loop (cdr clauses))))))))))) + (define-transformer 'case + (lambda (form env) + (let ((key (car (cdr form))) + (clauses (cdr (cdr form)))) + (let ((the-key (make-identifier 'key env))) + `(,(the 'let) ((,the-key ,key)) + ,(let loop ((clauses clauses)) + (if (null? clauses) + #undefined + (let ((clause (car clauses))) + `(,the-if ,(if (and (identifier? (car clause)) + (identifier=? (the 'else) (make-identifier (car clause) env))) + #t + `(,(the 'or) ,@(map (lambda (x) `(,(the 'eqv?) ,the-key (,the-quote ,x))) (car clause)))) + ,(if (and (identifier? (cadr clause)) + (identifier=? (the '=>) (make-identifier (cadr clause) env))) + `(,(car (cdr (cdr clause))) ,the-key) + `(,the-begin ,@(cdr clause))) + ,(loop (cdr clauses))))))))))) - (define-transformer 'parameterize - (lambda (form env) - (let ((formal (car (cdr form))) - (body (cdr (cdr form)))) - `(,(the 'with-dynamic-environment) - (,(the 'list) ,@(map (lambda (x) `(,(the 'cons) ,(car x) ,(cadr x))) formal)) - (,the-lambda () ,@body)))))) + (define-transformer 'parameterize + (lambda (form env) + (let ((formal (car (cdr form))) + (body (cdr (cdr form)))) + `(,(the 'with-dynamic-environment) + (,(the 'list) ,@(map (lambda (x) `(,(the 'cons) ,(car x) ,(cadr x))) formal)) + (,the-lambda () ,@body))))))) diff --git a/piclib/library.scm b/piclib/library.scm index 7ece1957..87750aa5 100644 --- a/piclib/library.scm +++ b/piclib/library.scm @@ -1,270 +1,234 @@ -(begin - ;; There are two ways to name a library: (foo bar) or foo.bar - ;; The former is normalized to the latter. - - (define (mangle name) - (when (null? name) - (error "library name should be a list of at least one symbols" name)) - - (define (->string n) - (cond - ((symbol? n) - (let ((str (symbol->string n))) - (string-for-each - (lambda (c) - (when (or (char=? c #\.) (char=? c #\:)) - (error "elements of library name may not contain '.' or ':'" n))) - str) - str)) - ((and (number? n) (exact? n) (<= 0 n)) - (number->string n)) - (else - (error "symbol or non-negative integer is required" n)))) - - (define (join strs delim) - (let loop ((res (car strs)) (strs (cdr strs))) - (if (null? strs) - res - (loop (string-append res delim (car strs)) (cdr strs))))) - - (if (symbol? name) - name ; TODO: check symbol names - (string->symbol (join (map ->string name) ".")))) - - (define current-library - (make-parameter '(picrin user) mangle)) - - (define *libraries* - (make-dictionary)) - - (define (find-library name) - (dictionary-has? *libraries* (mangle name))) - - (define (make-library name) - (let ((name (mangle name))) - (let ((env (make-environment - (string->symbol (string-append (symbol->string name) ":")))) - (exports (make-dictionary))) - ;; set up initial environment - (set-identifier! 'define-library 'define-library env) - (set-identifier! 'import 'import env) - (set-identifier! 'export 'export env) - (set-identifier! 'cond-expand 'cond-expand env) - (dictionary-set! *libraries* name `(,env . ,exports))))) - - (define (library-environment name) - (car (dictionary-ref *libraries* (mangle name)))) - - (define (library-exports name) - (cdr (dictionary-ref *libraries* (mangle name)))) - - (define (library-import name sym alias) - (let ((uid (dictionary-ref (library-exports name) sym))) - (let ((env (library-environment (current-library)))) - (set-identifier! alias uid env)))) - - (define (library-export sym alias) - (let ((env (library-environment (current-library))) - (exports (library-exports (current-library)))) - (dictionary-set! exports alias (find-identifier sym env)))) - - - - ;; R7RS library syntax - - (let ((define-transformer - (lambda (name macro) - (add-macro! name macro)))) - - (define-transformer 'define-library - (lambda (form _) - (let ((name (cadr form)) - (body (cddr form))) - (or (find-library name) (make-library name)) - (parameterize ((current-library name)) - (for-each - (lambda (expr) - (eval expr name)) ; TODO parse library declarations - body))))) - - (define-transformer 'cond-expand - (lambda (form _) - (letrec - ((test (lambda (form) - (or - (eq? form 'else) - (and (symbol? form) - (memq form (features))) - (and (pair? form) - (case (car form) - ((library) (find-library (cadr form))) - ((not) (not (test (cadr form)))) - ((and) (let loop ((form (cdr form))) - (or (null? form) - (and (test (car form)) (loop (cdr form)))))) - ((or) (let loop ((form (cdr form))) - (and (pair? form) - (or (test (car form)) (loop (cdr form)))))) - (else #f))))))) - (let loop ((clauses (cdr form))) - (if (null? clauses) - #undefined - (if (test (caar clauses)) - `(,(make-identifier 'begin default-environment) ,@(cdar clauses)) - (loop (cdr clauses)))))))) - - (define-transformer 'import - (lambda (form _) - (let ((caddr - (lambda (x) (car (cdr (cdr x))))) - (prefix - (lambda (prefix symbol) - (string->symbol - (string-append - (symbol->string prefix) - (symbol->string symbol))))) - (getlib - (lambda (name) - (if (find-library name) - name - (error "library not found" name))))) - (letrec - ((extract - (lambda (spec) - (case (car spec) - ((only rename prefix except) - (extract (cadr spec))) - (else - (getlib spec))))) - (collect - (lambda (spec) - (case (car spec) - ((only) - (let ((alist (collect (cadr spec)))) - (map (lambda (var) (assq var alist)) (cddr spec)))) - ((rename) - (let ((alist (collect (cadr spec))) - (renames (map (lambda (x) `(,(car x) . ,(cadr x))) (cddr spec)))) - (map (lambda (s) (or (assq (car s) renames) s)) alist))) - ((prefix) - (let ((alist (collect (cadr spec)))) - (map (lambda (s) (cons (prefix (caddr spec) (car s)) (cdr s))) alist))) - ((except) - (let ((alist (collect (cadr spec)))) - (let loop ((alist alist)) - (if (null? alist) - '() - (if (memq (caar alist) (cddr spec)) - (loop (cdr alist)) - (cons (car alist) (loop (cdr alist)))))))) - (else - (dictionary-map (lambda (x) (cons x x)) - (library-exports (getlib spec)))))))) - (letrec - ((import - (lambda (spec) - (let ((lib (extract spec)) - (alist (collect spec))) - (for-each - (lambda (slot) - (library-import lib (cdr slot) (car slot))) - alist))))) - (for-each import (cdr form))))))) - - (define-transformer 'export - (lambda (form _) - (letrec - ((collect - (lambda (spec) - (cond - ((symbol? spec) - `(,spec . ,spec)) - ((and (list? spec) (= (length spec) 3) (eq? (car spec) 'rename)) - `(,(list-ref spec 1) . ,(list-ref spec 2))) - (else - (error "malformed export"))))) - (export - (lambda (spec) - (let ((slot (collect spec))) - (library-export (car slot) (cdr slot)))))) - (for-each export (cdr form)))))) - - - ;; bootstrap... +(define-values (current-library + find-library + make-library + library-environment + library-exports + library-import + library-export) (let () - (make-library '(picrin base)) - (set-car! (dictionary-ref *libraries* (mangle '(picrin base))) default-environment) - (let ((export-keywords - (lambda (keywords) - (let ((env (library-environment '(picrin base))) - (exports (library-exports '(picrin base)))) - (for-each - (lambda (keyword) - (dictionary-set! exports keyword keyword)) - keywords))))) - (export-keywords - '(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)) - (export-keywords - '(features - eq? eqv? equal? not boolean? boolean=? - pair? cons car cdr null? set-car! set-cdr! - caar 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-u8 write-bytevector flush-output-port - open-input-bytevector open-output-bytevector 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 identifier-environment - vector? vector make-vector vector-length vector-ref vector-set! - vector-copy! vector-copy vector-append vector-fill! vector-map vector-for-each - list->vector vector->list string->vector vector->string - bytevector? bytevector make-bytevector - bytevector-length bytevector-u8-ref bytevector-u8-set! - bytevector-copy! bytevector-copy bytevector-append - bytevector->list list->bytevector - call-with-current-continuation call/cc values call-with-values - char? char->integer integer->char char=? char? char<=? char>=? - current-exception-handlers with-exception-handler - raise raise-continuable error - error-object? error-object-message error-object-irritants - error-object-type - string? string make-string string-length 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! dictionary-delete! dictionary-size - dictionary-map dictionary-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-ephemeron-table - write write-simple write-shared display)) - (export-keywords - '(find-library make-library current-library))) - (set! eval - (let ((e eval)) - (lambda (expr . lib) - (let ((lib (if (null? lib) (current-library) (car lib)))) - (e expr (library-environment lib)))))) - (make-library '(picrin user)) - (current-library '(picrin user)))) + ;; There are two ways to name a library: (foo bar) or foo.bar + ;; The former is normalized to the latter. + + (define (mangle name) + (when (null? name) + (error "library name should be a list of at least one symbols" name)) + + (define (->string n) + (cond + ((symbol? n) + (let ((str (symbol->string n))) + (string-for-each + (lambda (c) + (when (or (char=? c #\.) (char=? c #\:)) + (error "elements of library name may not contain '.' or ':'" n))) + str) + str)) + ((and (number? n) (exact? n) (<= 0 n)) + (number->string n)) + (else + (error "symbol or non-negative integer is required" n)))) + + (define (join strs delim) + (let loop ((res (car strs)) (strs (cdr strs))) + (if (null? strs) + res + (loop (string-append res delim (car strs)) (cdr strs))))) + + (if (symbol? name) + name ; TODO: check symbol names + (string->symbol (join (map ->string name) ".")))) + + (define current-library + (make-parameter '(picrin user) mangle)) + + (define *libraries* + (make-dictionary)) + + (define (find-library name) + (dictionary-has? *libraries* (mangle name))) + + (define (make-library name) + (let ((name (mangle name))) + (let ((env (make-environment + (string->symbol (string-append (symbol->string name) ":")))) + (exports (make-dictionary))) + ;; set up initial environment + (set-identifier! 'define-library 'define-library env) + (set-identifier! 'import 'import env) + (set-identifier! 'export 'export env) + (set-identifier! 'cond-expand 'cond-expand env) + (dictionary-set! *libraries* name `(,env . ,exports))))) + + (define (library-environment name) + (car (dictionary-ref *libraries* (mangle name)))) + + (define (library-exports name) + (cdr (dictionary-ref *libraries* (mangle name)))) + + (define (library-import name sym alias) + (let ((uid (dictionary-ref (library-exports name) sym))) + (let ((env (library-environment (current-library)))) + (set-identifier! alias uid env)))) + + (define (library-export sym alias) + (let ((env (library-environment (current-library))) + (exports (library-exports (current-library)))) + (dictionary-set! exports alias (find-identifier sym env)))) + + + + ;; R7RS library syntax + + (let ((define-transformer + (lambda (name macro) + (dictionary-set! (macro-objects) name macro)))) + + (define-transformer 'define-library + (lambda (form _) + (let ((name (cadr form)) + (body (cddr form))) + (or (find-library name) (make-library name)) + (parameterize ((current-library name)) + (for-each + (lambda (expr) + (eval expr name)) ; TODO parse library declarations + body))))) + + (define-transformer 'cond-expand + (lambda (form _) + (letrec + ((test (lambda (form) + (or + (eq? form 'else) + (and (symbol? form) + (memq form (features))) + (and (pair? form) + (case (car form) + ((library) (find-library (cadr form))) + ((not) (not (test (cadr form)))) + ((and) (let loop ((form (cdr form))) + (or (null? form) + (and (test (car form)) (loop (cdr form)))))) + ((or) (let loop ((form (cdr form))) + (and (pair? form) + (or (test (car form)) (loop (cdr form)))))) + (else #f))))))) + (let loop ((clauses (cdr form))) + (if (null? clauses) + #undefined + (if (test (caar clauses)) + `(,(make-identifier 'begin default-environment) ,@(cdar clauses)) + (loop (cdr clauses)))))))) + + (define-transformer 'import + (lambda (form _) + (let ((caddr + (lambda (x) (car (cdr (cdr x))))) + (prefix + (lambda (prefix symbol) + (string->symbol + (string-append + (symbol->string prefix) + (symbol->string symbol))))) + (getlib + (lambda (name) + (if (find-library name) + name + (error "library not found" name))))) + (letrec + ((extract + (lambda (spec) + (case (car spec) + ((only rename prefix except) + (extract (cadr spec))) + (else + (getlib spec))))) + (collect + (lambda (spec) + (case (car spec) + ((only) + (let ((alist (collect (cadr spec)))) + (map (lambda (var) (assq var alist)) (cddr spec)))) + ((rename) + (let ((alist (collect (cadr spec))) + (renames (map (lambda (x) `(,(car x) . ,(cadr x))) (cddr spec)))) + (map (lambda (s) (or (assq (car s) renames) s)) alist))) + ((prefix) + (let ((alist (collect (cadr spec)))) + (map (lambda (s) (cons (prefix (caddr spec) (car s)) (cdr s))) alist))) + ((except) + (let ((alist (collect (cadr spec)))) + (let loop ((alist alist)) + (if (null? alist) + '() + (if (memq (caar alist) (cddr spec)) + (loop (cdr alist)) + (cons (car alist) (loop (cdr alist)))))))) + (else + (dictionary-map (lambda (x) (cons x x)) + (library-exports (getlib spec)))))))) + (letrec + ((import + (lambda (spec) + (let ((lib (extract spec)) + (alist (collect spec))) + (for-each + (lambda (slot) + (library-import lib (cdr slot) (car slot))) + alist))))) + (for-each import (cdr form))))))) + + (define-transformer 'export + (lambda (form _) + (letrec + ((collect + (lambda (spec) + (cond + ((symbol? spec) + `(,spec . ,spec)) + ((and (list? spec) (= (length spec) 3) (eq? (car spec) 'rename)) + `(,(list-ref spec 1) . ,(list-ref spec 2))) + (else + (error "malformed export"))))) + (export + (lambda (spec) + (let ((slot (collect spec))) + (library-export (car slot) (cdr slot)))))) + (for-each export (cdr form)))))) + + + ;; bootstrap... + + (let () + (make-library '(picrin base)) + (set-car! (dictionary-ref *libraries* (mangle '(picrin base))) default-environment) + (let* ((exports + (library-exports '(picrin base))) + (export-keyword + (lambda (keyword) + (dictionary-set! exports keyword keyword)))) + (for-each export-keyword + '(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)) + (export-keyword 'boolean?) + (dictionary-for-each export-keyword (global-objects))) + (set! eval + (let ((e eval)) + (lambda (expr . lib) + (let ((lib (if (null? lib) (current-library) (car lib)))) + (e expr (library-environment lib)))))) + (make-library '(picrin user))) + + (values current-library + find-library + make-library + library-environment + library-exports + library-import + library-export)))