Open5
ribbon: `raise` と `error` の実装

REPLを用意する第一歩ということで。。

raise
と raise-continuable
は動いている
raise
で投げた例外が guard
でキャッチできている。というわけで、 raise
と raise-continuable
は実装できている。
というかyuniには正にこれをテストするテストが入っているのを思い出した。。
raise-continuable
は guard
の実装の内部で使用されていて、 raise
は戻らないが raise-continuable
は例外ハンドラの戻り値を返却するという違いがある。この性質によりSchemeの guard
は値を返却する。

guard
を伴わない error
は単に abort
する
(import (yuni scheme))
(error "err")
$ ./proto.exe check.scm
Error:
0: "err"
Aborted (core dumped)
さすがにcoredumpはやりすぎ感があるから、後で emergency_exit
あたりに替えとくか。。

guard
されていても何となく動く
(import (yuni scheme))
(guard
(c (#t
(write (list "Caught exception" c)) (newline)
#f))
(error "err")
)
("Caught exception" ("Error" "err" ()))
動くんじゃん!

parameterize
が動いていない
...そこ?
(import (yuni scheme))
(define p0 (make-parameter 0))
(parameterize
((p0 1))
(display (list 'p0: (p0))) (newline)
)
(display (list 'p0: (p0))) (newline)
Error:
0: "bad parameter syntax"
Aborted (core dumped)
この辺の問題だとわかる。
とりあえず適当にワークアラウンドして後で治そう。。現状のexpanderはこの手のimplicit exportは正しくハンドルできない。