Bug #192
(V6.65)連続して参照させる再現表記で落ちる
ステータス: | 終了 | 開始日: | 2014/02/18 | |
---|---|---|---|---|
優先度: | 通常 | 期日: | 2014/02/20 | |
担当者: | - | 進捗 %: | 100% | |
カテゴリ: | - | 作業時間の記録: | - | |
対象バージョン: | - |
説明
状況(2014.02.20)¶
V6.70にて対応済み。
(原因)
和音の閉じ括弧を検出した段階で、それと対になっている和音の開き括弧を、それ以降の再現表記(,)認識時点に再現すべき和音として記憶している。
この記憶した和音は閉括弧を検出するたびに更新されるため、今回のように再現先の和音内に再現記述がある場合、
自己参照ループに陥り、再帰呼出し処理でスタックオーバーフローが生じていた。
なお本障害は和音の再現表記のみならず、同様の理由で連符の再現表記でも起こった。
(d) (()) ()(対処)
一度再現処理を施した再現先を記憶しておき、二度目以降の再現処理において自己参照を引き起こす状態か否かをチェックし、
もし自己参照が起こる場合は、記憶しておいた再現先を再利用して再現を実施するという一連の処理を組み込んだ。
またこの処理が駆動する場合は、閉括弧検出時に更新する再現先ポイントも再利用位置にシフトさせ、
多段階、多階層の再現処理でも自己参照回避が正しく実施されるよう工夫した。
自己参照チェックはマクロ展開も含んだ再帰処理であるためMuseコンパイルの性能を劣化させるが、
和音や連符の括弧外にある再現表記は自己参照が起こらないことは自明であるため、その場合はこの処理を駆動させない工夫をした。
よって、連符内連符など多階層の再現表記を利用しない従前データでは性能劣化はほとんど生じない。
また再利用のための再現先記憶域は、従前から存在する括弧対の管理変数を使い回すことでメモリ効率の劣化を回避した。
概要(2014.02.18)¶
Muse を墜とす 7 文字
[d][,],
d はなくても墜ちます。
[][,],
関連するチケット