Generalize `VDBInstructionListView`
authorJan Vrany <jan.vrany@fit.cvut.cz>
Mon, 10 Jun 2019 14:36:46 +0100
changeset 164 364ebdd1d42c
parent 163 05ff64275e04
child 165 1e2a4cb4afdd
Generalize `VDBInstructionListView` ...so it can show any object that responds to `#disassemble`. In addition, a frame(Holder) can be set to highlight current PC like before.
Make.proto
Make.spec
VDBAbstractApplication.st
VDBDebuggerApplication.st
VDBFramePresenter.st
VDBInstructionListApplication.st
VDBSourceAndDisassemblyApplication.st
VDBStackApplication.st
VDBUnixReplayServerConsoleApplication.st
bc.mak
libInit.cc
tests/VDBAbstractApplicationTests.st
tests/VDBInstructionListApplicationTests.st
--- a/Make.proto	Sun Jun 09 11:19:45 2019 +0100
+++ b/Make.proto	Mon Jun 10 14:36:46 2019 +0100
@@ -171,12 +171,12 @@
 $(OUTDIR)VDBSimpleDebuggerConsoleApplication.$(O) VDBSimpleDebuggerConsoleApplication.$(C) VDBSimpleDebuggerConsoleApplication.$(H): VDBSimpleDebuggerConsoleApplication.st $(INCLUDE_TOP)/jv/libgdbs/GDBCommandStatus.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractConsoleApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
 $(OUTDIR)VDBTabbingContainer.$(O) VDBTabbingContainer.$(C) VDBTabbingContainer.$(H): VDBTabbingContainer.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractContainer.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
 $(OUTDIR)VDBAbstractTreeApplication.$(O) VDBAbstractTreeApplication.$(C) VDBAbstractTreeApplication.$(H): VDBAbstractTreeApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractContentsApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractListApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
-$(OUTDIR)VDBBreakpointListApplication.$(O) VDBBreakpointListApplication.$(C) VDBBreakpointListApplication.$(H): VDBBreakpointListApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractContentsApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractListApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
 $(OUTDIR)VDBFrameApplication.$(O) VDBFrameApplication.$(C) VDBFrameApplication.$(H): VDBFrameApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractContainer.$(H) $(INCLUDE_TOP)/jv/vdb/VDBTabbingContainer.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
 $(OUTDIR)VDBSourceAndDisassemblyApplication.$(O) VDBSourceAndDisassemblyApplication.$(C) VDBSourceAndDisassemblyApplication.$(H): VDBSourceAndDisassemblyApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractContainer.$(H) $(INCLUDE_TOP)/jv/vdb/VDBTabbingContainer.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
 $(OUTDIR)VDBUnixDebuggerConsoleApplication.$(O) VDBUnixDebuggerConsoleApplication.$(C) VDBUnixDebuggerConsoleApplication.$(H): VDBUnixDebuggerConsoleApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractConsoleApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractUnixConsoleApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
 $(OUTDIR)VDBUnixInferiorConsoleApplication.$(O) VDBUnixInferiorConsoleApplication.$(C) VDBUnixInferiorConsoleApplication.$(H): VDBUnixInferiorConsoleApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractConsoleApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractUnixConsoleApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
 $(OUTDIR)VDBUnixReplayServerConsoleApplication.$(O) VDBUnixReplayServerConsoleApplication.$(C) VDBUnixReplayServerConsoleApplication.$(H): VDBUnixReplayServerConsoleApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractConsoleApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractUnixConsoleApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
+$(OUTDIR)VDBBreakpointListApplication.$(O) VDBBreakpointListApplication.$(C) VDBBreakpointListApplication.$(H): VDBBreakpointListApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractContentsApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractListApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractTreeApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
 $(OUTDIR)VDBInstructionListApplication.$(O) VDBInstructionListApplication.$(C) VDBInstructionListApplication.$(H): VDBInstructionListApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractContentsApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractListApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractTreeApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
 $(OUTDIR)VDBRegisterListApplication.$(O) VDBRegisterListApplication.$(C) VDBRegisterListApplication.$(H): VDBRegisterListApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractContentsApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractListApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractTreeApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
 $(OUTDIR)VDBStackApplication.$(O) VDBStackApplication.$(C) VDBStackApplication.$(H): VDBStackApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractContentsApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractListApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractTreeApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
