gencomp 確認
普通の gauche が読めません。色々な意味で時間かかりそげ。
とりあえずトップダウンで見てみます。
;;================================================================ ;; Entry ;; (define (main args) (let-args (cdr args) ((keep-private-macro "keep-private-macro=s" #f) (ext-module "ext-module=s" #f) (output-base "o|output=s" #f) . args) (when keep-private-macro (private-macros-to-keep (map string->symbol (string-split keep-private-macro #\,)))) (match args ((scmfile) (when ext-module (ext-module-file (ensure-ext-module-file ext-module))) (do-it scmfile (or output-base (sys-basename (path-sans-extension scmfile)))) (when ext-module (close-output-port (ext-module-file)))) (else (print "Usage: gosh gencomp [--keep-macro] <file.scm>") (exit 0))) 0))
まず、let-args から。こことか。同じカンジのナニを試してみる。
$ cat test.scm (use gauche.parseopt) (define (main args) (let-args (cdr args) ((keep-private-macro "keep-private-macro=s" #f) (ext-module "ext-module=s" #f) (output-base "o|output=s" #f) . args) (print keep-private-macro) (print ext-module) (print output-base) (print args))) $
実行してみました。
$ gosh ./test.scm test.scm #f #f #f (test.scm) $
ええともう少し色々試験。
$ gosh ./test.scm --keep-private-macro=abcde abcde #f #f () $ gosh ./test.scm --keep-private-macro=abcde test.scm abcde #f #f (test.scm) $
ケツの _. args_ が微妙。順番は大切な模様。もう少し試験。
$ gosh ./test.scm --output=xxx.c --keep-private-macro=abcde test.scm abcde #f xxx.c (test.scm) $ gosh ./test.scm -o xxx.c --keep-private-macro=abcde test.scm abcde #f xxx.c (test.scm) $
むむ。あ、あと scmfile ってのも微妙だったので以下をナニ。最初は util.match を use してなくてハマりました。以下なソレが
(use util.match) (use gauche.parseopt) (define (main args) (let-args (cdr args) ((keep-private-macro "keep-private-macro=s" #f) (ext-module "ext-module=s" #f) (output-base "o|output=s" #f) . args) (print keep-private-macro) (print ext-module) (print output-base) (match args ((scmfile) (print scmfile)))))
こんなカンジでナニ。
$ gosh ./test.scm test.scm #f #f #f test.scm $
when という構文も知らなかったんですが、凄いコアな命令使ってそうで怖い。ってか読んでく速度が微妙スギです。上記のメモ以外にも試行錯誤が盛り沢山ッス。
とりあえず do-it に渡される base って -o が略だったら、って試験してみれば良いのですね ...
gosh> (use file.util) #<undef> gosh> (sys-basename (path-sans-extension "xxx.scm")) gosh>
なんか進捗微妙ですが、台所仕事がある && 仕事なソレがあるみたいなんで一旦ヤメ。とりあえず次の do-it へのとっかかりにはなっているのか。