Open5

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

okuokuokuoku

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

okuokuokuoku

raiseraise-continuable は動いている

raise で投げた例外が guard でキャッチできている。というわけで、 raiseraise-continuable は実装できている。

というかyuniには正にこれをテストするテストが入っているのを思い出した。。

https://github.com/okuoku/yuni/blob/68c7d918892ce8cf104ce940df4300e1d1e7f6de/tests/scheme/exp0.sps

raise-continuableguard の実装の内部で使用されていて、 raise は戻らないが raise-continuable は例外ハンドラの戻り値を返却するという違いがある。この性質によりSchemeの guard は値を返却する。

okuokuokuoku

guard を伴わない error は単に abort する

(import (yuni scheme))

(error "err")
$ ./proto.exe check.scm

Error:
  0: "err"
Aborted (core dumped)

さすがにcoredumpはやりすぎ感があるから、後で emergency_exit あたりに替えとくか。。

okuokuokuoku

guard されていても何となく動く

(import (yuni scheme))
(guard
  (c (#t
      (write (list "Caught exception" c)) (newline)
      #f))
  (error "err")
  )
("Caught exception" ("Error" "err" ()))

動くんじゃん!

okuokuokuoku

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)

https://github.com/okuoku/yuni/blob/68c7d918892ce8cf104ce940df4300e1d1e7f6de/lib-r7c/r7c-report/misc/parameterize.sls#L18-L31

この辺の問題だとわかる。

とりあえず適当にワークアラウンドして後で治そう。。現状のexpanderはこの手のimplicit exportは正しくハンドルできない。

https://github.com/okuoku/yuni/commit/7ad6da92ddb64f4440816d4e48ca9fdce96fc1ed

https://github.com/okuoku/ribbon/issues/1