--- a/Make.spec	Sun Jun 09 11:19:45 2019 +0100
+++ b/Make.spec	Mon Jun 10 14:36:46 2019 +0100
@@ -88,12 +88,12 @@
 	VDBSimpleDebuggerConsoleApplication \
 	VDBTabbingContainer \
 	VDBAbstractTreeApplication \
-	VDBBreakpointListApplication \
 	VDBFrameApplication \
 	VDBSourceAndDisassemblyApplication \
 	VDBUnixDebuggerConsoleApplication \
 	VDBUnixInferiorConsoleApplication \
 	VDBUnixReplayServerConsoleApplication \
+	VDBBreakpointListApplication \
 	VDBInstructionListApplication \
 	VDBRegisterListApplication \
 	VDBStackApplication \
@@ -140,12 +140,12 @@
     $(OUTDIR)VDBSimpleDebuggerConsoleApplication.$(O) \
     $(OUTDIR)VDBTabbingContainer.$(O) \
     $(OUTDIR)VDBAbstractTreeApplication.$(O) \
-    $(OUTDIR)VDBBreakpointListApplication.$(O) \
     $(OUTDIR)VDBFrameApplication.$(O) \
     $(OUTDIR)VDBSourceAndDisassemblyApplication.$(O) \
     $(OUTDIR)VDBUnixDebuggerConsoleApplication.$(O) \
     $(OUTDIR)VDBUnixInferiorConsoleApplication.$(O) \
     $(OUTDIR)VDBUnixReplayServerConsoleApplication.$(O) \
+    $(OUTDIR)VDBBreakpointListApplication.$(O) \
     $(OUTDIR)VDBInstructionListApplication.$(O) \
     $(OUTDIR)VDBRegisterListApplication.$(O) \
     $(OUTDIR)VDBStackApplication.$(O) \
--- a/VDBAbstractApplication.st	Sun Jun 09 11:19:45 2019 +0100
+++ b/VDBAbstractApplication.st	Mon Jun 10 14:36:46 2019 +0100
@@ -487,8 +487,10 @@
             in:window topView id
     ].
     window openInGroup: self window windowGroup.
+    window raise.
 
     "Created: / 14-03-2018 / 09:47:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 10-06-2019 / 14:16:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 doPinMenuAs: label item: tearOffMenuItem 
--- a/VDBDebuggerApplication.st	Sun Jun 09 11:19:45 2019 +0100
+++ b/VDBDebuggerApplication.st	Mon Jun 10 14:36:46 2019 +0100
@@ -1493,10 +1493,12 @@
 
     application := VDBInstructionListApplication new
                     debuggerHolder: self debuggerHolder;  
-                    frameHolder: self selectedFrameHolder.
+                    disassemblableHolder: self selectedFrameHolder;
+                    frameHolder: self selectedFrameHolder;
+                    yourself.
     self doOpenToolApplication: application.
 
-    "Modified: / 02-10-2018 / 10:15:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 10-06-2019 / 12:47:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 doOpenToolRegisters
@@ -1801,6 +1803,7 @@
     "Modified: / 01-06-2017 / 23:16:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
+
 !VDBDebuggerApplication methodsFor:'startup & release'!
 
 closeRequestFor:aTopView
--- a/VDBFramePresenter.st	Sun Jun 09 11:19:45 2019 +0100
+++ b/VDBFramePresenter.st	Mon Jun 10 14:36:46 2019 +0100
@@ -117,10 +117,11 @@
     VDBInstructionListApplication new
         title: (self class classResources string: '%1 (disassembly)' with: frame func ? '?');
         debugger: frame debugger;
