GDBVariable.st
changeset 127 1254cc005f57
parent 109 f57ce907abf4
child 137 a98a4a226c26
--- 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!