「なでしこv1」開発掲示板

なでしこv1のバグや要望を書き込む掲示板

@387■ (#1204) 特定条件下で正しいイベントが実行されない(違う部品のが実行される) - U D (2009-09-28 08:29) /高 修正中
【症状】特定条件下で正しくGUI部品のイベントが実行されず、違う部品のイベントが実行される
【要望】正しいイベントが実行されるように。
【バージョン】1.5322
【その他】
一応既に原因の特定と不具合の修正はできたと思うのですが、
元々のコードがなぜこうなっていたのか分からないので、コミット少し保留。
もうちょっと調べます。
できれば、他の方も再現するかどうか報告お願いします。(慎重に対処したいので)

【再現方法】
再現条件の最小化に失敗したので、長いけれどプログラム全文で載せときます。
実行したら、
 1. ステップ実行をクリック
 2. ステップアウトをクリック
 3. 「なにも・・・」と言われるはずなのに、ステップ実行クリック時が実行される
再現するのは、ループ処理中(秒待つ中?)かつ初回クリック時のようですが、詳しくは不明
(初回クリックの説明はつくが、なぜループ処理中なのか説明がつかないf(^^; )

#-----------------------------------
# ここから最後まで #----------------

ウェイトとは変数
ウェイトは~0.1秒待つ

!左限界幅=160
!ASCII表=『                
                
 !"#$%&'()*+,-./
0123456789:;<=>?
@ABCDEFGHIJKLMNO
PQRSTUVWXYZ[\]^_
`abcdefghijklmno
pqrstuvwxyz{|}~


aとは配列
kとは整数

sとは整数
!NORMAL    =$00
!LOOP_BEGIN=$01
!LOOP_END  =$02
!LOOP_BODY =$04

!インクリメント=`+`
!デクリメント =`-`
!ポインタ後進 =`<`
!ポインタ前進 =`>`
!ループ開始  =`[`
!ループ終了  =`]`
!アスキー出力 =`.`

処理とはハッシュ
処理@インクリメント=~ a[k]=a[k]+1
処理@デクリメント =~ a[k]=a[k]-1
処理@ポインタ後進 =~ k=k-1
処理@ポインタ前進 =~ k=k+1
処理@ループ開始  =~ s=LOOP_BEGIN
処理@ループ終了  =~ s=LOOP_END
処理@アスキー出力 =~ PUTCHR(a[k])
●PUTCHR(N)
 CHR(N)をコンソール追加

ステップ実行ハンドラとは変数

編集台とはパネル
そのレイアウトは『全体』

BFEとはTエディタ
その親部品は編集台
そのレイアウトは『全体』
その編集はOK
そのテキストは『++++++++++++++++++++++++++++++++++++++++++++++++++.』

コンソールとはメモ
その親部品は編集台
そのレイアウトは『下』
その文字色は非アクティブ色
その背景色は黒色
その編集はオフ
その折り返しは有効

/*

作業台とはパネル
そのレイアウトは『左』
その幅は左限界幅

プリンとはスプリッタ
その変更した時は~
 もし作業台の幅<左限界幅ならば
  作業台の幅=左限界幅

マクロ箱とはグループボックス
そのテキストは『マクロ』
その親部品は作業台
そのレイアウトは『全体』

マクロとはコンボ
その親部品はマクロ箱
そのレイアウトは『上』

マクロエディタとはメモ
その親部品はマクロ箱
そのレイアウトは『全体』

実行箱とはグループボックス
そのテキストは『実行』
#その親部品は作業台
そのレイアウトは『下』
その高さは120

# */

0,0へ移動

実行とはボタン
#その親部品は実行箱
そのレイアウトは『上』
これがクリックされた時は~
 最適化実行処理

ステップ実行とはボタン
#ステップ実行の親部品は実行箱
ステップ実行のレイアウトは『上』
実行フラグはオフ
ステップ実行がクリックされた時は~
 一文字ずつ実行処理

ステップアウトとはボタン
#ステップアウトの親部品は実行箱
ステップアウトのレイアウトは『上』
ステップアウトがクリックされた時は~
 「なにもないけど。」と言う

/*

カーソル行迄とはボタン
そのテキストは『カーソルまで実行』
その親部品は実行箱
そのレイアウトは『上』

ASCII箱とはグループボックス
そのテキストは『ASCII』
その親部品は作業台
そのHは150
そのレイアウトは『下』

ASCII一覧とはTエディタ
これについて
 親部品はASCII箱
 レイアウトは『全体』
 編集はNG
 テキストはASCII表
 サイズ。
 レイアウトは空
 サイズはそれ
 W=W+50;X=X-30
 H=H+20

# */

●最適化実行処理
 もしBFEの編集がOKならば
  実行コンテクスト初期化
  「Execute [NORMAL MODE]{~}」をコンソール追加
  ステップ実行ハンドラは空
  共通実行処理
 違えば
  実行フラグはオフ
  ウェイト
  ステップ実行ハンドラは空

●一文字ずつ実行処理
 もしBFEの編集がOKならば
  実行コンテクスト初期化
  「Execute [BY STEP]{~}」をコンソール追加
  ステップ実行ハンドラ\0は~
   実行フラグはオン
  ステップ実行ハンドラ\1は~
   (実行フラグ)の間
    ウェイト
   # 実行フラグがオフになるまで待機
  共通実行処理
 違えば
  実行フラグはオフ

●共通実行処理
 BFEの編集はNG
 BFEをBrainFuck実行
 BFEの編集はOK

●実行コンテクスト初期化
 コンソールは空
 a=空#を文字列分解)

●BrainFuck実行({文字列}STRを)
 ARRとは文字列=STRを文字列分解
 Lとは整数=ARRの要素数
 Iとは整数
 深さとは整数
 ループマップとは配列
 改行をコンソール追加
 (I<L)の間
  ステップ実行ハンドラ\0。# 他のボタンを押した時の再処理?を防ぐ
  ステップ実行ハンドラ\1。# ステップ実行時は、ここで処理を待機させる
  対象=ARR[I]
  対象をコンソール追加
  処理@(対象)
  sで条件分岐
   LOOP_BEGINならば
     もしa[k]が0ならば
      ARRでIを深さまでループブレイク
      s=LOOP_BREAK
     違えば
      ループマップ[深さ]=I
     深さ=深さ+1
     s=LOOOP_BODY
   LOOP_ENDならば
    もしa[k]が0ならば
     深さ=深さ-1
     もし深さ>0ならばs=LOOP_BODY
     違えばs=NORMAL
    違えば
     I=ループマップ[深さ]
  I=I+1
  ウェイト
 「{~}Finished」をコンソール追加

# 位置Iから開始して、ARR[I]が目標深度でループ終了になるまで進める。
●ループブレイク(ARRで{参照渡し}Iを目標深度まで)
 現在深度とは整数=目標深度+1
 (現在深度>目標深度)の間
  I=I+1
  ARR[I]で条件分岐
   ループ開始ならば現在深度=現在深度+1
   ループ終了ならば現在深度=現在深度-1

●コンソール追加(Sを)
 コンソール=コンソール&S
  たぶん再現 / NON (2009-09-28 19:24) (#1205)/ 高 修正中
  私の環境では / ひなげし (2009-09-28 20:56) (#1206)/ 高 修正中
  私の環境では。 / choco (2009-09-29 08:41) (#1208)/ 高 修正中
  修正(したはず) / U D (2009-10-01 22:23) (#1213)/ 高 確認待ち
  リカバリ後も…… / ひなげし (2009-11-08 21:30) (#1310)/ 高 確認待ち
    RE:リカバリ後も…… / 粗茶 (2009-11-08 22:45) (#1312)/ 高 調査中
  BrainFuck という言語のインタプリタ / U D (2009-11-09 00:39) (#1313)/ 高 確認待ち
  了解です / ひなげし (2009-11-09 20:22) (#1316)/ 高 確認待ち

(#1204)へ返信する:

👆お手数ですが、いたずら防止のために、「真夏」の読み方を記入してください。

編集時に使うキーを入力(省略可能)

画像ファイル(最大300KB)を添付可能