+        disassemblable: frame;
         frame: frame;
         open.
 
-    "Modified: / 02-10-2018 / 10:14:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 10-06-2019 / 14:04:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !VDBFramePresenter methodsFor:'menu-queries'!
--- a/VDBInstructionListApplication.st	Sun Jun 09 11:19:45 2019 +0100
+++ b/VDBInstructionListApplication.st	Mon Jun 10 14:36:46 2019 +0100
@@ -13,7 +13,7 @@
 VDBAbstractTreeApplication subclass:#VDBInstructionListApplication
 	instanceVariableNames:'instructionListHolder instructionBasicBlocks
 		selectedInstructionHolder selectedInstructionBranchTargetAddress
-		selectedInstructionBasicBlock frameHolder
+		selectedInstructionBasicBlock disassemblableHolder frameHolder
 		canExecStepOverInstructionHolder canExecStepIntoInstructionHolder
 		canExecBackOverInstructionHolder canExecBackIntoInstructionHolder'
 	classVariableNames:''
@@ -203,16 +203,28 @@
 
 !VDBInstructionListApplication methodsFor:'accessing'!
 
+disassemblable
+    ^ self disassemblableHolder value
+
+    "Created: / 10-06-2019 / 10:06:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+disassemblable: anObject
+    self disassemblableHolder value: anObject
+
+    "Created: / 10-06-2019 / 10:06:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 frame
     ^ self frameHolder value
 
-    "Created: / 06-08-2018 / 13:24:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Created: / 10-06-2019 / 12:44:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 frame: aGDBFrame
-    self frameHolder value: aGDBFrame
+    ^ self frameHolder value: aGDBFrame
 
-    "Created: / 06-08-2018 / 13:22:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Created: / 10-06-2019 / 12:44:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 instructionList
@@ -230,8 +242,8 @@
 !VDBInstructionListApplication methodsFor:'aspects'!
 
 backgroundColorFor: aVDBPresenter
