psyntax 最新版への道 5
前回までのあらすじ
psyntax-rev10 が展開できたが実行すると
1. &assertion 2. &who: (lambda G12971id G12972name G12973ver G12974imp* G12975vis* G12976inv* G12977exp-subst G12978exp-env G12974 3. &message: "wrong number of arguments (required 14, got 11)" 4. &irritants: ()
と怒られる。
さて
上のエラーは psyntax-buildscript-mosh.ss で
`(install-library ',id ',name ',version ',import-libs ',visit-libs ',invoke-libs ',subst ',env values values ',visible?)
というコードがあるのだけど、これは psyntax-rev0 用のコードなので直す必要がある。
ironscheme-buildscript.ss を参考にすれば良いだろう。
`(install-library ',id ',name ',version ',import-libs ',visit-libs ',invoke-libs ',subst ',env values values '#f '#f ',visible? '#f)
増えた引数を #f にすれば良いみたい。
次。
Condition components: 1. &assertion 2. &who: apply 3. &message: "invalid application" 4. &irritants: (#f)
(G12494G12365make-parameter (G20957G20877command-line)
command-line が unbound だ。get-command-line をバックエンドが export するようにするか。
Condition components: 1. &assertion 2. &who: library-path 3. &message: "not a list of strings" 4. &irritants: (".")
リストにした。
(library-path '("."))
とりあえず空振り実行するようになった。
psyntax-rev0 のように main.ss に
(display "r6rs psyntax ready\n") (let ((args (command-line))) (unless (= (length args) 2) (display "provide a script name argument\n") ) (let ((script-name (car args)) (args (cdr args))) (load-r6rs-top-level (car args) 'load)))
実行してみたが。途中で ASSERT で止まる。
(define library-body-expander (lambda (name exp* imp* b* top?) (define itc (make-collector)) (parameterize ((imp-collector itc) (top-level-context #f))
parameterize で死ぬみたい。
展開後のコードを見てみたらこれは明らかにおかしいね。
((lambda (G18692G18688cdr |G18693|G18689((
なぜこんなことになったのだろうか?→gensym の引数に pair が渡りひどいことに。
Condition components: 1. &assertion 2. &who: open-file-input-port 3. &message: "string required, but got (library-letrec* () ((G0 G1 (begin (display '\"muge!!!\") (void)))) (void))" 4. &irritants: ()
そういえば library-letrec* はバックエンドに定義されていないので config で #f とした。ついでに case-lambda も。
2. &who: open-file-input-port 3. &message: "string required, but got ((lambda (G0) (begin (set! G0 (begin (display '\"muge!!!\") (void))) (void))" 4. &irritants: ()
(set-symbol-value! 'compile compile) と上書きされていたのが原因だった。
ついに動いたよ!わーい。