--- a/GDBVariable.st Fri Jun 22 11:39:15 2018 +0100
+++ b/GDBVariable.st Thu Jul 05 13:30:40 2018 +0100
@@ -21,8 +21,8 @@
"{ NameSpace: Smalltalk }"
GDBDebuggerObject subclass:#GDBVariable
- instanceVariableNames:'frame name value varobj'
- classVariableNames:''
+ instanceVariableNames:'frame name value type arg varobj'
+ classVariableNames:'VarobjUnavailable'
poolDictionaries:''
category:'GDB-Core'
!
@@ -50,41 +50,81 @@
"
! !
+!GDBVariable class methodsFor:'initialization'!
+
+initialize
+ "Invoked at system start or when the class is dynamically loaded."
+
+ VarobjUnavailable := Object new.
+
+ "Modified (comment): / 05-07-2018 / 11:05:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
!GDBVariable class methodsFor:'accessing - GDB value descriptors'!
description
^ (super description)
define:#name as:String;
+ define:#arg as:Boolean;
yourself
"Created: / 16-09-2014 / 23:59:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
- "Modified: / 27-02-2015 / 15:00:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 05-07-2018 / 11:07:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!GDBVariable methodsFor:'accessing'!
+children
+ | vobj |
+
+ vobj := self varobj.
+ ^ vobj notNil ifTrue:[ vobj children ] ifFalse: [ #() ].
+
+ "Created: / 05-07-2018 / 11:59:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+expression
+ ^ self name
+
+ "Created: / 05-07-2018 / 11:58:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
name
^ name
!
+path
+ ^ self expression
+
+ "Created: / 05-07-2018 / 11:58:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+type
+ ^ type
+!
+
value
- ^ self varobj value
+ | vobj |
+
+ vobj := self varobj.
+ ^ vobj notNil ifTrue:[ vobj value ] ifFalse: [ value ].
"Created: / 27-02-2015 / 23:37:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
- "Modified: / 18-03-2015 / 16:47:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 05-07-2018 / 12:02:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!GDBVariable methodsFor:'accessing-private'!
varobj
varobj isNil ifTrue:[
- varobj := debugger evaluate: name in: frame.
+ varobj := [ debugger evaluate: name in: frame ] on: GDBCommandFailedError do: [ VarobjUnavailable ].
].
+ varobj == VarobjUnavailable ifTrue:[ ^ nil ].
^ varobj
"Created: / 27-02-2015 / 17:18:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified: / 15-01-2018 / 23:10:31 / jv"
- "Modified: / 13-02-2018 / 22:23:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 05-07-2018 / 11:06:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!GDBVariable methodsFor:'initialization'!
@@ -147,6 +187,30 @@
!GDBVariable methodsFor:'testing'!
+hasChanged
+ | vobj |
+
+ vobj := self varobj.
+ ^ vobj notNil ifTrue:[ vobj hasChanged ] ifFalse: [ false ].
+
+ "Created: / 05-07-2018 / 11:59:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+hasChildren
+ | vobj |
+
+ vobj := self varobj.
+ ^ vobj notNil ifTrue:[ vobj hasChildren ] ifFalse: [ false ].
+
+ "Created: / 05-07-2018 / 12:00:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+isArgument
+ ^ arg == true
+
+ "Created: / 05-07-2018 / 11:08:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
isValid
^ frame isValid
@@ -160,3 +224,5 @@
^ '$Changeset: <not expanded> $'
! !
+
+GDBVariable initialize!