psyntax 最新版への道 3

今日も昼過ぎから psyntax をいじっていたが夕方頃に気付いた。そもそも展開時の psyntax の使い方を間違えていた。
psyntax-rev10 を展開するには mosh -b と psyntax-rev0 を利用しないといけないのだ。ロールバックしてやり直し。

準備

mkdir rev0_to_10
cd rev0_to_10
bzr branch lp:~leppie/r6rs-libraries/ironscheme.dev -r10 psyntax-rev10
rm -rf psyntax-rev10/.bzr
cp -r ~/mosh/tools/psyntax-r6rs/psyntax psyntax
rm -rf psyntax/.svn
cp ~/mosh/tools/psyntax-r6rs/psyntax-buildscript-mosh.ss .
psyntax-buildscript-mosh.ss
(define scheme-library-files
  '("psyntax-rev10/compat.ss"
    "psyntax-rev10/internal.ss"
    "psyntax-rev10/config.ss"
    "psyntax-rev10/library-manager.ss"
    "psyntax-rev10/builders.ss"
    "psyntax/expander-mosh.ss"
    "~/mosh/lib/mosh/condition.ss"
    "~/mosh/lib/mosh/io/conditions.ss"
    "~/mosh/lib/mosh/unicode.ss"
    "psyntax/main.ss"))
Makefile
all:
~/mosh/mosh -b psyntax-buildscript-mosh.ss

さて始めましょう

make!

 Condition components:
   1. &error
   2. &message: "cannot find library"
   3. &irritants: ((ironscheme reader))


psyntax-rev10/compat.ss の (ironscheme reader) をコメントアウト

 Condition components:
   1. &error
   2. &who: import
   3. &message: "cannot find identifier"
   4. &irritants: (compile-core)


compile-core はバックエンドが提供するものみたい。ただ求められている動きが分からないので psyntax-rev10/compat.ss に

  (define (compile-core . x)
    (apply error 'comile-core "not implementated" x))
expanding psyntax-rev10/compat.ss
 Condition components:
   1. &error
   2. &who: expander
   3. &message: "unbound identifier"
   4. &irritants: (read-annotated)

psyntax-rev10/compat.ss

(define read-annotated read)
(define (annotation-stripped x) x)
(define (annotation? x) #f)
(define (annotation-source x) '())	
(define (annotation-expression x) x)		
 Condition components:
   1. &error
   2. &who: expander
   3. &message: "cannot export unbound identifier"
   4. &irritants: (make-record-printer)

make-record-printer は IronScheme バックエンドが提供していて

(define rp (make-record-printer 'name printer))

のように使われる。


とりあえず

  (define (make-record-printer name printer)
    (lambda x
      (display "record printer")
      (for-each display x)))
expanding psyntax-rev10/compat.ss
 Condition components:
   1. &error
   2. &who: expander
   3. &message: "cannot export unbound identifier"
   4. &irritants: (serialize-library)
  (define (serialize-library . x)
    (error 'serialize-library "not implementated" x))
  (define (load-serialized-library . x)
    (error 'load-serialized-library "not implementated" x))

お。次のファイルに進んだ。

expanding psyntax-rev10/internal.ss
 Condition components:
   1. &error
   2. &message: "cannot find library"
   3. &irritants: ((ironscheme pretty-print))

コメントアウトした。

 Condition components:
   1. &error
   2. &who: expander
   3. &message: "cannot export unbound identifier"
   4. &irritants: (compile-core-expr)

internal.ss で need-quote-hack? のコメントアウトがおかしかったのが原因。

 Condition components:
   1. &error
   2. &who: expander
   3. &message: "unbound identifier"
   4. &irritants: ((pretty-print ((rewriter #f) x) p))
(define pretty-print write)

またグッと進んだ。

expanding psyntax-rev10/config.ss
expanding psyntax-rev10/library-manager.ss
 Condition components:
   1. &error
   2. &message: "cannot find library"
   3. &irritants: ((ironscheme))

コメントアウトした。

 Condition components:
   1. &error
   2. &who: expander
   3. &message: "unbound identifier"
   4. &irritants: ((library? x))

続きは明日以降。