stuncloud/UWSCR

class不具合

Closed this issue · 1 comments

概要

  • デストラクタが実行されない
  • NOTHING代入でデッドロックする

再現コード

class C
    dim n
    procedure C(n)
        this.n = n
    fend

    procedure _C_()
        print "disposed: <#n>"
    fend
endclass

c1 = C(1)
c1 = "" // デストラクタが実行されない

c2 = C(2)
c2 = NOTHING // デッドロック

実行環境

  • UWSCRバージョン: 0.14.0

c2のケースはデストラクタでクラスメンバを呼んでいて、かつNOTHINGを代入した(ClassInstance::disposeを呼んだ)場合にデッドロックしている

    procedure _C_()
-      print "disposed: <#n>"
+      print 1
    fend

とすれば動作する

c1のケースはそもそもClassInstance::disposeが呼ばれていない (ClassInstanceがdropしていない)