再編進行中
log
書きましたよ。むしろ書かせましたよ。その後 20 分ぐらいひたすら変更に問題がないことを確認しては n (次の変更目印へ) を押してました。うあ…
Gauche で正規表現をうまく操れなくて四苦八苦。見るも無惨な source になりました。件の bug も macro で回避してるし…
しかしこうやってグロい code を書いては自分で読めなくなるのを繰り返すことで、そのうち綺麗な code が書けるようになるのれす。めげずに苦労を重ねましょう。
log 書き
サボりたくて仕方がない…
名前変更に使った script をごにょごにょやって log を生成させてみる…実行すらできない。何で?
jun@debian /dvl/uim/org/branches/r5rs/sigscheme $ cat rename-functions.scm (use srfi-13) (use srfi-1) (define (rename) (define (regexp-fold str rules) (fold (lambda (rule str) (regexp-replace-all (first rule) str (second rule))) str rules)) (define (canonicalize func-name) (regexp-fold func-name `((#/^(?:Sig)?Scm(Exp|Op)?_/ ,(lambda (m) (string-append "scm_" (let ((s (rxmatch-substring m 1))) (cond ((equal? s "Op") "p_") ((equal? s "Exp") "s_") (else "")))))) (#/_New/ "_make") (#/_V([A-Z].+)Printf/ "_\\1_vprintf") (#/TailRec/ "_tailrec") ) )) (define (splice-underscores function) (regexp-replace #/^_/ (regexp-replace-all #/_*([A-Z0-9]+)/ function (lambda (m) (string-append "_" (rxmatch-substring m 1)))) "") ) (define (map-ident str) (let ((new-s (string-downcase (splice-underscores (canonicalize str))))) (if (not (string=? str new-s)) (display #`",|str|\t,|new-s|")) new-s)) (define (fix-function-names str) (regexp-replace-all #/((?:Sig)?Scm(Exp|Op)?_\w+)/ str (lambda (m) (let ((s (rxmatch-substring m 1))) (if (rxmatch #/[a-z]/ s) (map-ident s) s))) )) (define (fix-function-declaration str) (regexp-replace #/^(\s*DECLARE_FUNCTION\(\".*?\", )(.*?)\)\;$/ str (lambda (m) (string-append (rxmatch-substring m 1) (map-ident (rxmatch-substring m 2)) ");")))) (let loop ((line (read-line))) (unless (eof-object? line) (display (fix-function-names (fix-function-declaration line))) (display #\newline) (loop (read-line)) )) ) (define (main args) (if #t (with-input-from-file "error.c.bak" rename) (rename))) jun@debian /dvl/uim/org/branches/r5rs/sigscheme $ gosh rename-functions.scm *** ERROR: Compile Error: [internal error] stray local variable: "./rename-functions.scm":3:(define (rename) (define (regexp-fol ... Stack Trace: _______________________________________
[internal error] って… もしかして Gauche 自身の bug 踏んだ? でも何か怪しい。
test してる?
変更前後のやつを用意して runtest.sh で対照実験。何か immutable string 周りで glibc がやたらと memory 破壊を検出する。kzk さん?
げ
関数 table 生成も変更するのか。だる。
そんなわけで読んだことも書いたこともない Ruby で書かれた script をいじる私。#{} とか推論ではわからん。Manual はどこだ。
ああわかった。文字列に式埋め込むのね。やっぱ manual いらね。
ErrorObj
関数名はやっぱり大域変数で渡した方がいいかも。とりあえず workaround 書いて後からなんとかしよう。
名前
いくつか始末に困る関数があるな。変数型名が入ってるやつとか、new が後ろの方についてるやつとか。あと SigScm_ErrorObj() は obsolete したはずだけど新しい macro に使われてるし。とりあえず commit して反応見るか。
…まだ check が終わってないんだが