lmntal / slim

slim LMNtal implementation
Other
18 stars 5 forks source link

Fix bugs in deleteconnectors instruction applied to data atoms. #264

Closed icecocoa6 closed 3 years ago

icecocoa6 commented 3 years ago
eval(C), $c[E, C], E = add(X, Y) :-
    $z=X + Y, ground($c) |
    eval(C), $c[Z, C], Z = $z.

eval(add(1, 2)).

上記コードを実行したときにdeleteconnectorsでSegmentation faultしていたのを修正. deleteconnectorsは型付プロセス(ground)のコピーの際にinsertconnectorsとともに使われる命令で,insertconnectorsによって生成された'='/2アトムを削除する. このとき,'='/2アトムの片方にデータアトムがあるとクラッシュしていた. 上記再現コードのようにデータアトムにgroundでマッチすると(条件によっては?)発生する.

SLIMではデータアトム同士が直接繋がることはないので,deleteconnectors実行時に'='/2アトムの両方がデータアトムになるような状況は起きないはず.