-    (frameHolder value notNil and:[aVDBPresenter isInstructionPresenter]) ifTrue:[ 
-        frameHolder value address == aVDBPresenter address ifTrue:[ 
+    (self frame notNil and:[aVDBPresenter isInstructionPresenter]) ifTrue:[ 
+        disassemblableHolder value address == aVDBPresenter address ifTrue:[ 
             ^ Color green.
         ].
     ].
@@ -259,7 +271,38 @@
     ^ nil
 
     "Created: / 26-06-2018 / 11:26:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 16-08-2018 / 11:50:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 10-06-2019 / 14:52:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+disassemblableHolder
+    disassemblableHolder isNil ifTrue:[
+        disassemblableHolder := ValueHolder new.
+        disassemblableHolder addDependent:self.
+    ].
+    ^ disassemblableHolder
+
+    "Created: / 10-06-2019 / 10:03:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+disassemblableHolder:something
+    "set the 'frameHolder' value holder (automatically generated)"
+
+    |oldValue newValue|
+
+    disassemblableHolder notNil ifTrue:[
+        oldValue := disassemblableHolder value.
+        disassemblableHolder removeDependent:self.
+    ].
+    disassemblableHolder := something.
+    disassemblableHolder notNil ifTrue:[
+        disassemblableHolder addDependent:self.
+    ].
+    newValue := disassemblableHolder value.
+    oldValue ~~ newValue ifTrue:[
+        self update:#value with:newValue from:disassemblableHolder.
+    ].
+
+    "Created: / 10-06-2019 / 10:03:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 foregroundColorFor: aVDBAbstractPresenter
@@ -380,8 +423,12 @@
         self enqueueDelayedUpdateInternalList.
         ^ self.
     ].
+    sender == disassemblableHolder ifTrue:[ 
+        self enqueueDelayedUpdateContents.
+        ^ self.
+    ].
     sender == frameHolder ifTrue:[ 
-        self enqueueDelayedUpdateContents.
+        self enqueueDelayedInvalidateInternalList.
         ^ self.
     ].
     sender == selectedInstructionHolder ifTrue:[ 
@@ -390,7 +437,7 @@
     super update:aspect with:param from:sender
 
     "Modified: / 23-01-2019 / 16:37:11 / jv"
-    "Modified: / 14-02-2019 / 16:52:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 10-06-2019 / 12:43:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 updateAfterSelectedInstructionChanged
@@ -421,23 +468,10 @@
 !
 
 updateButtonEnablements
-    | frame thread threadIsStopped canReverse |
-
-    frame := self frameHolder value.
-    frame notNil ifTrue:[ 
-        thread := frame thread.
-    ].
-    threadIsStopped := thread notNil and:[ thread isStopped ].
-    canReverse := debugger notNil and:[ debugger hasFeature: 'reverse' ].
-
-    self canExecStepIntoInstructionHolder value: threadIsStopped.
-    self canExecStepOverInstructionHolder value: threadIsStopped.
-
-    self canExecBackIntoInstructionHolder value: threadIsStopped & canReverse.
-    self canExecBackOverInstructionHolder value: threadIsStopped & canReverse.
+    self enqueueDelayedUpdateButtonEnablements
 
     "Created: / 01-09-2018 / 14:49:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 28-09-2018 / 07:04:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 10-06-2019 / 10:11:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !VDBInstructionListApplication methodsFor:'change & update-delayed'!
@@ -448,12 +482,13 @@
     "/ First, force update of )cached) frames to get 
     "/ updated PC.
     frame := self frame.
-    (frame notNil and:[frame thread isStopped]) ifTrue:[
+    frame notNil ifTrue:[
         frame thread stack        
     ].    
     super delayedInvalidateInternalList
 
     "Created: / 03-10-2018 / 12:10:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 10-06-2019 / 12:45:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 delayedUpdateBasicBlocks
@@ -469,11 +504,11 @@
 !
 
 delayedUpdateButtonEnablements
-    | frame thread threadIsStopped canReverse |
+    | disassemblable thread threadIsStopped canReverse |
 
-    frame := self frameHolder value.
-    frame notNil ifTrue:[ 
-        thread := frame thread.
+    disassemblable := self disassemblable.
+    (disassemblable notNil and:[disassemblable respondsTo: #thread]) ifTrue:[ 
+        thread := disassemblable thread.
     ].
     threadIsStopped := thread notNil and:[ thread isStopped ].
     canReverse := debugger notNil and:[ debugger hasFeature: 'reverse' ].
@@ -485,16 +520,17 @@
     self canExecBackOverInstructionHolder value: threadIsStopped & canReverse.
 
     "Created: / 03-10-2018 / 12:12:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 10-06-2019 / 10:17:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 delayedUpdateContents
-    | frame instructions |
+    | disassemblable instructions |
 
-    frame := self frame.
+    disassemblable := self disassemblable.
     instructions := #().
-    (frame notNil and:[ frame hasSymbol ]) ifTrue:[
+    (disassemblable notNil "and:[ disassemblable hasSymbol ]") ifTrue:[
         [ 
-            instructions := frame disassemble.
+            instructions := disassemblable disassemble.
             self hideMessage.
         ] on: GDBError do:[:ex | 
             self showMessage: (self resources string: (ex parameter propertyAt: #msg)).
@@ -504,7 +540,7 @@
     self updateButtonEnablements.
 
     "Created: / 01-10-2018 / 12:55:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 08-06-2019 / 16:29:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 10-06-2019 / 10:50:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 delayedUpdateInternalList
@@ -534,7 +570,7 @@
     self enqueueDelayedUpdateBasicBlocks.
 
     "Created: / 27-02-2015 / 15:47:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 16-08-2018 / 16:13:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 10-06-2019 / 12:45:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 delayedUpdateSelection
@@ -790,7 +826,7 @@
 
 scrollToAddress: address
     internalListView isNil ifTrue:[ ^ self ].
-    (self frame notNil and:[ self instructionList notEmptyOrNil ]) ifTrue:[ 
+    (self disassemblable notNil and:[ self instructionList notEmptyOrNil ]) ifTrue:[ 
         self instructionPresentersDo:[ :each |
             each address = address ifTrue:[ 
                 self scrollToListItem: each.
@@ -799,6 +835,7 @@
     ].
 
     "Created: / 07-08-2018 / 13:36:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 10-06-2019 / 10:16:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !VDBInstructionListApplication class methodsFor:'documentation'!
--- a/VDBSourceAndDisassemblyApplication.st	Sun Jun 09 11:19:45 2019 +0100
+++ b/VDBSourceAndDisassemblyApplication.st	Mon Jun 10 14:36:46 2019 +0100
@@ -52,7 +52,12 @@
         frameHolder removeDependent:self.
     ].
     frameHolder := aValueModel.
-    components do:[:each | each application perform: #frameHolder: with: frameHolder ].
+    components do:[:each | 
+        each application perform: #frameHolder: with: frameHolder .
+        MessageNotUnderstood ignoreIn:[  
+            each application perform: #disassemblableHolder: with: frameHolder
+        ]
+    ].
     frameHolder notNil ifTrue:[
         frameHolder addDependent:self.
     ].
@@ -61,7 +66,7 @@
         self update:#value with:newValue from:frameHolder.
     ].
 
-    "Modified: / 01-10-2018 / 13:09:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 10-06-2019 / 22:37:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !VDBSourceAndDisassemblyApplication methodsFor:'initialization'!
@@ -74,9 +79,19 @@
                             yourself).
     self addApplication: (VDBInstructionListApplication new
                             debuggerHolder: self debuggerHolder;
-                            frameHolder:  self frameHolder;
+                            disassemblableHolder: self frameHolder;
+                            frameHolder: self frameHolder;
                             yourself)
 
     "Created: / 01-10-2018 / 12:45:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 10-06-2019 / 12:46:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified (format): / 10-06-2019 / 22:31:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
+!VDBSourceAndDisassemblyApplication class methodsFor:'documentation'!
+
+version_HG
+
+    ^ '$Changeset: <not expanded> $'
+! !
+
--- a/VDBStackApplication.st	Sun Jun 09 11:19:45 2019 +0100
+++ b/VDBStackApplication.st	Mon Jun 10 14:36:46 2019 +0100
@@ -235,7 +235,7 @@
     "/ again, so care for this.
 
     contentsValid ifFalse:[ 
-        self enqueueUpdateAfterThreadStopped: thread.               
+        self enqueueDelayedUpdateContents.
         ^ self
     ].
 
@@ -254,7 +254,7 @@
 
     "Created: / 22-09-2014 / 23:21:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
     "Modified: / 16-01-2018 / 20:22:04 / jv"
-    "Modified: / 14-02-2019 / 16:53:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 08-06-2019 / 07:35:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 delayedUpdateInternalList
--- a/VDBUnixReplayServerConsoleApplication.st	Sun Jun 09 11:19:45 2019 +0100
+++ b/VDBUnixReplayServerConsoleApplication.st	Mon Jun 10 14:36:46 2019 +0100
@@ -228,3 +228,10 @@
     "Created: / 27-07-2018 / 07:49:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
+!VDBUnixReplayServerConsoleApplication class methodsFor:'documentation'!
+
+version_HG
+
+    ^ '$Changeset: <not expanded> $'
+! !
+
--- a/bc.mak	Sun Jun 09 11:19:45 2019 +0100
+++ b/bc.mak	Mon Jun 10 14:36:46 2019 +0100
@@ -118,12 +118,12 @@
 $(OUTDIR)VDBSimpleDebuggerConsoleApplication.$(O) VDBSimpleDebuggerConsoleApplication.$(C) VDBSimpleDebuggerConsoleApplication.$(H): VDBSimpleDebuggerConsoleApplication.st $(INCLUDE_TOP)\jv\libgdbs\GDBCommandStatus.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractConsoleApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
 $(OUTDIR)VDBTabbingContainer.$(O) VDBTabbingContainer.$(C) VDBTabbingContainer.$(H): VDBTabbingContainer.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractContainer.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
 $(OUTDIR)VDBAbstractTreeApplication.$(O) VDBAbstractTreeApplication.$(C) VDBAbstractTreeApplication.$(H): VDBAbstractTreeApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractContentsApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractListApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
-$(OUTDIR)VDBBreakpointListApplication.$(O) VDBBreakpointListApplication.$(C) VDBBreakpointListApplication.$(H): VDBBreakpointListApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractContentsApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractListApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
 $(OUTDIR)VDBFrameApplication.$(O) VDBFrameApplication.$(C) VDBFrameApplication.$(H): VDBFrameApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractContainer.$(H) $(INCLUDE_TOP)\jv\vdb\VDBTabbingContainer.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
 $(OUTDIR)VDBSourceAndDisassemblyApplication.$(O) VDBSourceAndDisassemblyApplication.$(C) VDBSourceAndDisassemblyApplication.$(H): VDBSourceAndDisassemblyApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractContainer.$(H) $(INCLUDE_TOP)\jv\vdb\VDBTabbingContainer.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
 $(OUTDIR)VDBUnixDebuggerConsoleApplication.$(O) VDBUnixDebuggerConsoleApplication.$(C) VDBUnixDebuggerConsoleApplication.$(H): VDBUnixDebuggerConsoleApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractConsoleApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractUnixConsoleApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
 $(OUTDIR)VDBUnixInferiorConsoleApplication.$(O) VDBUnixInferiorConsoleApplication.$(C) VDBUnixInferiorConsoleApplication.$(H): VDBUnixInferiorConsoleApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractConsoleApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractUnixConsoleApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
 $(OUTDIR)VDBUnixReplayServerConsoleApplication.$(O) VDBUnixReplayServerConsoleApplication.$(C) VDBUnixReplayServerConsoleApplication.$(H): VDBUnixReplayServerConsoleApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractConsoleApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractUnixConsoleApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
+$(OUTDIR)VDBBreakpointListApplication.$(O) VDBBreakpointListApplication.$(C) VDBBreakpointListApplication.$(H): VDBBreakpointListApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractContentsApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractListApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractTreeApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
 $(OUTDIR)VDBInstructionListApplication.$(O) VDBInstructionListApplication.$(C) VDBInstructionListApplication.$(H): VDBInstructionListApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractContentsApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractListApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractTreeApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
 $(OUTDIR)VDBRegisterListApplication.$(O) VDBRegisterListApplication.$(C) VDBRegisterListApplication.$(H): VDBRegisterListApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractContentsApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractListApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractTreeApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
 $(OUTDIR)VDBStackApplication.$(O) VDBStackApplication.$(C) VDBStackApplication.$(H): VDBStackApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractContentsApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractListApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractTreeApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
--- a/libInit.cc	Sun Jun 09 11:19:45 2019 +0100
+++ b/libInit.cc	Mon Jun 10 14:36:46 2019 +0100
@@ -53,12 +53,12 @@
 extern void _VDBSimpleDebuggerConsoleApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _VDBTabbingContainer_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _VDBAbstractTreeApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
-extern void _VDBBreakpointListApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _VDBFrameApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _VDBSourceAndDisassemblyApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _VDBUnixDebuggerConsoleApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _VDBUnixInferiorConsoleApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _VDBUnixReplayServerConsoleApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
+extern void _VDBBreakpointListApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _VDBInstructionListApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _VDBRegisterListApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _VDBStackApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
@@ -114,12 +114,12 @@
     _VDBSimpleDebuggerConsoleApplication_Init(pass,__pRT__,snd);
     _VDBTabbingContainer_Init(pass,__pRT__,snd);
     _VDBAbstractTreeApplication_Init(pass,__pRT__,snd);
-    _VDBBreakpointListApplication_Init(pass,__pRT__,snd);
     _VDBFrameApplication_Init(pass,__pRT__,snd);
     _VDBSourceAndDisassemblyApplication_Init(pass,__pRT__,snd);
     _VDBUnixDebuggerConsoleApplication_Init(pass,__pRT__,snd);
     _VDBUnixInferiorConsoleApplication_Init(pass,__pRT__,snd);
     _VDBUnixReplayServerConsoleApplication_Init(pass,__pRT__,snd);
+    _VDBBreakpointListApplication_Init(pass,__pRT__,snd);
     _VDBInstructionListApplication_Init(pass,__pRT__,snd);
     _VDBRegisterListApplication_Init(pass,__pRT__,snd);
     _VDBStackApplication_Init(pass,__pRT__,snd);
--- a/tests/VDBAbstractApplicationTests.st	Sun Jun 09 11:19:45 2019 +0100
+++ b/tests/VDBAbstractApplicationTests.st	Mon Jun 10 14:36:46 2019 +0100
@@ -93,8 +93,11 @@
     window notNil ifTrue:[ window waitUntilEventsProcessed ].
     debugger waitUntilAlCommandsProcessed.
     window notNil ifTrue:[ window waitUntilEventsProcessed ].
+    Delay waitForMilliseconds: 200.
 
     "Created: / 23-01-2019 / 21:42:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 12-06-2019 / 16:21:16 / jv"
+    "Modified: / 12-06-2019 / 16:28:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !VDBAbstractApplicationTests class methodsFor:'documentation'!
--- a/tests/VDBInstructionListApplicationTests.st	Sun Jun 09 11:19:45 2019 +0100
+++ b/tests/VDBInstructionListApplicationTests.st	Mon Jun 10 14:36:46 2019 +0100
@@ -41,6 +41,7 @@
     frameHolder := ValueHolder new.
     application := VDBInstructionListApplication new.
     application debuggerHolder: (ValueHolder with: debugger).
+    application disassemblableHolder: frameHolder.  
     application frameHolder: frameHolder.  
     application open.
 
@@ -64,7 +65,7 @@
     debugger send: 'c' andWaitFor: GDBThreadGroupExitedEvent.
 
     "Created: / 03-10-2018 / 12:27:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 03-10-2018 / 15:19:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 12-06-2019 / 15:54:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 test_01b
@@ -76,6 +77,7 @@
     frameHolder := ValueHolder new.
     application := VDBInstructionListApplication new.
     application debuggerHolder: (ValueHolder with: debugger).
+    application disassemblableHolder: frameHolder.  
     application frameHolder: frameHolder.  
     application allButOpen.
 
@@ -96,7 +98,7 @@
     debugger send: 'c' andWaitFor: GDBThreadGroupExitedEvent.
 
     "Created: / 03-10-2018 / 12:27:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 03-10-2018 / 15:14:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 12-06-2019 / 15:54:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 test_02
@@ -114,6 +116,7 @@
     frameHolder := ValueHolder new.
     application := VDBInstructionListApplication new.
     application debuggerHolder: (ValueHolder with: debugger).
+    application disassemblableHolder: frameHolder.  
     application frameHolder: frameHolder.  
     application open.
     application window waitUntilVisible.
@@ -152,7 +155,7 @@
 
     "/ Hide the list and set frame, list should
     "/ stay empty (i.e., not updated)
-    internalListView beInvisible.
+    application window beInvisible.
     frameHolder value: stack first.
     self waitForUIToStabilize.
 
@@ -162,7 +165,7 @@
 
     "/ Show the list, contents should get
     "/ updated.
-    internalListView beVisible.
+    application window beVisible.
     internalListView waitUntilVisible.
     self waitForUIToStabilize.
 
@@ -172,10 +175,11 @@
 
     debugger send: 'd'.
     debugger send: 'c' andWaitFor: GDBThreadGroupExitedEvent.
+    self waitForUIToStabilize.
 
     "Created: / 23-01-2019 / 16:28:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 23-01-2019 / 21:55:04 / jv"
-    "Modified: / 23-01-2019 / 21:55:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 12-06-2019 / 16:13:36 / jv"
+    "Modified: / 12-06-2019 / 16:15:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !VDBInstructionListApplicationTests class methodsFor:'documentation'!