Kazuki Tsujimoto
kazuk****@callc*****
2006年 1月 8日 (日) 18:55:10 JST
辻本です。 次のコードでコンパイルエラーが出ます。 $ gosh -e '(let ((f (lambda (i) (set! i 0)))) (f (f 1)))' -E exit *** ERROR: Compile Error: [internal error] stray local variable: 関数のインライン化に伴うiformのコピー時に、$lsetがコピー先のlvarを参照しないのが原因でした。 CVS HEADへのパッチです。 Index: src/compile.scm =================================================================== RCS file: /cvsroot/gauche/Gauche/src/compile.scm,v retrieving revision 1.35 diff -u -r1.35 compile.scm --- src/compile.scm 7 Jan 2006 11:13:50 -0000 1.35 +++ src/compile.scm 8 Jan 2006 09:37:49 -0000 @@ -1073,7 +1073,7 @@ (($LREF) ($lref (iform-copy-lvar ($lref-lvar iform) lv-alist))) (($LSET) - ($lset ($lset-lvar iform) (iform-copy ($lset-expr iform) lv-alist))) + ($lset (iform-copy-lvar ($lset-lvar iform) lv-alist) (iform-copy ($lset-expr iform) lv-alist))) (($GREF) ($gref ($gref-id iform))) (($GSET) ---- Kazuki Tsujimoto