[Gauche-devel-jp] iformのコピーと$lsetの組み合わせによるコンパイルエラー

Back to archive index

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




Gauche-devel-jp メーリングリストの案内
Back to archive index