GDBVariableObject.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Mon, 08 Jul 2019 12:34:18 +0100
changeset 200 e9250da35d87
parent 178 71baafd9bbcb
child 202 412846313554
permissions -rw-r--r--
API: add method for importing Python support code This can be used by VDB, VDB plugins or any other user of libgdbs to load Python support code.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
110
727d8a9e6d5d Variable objecys: added `GDBVariableObject >> #visualizer` and `#visualizer:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
     1
"{ Encoding: utf8 }"
727d8a9e6d5d Variable objecys: added `GDBVariableObject >> #visualizer` and `#visualizer:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
     2
91
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 83
diff changeset
     3
"
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 83
diff changeset
     4
jv:libgdbs - GNU Debugger Interface Library
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 83
diff changeset
     5
Copyright (C) 2015-now Jan Vrany
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 83
diff changeset
     6
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 83
diff changeset
     7
This library is free software; you can redistribute it and/or
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 83
diff changeset
     8
modify it under the terms of the GNU Lesser General Public
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 83
diff changeset
     9
License as published by the Free Software Foundation; either
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 83
diff changeset
    10
version 2.1 of the License. 
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 83
diff changeset
    11
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 83
diff changeset
    12
This library is distributed in the hope that it will be useful,
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 83
diff changeset
    13
but WITHOUT ANY WARRANTY; without even the implied warranty of
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 83
diff changeset
    14
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 83
diff changeset
    15
Lesser General Public License for more details.
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 83
diff changeset
    16
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 83
diff changeset
    17
You should have received a copy of the GNU Lesser General Public
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 83
diff changeset
    18
License along with this library; if not, write to the Free Software
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 83
diff changeset
    19
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 83
diff changeset
    20
"
74
d53d325c2930 Initial work on varobjs. Tests locks up an image, should be polished and folded.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    21
"{ Package: 'jv:libgdbs' }"
d53d325c2930 Initial work on varobjs. Tests locks up an image, should be polished and folded.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    22
d53d325c2930 Initial work on varobjs. Tests locks up an image, should be polished and folded.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    23
"{ NameSpace: Smalltalk }"
d53d325c2930 Initial work on varobjs. Tests locks up an image, should be polished and folded.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    24
101
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
    25
GDBDebuggerObject subclass:#GDBVariableObject
107
7a315f1c9260 Variable objects: added `#path` returning an absolute expression to access the value in source langiage
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
    26
	instanceVariableNames:'parent name exp path thread frame value type numchild has_more
122
c939f8a4c3cd Added support for dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 112
diff changeset
    27
		children changed inScope visualizer dynamic'
123
1e2c548b0cde Fixed `GDBVariableObject >> #duplicate` for children od dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
    28
	classVariableNames:'GdbDefaultVisualizer'
74
d53d325c2930 Initial work on varobjs. Tests locks up an image, should be polished and folded.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    29
	poolDictionaries:''
102
d573a3b2abe2 Variable objects: delete var. objects that are no longer needed
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 101
diff changeset
    30
	category:'GDB-Core'
74
d53d325c2930 Initial work on varobjs. Tests locks up an image, should be polished and folded.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    31
!
d53d325c2930 Initial work on varobjs. Tests locks up an image, should be polished and folded.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    32
91
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 83
diff changeset
    33
!GDBVariableObject class methodsFor:'documentation'!
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 83
diff changeset
    34
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 83
diff changeset
    35
copyright
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 83
diff changeset
    36
"
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 83
diff changeset
    37
jv:libgdbs - GNU Debugger Interface Library
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 83
diff changeset
    38
Copyright (C) 2015-now Jan Vrany
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 83
diff changeset
    39
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 83
diff changeset
    40
This library is free software; you can redistribute it and/or
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 83
diff changeset
    41
modify it under the terms of the GNU Lesser General Public
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 83
diff changeset
    42
License as published by the Free Software Foundation; either
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 83
diff changeset
    43
version 2.1 of the License. 
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 83
diff changeset
    44
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 83
diff changeset
    45
This library is distributed in the hope that it will be useful,
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 83
diff changeset
    46
but WITHOUT ANY WARRANTY; without even the implied warranty of
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 83
diff changeset
    47
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 83
diff changeset
    48
Lesser General Public License for more details.
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 83
diff changeset
    49
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 83
diff changeset
    50
You should have received a copy of the GNU Lesser General Public
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 83
diff changeset
    51
License along with this library; if not, write to the Free Software
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 83
diff changeset
    52
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 83
diff changeset
    53
"
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 83
diff changeset
    54
! !
83
b2fb8968f1f4 Improved some #printOn: and #inspectorExtraAttributes to ease debugging
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 74
diff changeset
    55
123
1e2c548b0cde Fixed `GDBVariableObject >> #duplicate` for children od dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
    56
!GDBVariableObject class methodsFor:'initialization'!
1e2c548b0cde Fixed `GDBVariableObject >> #duplicate` for children od dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
    57
1e2c548b0cde Fixed `GDBVariableObject >> #duplicate` for children od dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
    58
initialize
1e2c548b0cde Fixed `GDBVariableObject >> #duplicate` for children od dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
    59
    "Invoked at system start or when the class is dynamically loaded."
1e2c548b0cde Fixed `GDBVariableObject >> #duplicate` for children od dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
    60
1e2c548b0cde Fixed `GDBVariableObject >> #duplicate` for children od dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
    61
    GdbDefaultVisualizer := 'gdb.default_visualizer'
1e2c548b0cde Fixed `GDBVariableObject >> #duplicate` for children od dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
    62
1e2c548b0cde Fixed `GDBVariableObject >> #duplicate` for children od dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
    63
    "Modified: / 04-06-2018 / 15:48:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
1e2c548b0cde Fixed `GDBVariableObject >> #duplicate` for children od dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
    64
! !
1e2c548b0cde Fixed `GDBVariableObject >> #duplicate` for children od dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
    65
106
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
    66
!GDBVariableObject class methodsFor:'instance creation'!
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
    67
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
    68
new
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
    69
    "return an initialized instance"
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
    70
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
    71
    ^ self basicNew initialize.
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
    72
! !
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
    73
101
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
    74
!GDBVariableObject class methodsFor:'accessing - GDB value descriptors'!
74
d53d325c2930 Initial work on varobjs. Tests locks up an image, should be polished and folded.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    75
d53d325c2930 Initial work on varobjs. Tests locks up an image, should be polished and folded.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    76
description
d53d325c2930 Initial work on varobjs. Tests locks up an image, should be polished and folded.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    77
    ^ (super description)
d53d325c2930 Initial work on varobjs. Tests locks up an image, should be polished and folded.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    78
        define:#name as:String;
d53d325c2930 Initial work on varobjs. Tests locks up an image, should be polished and folded.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    79
        define:#numchild as:Integer;
d53d325c2930 Initial work on varobjs. Tests locks up an image, should be polished and folded.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    80
        define:#value as:String;
d53d325c2930 Initial work on varobjs. Tests locks up an image, should be polished and folded.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    81
        define:#type as:String;
d53d325c2930 Initial work on varobjs. Tests locks up an image, should be polished and folded.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    82
        define:#'thread-id' as:Integer;
d53d325c2930 Initial work on varobjs. Tests locks up an image, should be polished and folded.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    83
        define:#has_more as:Boolean;
d53d325c2930 Initial work on varobjs. Tests locks up an image, should be polished and folded.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    84
        define:#dynamic as:Boolean;
d53d325c2930 Initial work on varobjs. Tests locks up an image, should be polished and folded.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    85
        define:#displayhint as:String;
d53d325c2930 Initial work on varobjs. Tests locks up an image, should be polished and folded.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    86
        yourself
d53d325c2930 Initial work on varobjs. Tests locks up an image, should be polished and folded.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    87
d53d325c2930 Initial work on varobjs. Tests locks up an image, should be polished and folded.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    88
    "Created: / 16-09-2014 / 23:59:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
d53d325c2930 Initial work on varobjs. Tests locks up an image, should be polished and folded.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    89
    "Modified: / 27-02-2015 / 17:10:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
d53d325c2930 Initial work on varobjs. Tests locks up an image, should be polished and folded.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    90
! !
d53d325c2930 Initial work on varobjs. Tests locks up an image, should be polished and folded.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    91
101
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
    92
!GDBVariableObject methodsFor:'accessing'!
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
    93
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
    94
children
106
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
    95
    self isValid ifFalse:[ ^ #() ].
101
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
    96
    children isNil ifTrue:[ 
122
c939f8a4c3cd Added support for dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 112
diff changeset
    97
        (self isValid and:[has_more or:[ numchild isNil or:[numchild > 0]]]) ifTrue:[
101
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
    98
            | result |
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
    99
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   100
            result := debugger send: (GDBMI_var_list_children arguments: (Array with: '--all-values' with: name)).
122
c939f8a4c3cd Added support for dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 112
diff changeset
   101
            children := (result propertyAt: #children) ? #().
101
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   102
            children do:[:each | each setDebugger: debugger; setParent: self ].
112
a8138ced2f5e Fixed `GDBVariableObject >> valueFormatted:` to work even if python pretty printing is enable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 111
diff changeset
   103
            numchild := children size.
101
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   104
        ] ifFalse:[ 
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   105
            children := #().
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   106
        ].
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   107
    ].
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   108
    ^ children
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   109
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   110
    "Created: / 27-01-2018 / 22:53:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
122
c939f8a4c3cd Added support for dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 112
diff changeset
   111
    "Modified: / 04-06-2018 / 10:57:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
101
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   112
!
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   113
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   114
expression
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   115
    "Return the expression in target language to access the value (asDtring)
107
7a315f1c9260 Variable objects: added `#path` returning an absolute expression to access the value in source langiage
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   116
     The expression is relative to it's direct parent (if any),
7a315f1c9260 Variable objects: added `#path` returning an absolute expression to access the value in source langiage
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   117
7a315f1c9260 Variable objects: added `#path` returning an absolute expression to access the value in source langiage
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   118
     For example, consider
7a315f1c9260 Variable objects: added `#path` returning an absolute expression to access the value in source langiage
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   119
7a315f1c9260 Variable objects: added `#path` returning an absolute expression to access the value in source langiage
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   120
         typedef struct _point {
7a315f1c9260 Variable objects: added `#path` returning an absolute expression to access the value in source langiage
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   121
            int x;
7a315f1c9260 Variable objects: added `#path` returning an absolute expression to access the value in source langiage
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   122
            int y;
7a315f1c9260 Variable objects: added `#path` returning an absolute expression to access the value in source langiage
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   123
         } point;
7a315f1c9260 Variable objects: added `#path` returning an absolute expression to access the value in source langiage
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   124
         ...
7a315f1c9260 Variable objects: added `#path` returning an absolute expression to access the value in source langiage
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   125
         point p1 = { 10, 20 };
7a315f1c9260 Variable objects: added `#path` returning an absolute expression to access the value in source langiage
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   126
7a315f1c9260 Variable objects: added `#path` returning an absolute expression to access the value in source langiage
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   127
     and consider a variable object `o` that represents `y` member of point 
7a315f1c9260 Variable objects: added `#path` returning an absolute expression to access the value in source langiage
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   128
     `p1`. Then:
7a315f1c9260 Variable objects: added `#path` returning an absolute expression to access the value in source langiage
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   129
7a315f1c9260 Variable objects: added `#path` returning an absolute expression to access the value in source langiage
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   130
        o path '/ -> 'p1.y'
7a315f1c9260 Variable objects: added `#path` returning an absolute expression to access the value in source langiage
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   131
7a315f1c9260 Variable objects: added `#path` returning an absolute expression to access the value in source langiage
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   132
    while
7a315f1c9260 Variable objects: added `#path` returning an absolute expression to access the value in source langiage
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   133
7a315f1c9260 Variable objects: added `#path` returning an absolute expression to access the value in source langiage
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   134
        p expression '/ -> 'y'
7a315f1c9260 Variable objects: added `#path` returning an absolute expression to access the value in source langiage
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   135
    "
101
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   136
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   137
    ^ exp
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   138
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   139
    "Created: / 28-01-2018 / 21:36:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
107
7a315f1c9260 Variable objects: added `#path` returning an absolute expression to access the value in source langiage
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   140
    "Modified (comment): / 05-02-2018 / 21:16:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
101
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   141
!
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   142
108
f34505ec6a7f Variable objects: keep track of frame in which variable object has been created
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 107
diff changeset
   143
frame
f34505ec6a7f Variable objects: keep track of frame in which variable object has been created
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 107
diff changeset
   144
    "If a variable object is bound to a specific thread and frame,
f34505ec6a7f Variable objects: keep track of frame in which variable object has been created
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 107
diff changeset
   145
     returns that frame (as `GDBFrame`). Otherwise, return `nil`."
f34505ec6a7f Variable objects: keep track of frame in which variable object has been created
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 107
diff changeset
   146
f34505ec6a7f Variable objects: keep track of frame in which variable object has been created
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 107
diff changeset
   147
    parent notNil ifTrue:[ 
f34505ec6a7f Variable objects: keep track of frame in which variable object has been created
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 107
diff changeset
   148
        self assert: frame isNil.
f34505ec6a7f Variable objects: keep track of frame in which variable object has been created
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 107
diff changeset
   149
        ^ parent frame
f34505ec6a7f Variable objects: keep track of frame in which variable object has been created
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 107
diff changeset
   150
    ].
f34505ec6a7f Variable objects: keep track of frame in which variable object has been created
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 107
diff changeset
   151
    ^ frame.
f34505ec6a7f Variable objects: keep track of frame in which variable object has been created
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 107
diff changeset
   152
f34505ec6a7f Variable objects: keep track of frame in which variable object has been created
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 107
diff changeset
   153
    "Created: / 13-02-2018 / 21:25:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
f34505ec6a7f Variable objects: keep track of frame in which variable object has been created
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 107
diff changeset
   154
    "Modified: / 15-02-2018 / 09:30:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
f34505ec6a7f Variable objects: keep track of frame in which variable object has been created
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 107
diff changeset
   155
!
f34505ec6a7f Variable objects: keep track of frame in which variable object has been created
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 107
diff changeset
   156
101
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   157
id
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   158
    "Returns the GDB ID (name) of the variable object. This is
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   159
    used in commands to identify a variable object instance."
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   160
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   161
    ^ name
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   162
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   163
    "Created: / 28-01-2018 / 21:35:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   164
!
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   165
123
1e2c548b0cde Fixed `GDBVariableObject >> #duplicate` for children od dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
   166
index
1e2c548b0cde Fixed `GDBVariableObject >> #duplicate` for children od dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
   167
    "Return the index of receiver within parent's children
1e2c548b0cde Fixed `GDBVariableObject >> #duplicate` for children od dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
   168
     or `nil` if receiver is not a child varobj."
1e2c548b0cde Fixed `GDBVariableObject >> #duplicate` for children od dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
   169
1e2c548b0cde Fixed `GDBVariableObject >> #duplicate` for children od dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
   170
    parent isNil ifTrue:[ ^ nil ].
1e2c548b0cde Fixed `GDBVariableObject >> #duplicate` for children od dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
   171
    ^ parent children indexOf: self.
1e2c548b0cde Fixed `GDBVariableObject >> #duplicate` for children od dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
   172
1e2c548b0cde Fixed `GDBVariableObject >> #duplicate` for children od dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
   173
    "Created: / 04-06-2018 / 15:01:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
1e2c548b0cde Fixed `GDBVariableObject >> #duplicate` for children od dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
   174
!
1e2c548b0cde Fixed `GDBVariableObject >> #duplicate` for children od dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
   175
107
7a315f1c9260 Variable objects: added `#path` returning an absolute expression to access the value in source langiage
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   176
parent
7a315f1c9260 Variable objects: added `#path` returning an absolute expression to access the value in source langiage
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   177
    ^ parent
7a315f1c9260 Variable objects: added `#path` returning an absolute expression to access the value in source langiage
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   178
!
7a315f1c9260 Variable objects: added `#path` returning an absolute expression to access the value in source langiage
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   179
7a315f1c9260 Variable objects: added `#path` returning an absolute expression to access the value in source langiage
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   180
path
7a315f1c9260 Variable objects: added `#path` returning an absolute expression to access the value in source langiage
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   181
    "Return (absolute) expression in target language to access the value 
7a315f1c9260 Variable objects: added `#path` returning an absolute expression to access the value in source langiage
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   182
     (asDtring).
7a315f1c9260 Variable objects: added `#path` returning an absolute expression to access the value in source langiage
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   183
7a315f1c9260 Variable objects: added `#path` returning an absolute expression to access the value in source langiage
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   184
     For example, consider
7a315f1c9260 Variable objects: added `#path` returning an absolute expression to access the value in source langiage
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   185
7a315f1c9260 Variable objects: added `#path` returning an absolute expression to access the value in source langiage
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   186
         typedef struct _point {
7a315f1c9260 Variable objects: added `#path` returning an absolute expression to access the value in source langiage
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   187
            int x;
7a315f1c9260 Variable objects: added `#path` returning an absolute expression to access the value in source langiage
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   188
            int y;
7a315f1c9260 Variable objects: added `#path` returning an absolute expression to access the value in source langiage
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   189
         } point;
7a315f1c9260 Variable objects: added `#path` returning an absolute expression to access the value in source langiage
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   190
         ...
7a315f1c9260 Variable objects: added `#path` returning an absolute expression to access the value in source langiage
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   191
         point p1 = { 10, 20 };
7a315f1c9260 Variable objects: added `#path` returning an absolute expression to access the value in source langiage
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   192
7a315f1c9260 Variable objects: added `#path` returning an absolute expression to access the value in source langiage
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   193
     and consider a variable object `o` that represents `y` member of point 
7a315f1c9260 Variable objects: added `#path` returning an absolute expression to access the value in source langiage
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   194
     `p1`. Then:
7a315f1c9260 Variable objects: added `#path` returning an absolute expression to access the value in source langiage
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   195
7a315f1c9260 Variable objects: added `#path` returning an absolute expression to access the value in source langiage
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   196
        o path '/ -> 'p1.y'
7a315f1c9260 Variable objects: added `#path` returning an absolute expression to access the value in source langiage
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   197
7a315f1c9260 Variable objects: added `#path` returning an absolute expression to access the value in source langiage
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   198
    while
7a315f1c9260 Variable objects: added `#path` returning an absolute expression to access the value in source langiage
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   199
7a315f1c9260 Variable objects: added `#path` returning an absolute expression to access the value in source langiage
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   200
        p expression '/ -> 'y'
7a315f1c9260 Variable objects: added `#path` returning an absolute expression to access the value in source langiage
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   201
7a315f1c9260 Variable objects: added `#path` returning an absolute expression to access the value in source langiage
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   202
    "
122
c939f8a4c3cd Added support for dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 112
diff changeset
   203
c939f8a4c3cd Added support for dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 112
diff changeset
   204
    "/ Raise an error early when #path is requested for a child of dynamic
c939f8a4c3cd Added support for dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 112
diff changeset
   205
    "/ varobj. Thie is not supported by GDB.
c939f8a4c3cd Added support for dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 112
diff changeset
   206
    "/ 
c939f8a4c3cd Added support for dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 112
diff changeset
   207
    "/ Although GDB should report an error [1], dur to a bug it report
c939f8a4c3cd Added support for dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 112
diff changeset
   208
    "/ either wrong (nonsense) value or crashes. A patch has been send
c939f8a4c3cd Added support for dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 112
diff changeset
   209
    "/ to the upstream [2], but meanwhile, check here as well in case someone
c939f8a4c3cd Added support for dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 112
diff changeset
   210
    "/ uses this with older / not yet patches version of GDB.
c939f8a4c3cd Added support for dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 112
diff changeset
   211
    "/ 
c939f8a4c3cd Added support for dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 112
diff changeset
   212
    "/ [1]: https://sourceware.org/gdb/onlinedocs/gdb/GDB_002fMI-Variable-Objects.html
c939f8a4c3cd Added support for dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 112
diff changeset
   213
    "/ [2]: https://sourceware.org/ml/gdb-patches/2018-06/msg00058.html
c939f8a4c3cd Added support for dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 112
diff changeset
   214
    "/ 
c939f8a4c3cd Added support for dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 112
diff changeset
   215
    (parent notNil and:[parent isDynamic]) ifTrue:[ 
153
dd55019f1d86 Partability: use ANSI `#signal:` to raise an exception
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 137
diff changeset
   216
        GDBError signal: 'Invalid varobj, #path is not supported for children of a dynamic varobjs'.
122
c939f8a4c3cd Added support for dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 112
diff changeset
   217
        ^ self
c939f8a4c3cd Added support for dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 112
diff changeset
   218
    ].
c939f8a4c3cd Added support for dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 112
diff changeset
   219
107
7a315f1c9260 Variable objects: added `#path` returning an absolute expression to access the value in source langiage
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   220
    path isNil ifTrue:[ 
7a315f1c9260 Variable objects: added `#path` returning an absolute expression to access the value in source langiage
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   221
        | result |
7a315f1c9260 Variable objects: added `#path` returning an absolute expression to access the value in source langiage
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   222
7a315f1c9260 Variable objects: added `#path` returning an absolute expression to access the value in source langiage
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   223
        result := debugger send: (GDBMI_var_info_path_expression arguments: (Array with: name)).
7a315f1c9260 Variable objects: added `#path` returning an absolute expression to access the value in source langiage
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   224
        path := result propertyAt: #'path_expr'.
7a315f1c9260 Variable objects: added `#path` returning an absolute expression to access the value in source langiage
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   225
    ].
7a315f1c9260 Variable objects: added `#path` returning an absolute expression to access the value in source langiage
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   226
    ^ path
7a315f1c9260 Variable objects: added `#path` returning an absolute expression to access the value in source langiage
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   227
7a315f1c9260 Variable objects: added `#path` returning an absolute expression to access the value in source langiage
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   228
    "Created: / 05-02-2018 / 21:16:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
153
dd55019f1d86 Partability: use ANSI `#signal:` to raise an exception
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 137
diff changeset
   229
    "Modified: / 21-10-2018 / 08:06:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
107
7a315f1c9260 Variable objects: added `#path` returning an absolute expression to access the value in source langiage
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   230
!
7a315f1c9260 Variable objects: added `#path` returning an absolute expression to access the value in source langiage
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 106
diff changeset
   231
106
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   232
thread
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   233
    "
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   234
    If a variable object is bound to a specific thread, returns
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   235
    that thread (as GDBThread). Otherwise, `nil` is returned.
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   236
    "
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   237
    | threadId |
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   238
    thread isInteger ifTrue:[ 
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   239
        threadId := thread.
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   240
        thread := debugger threadForId: threadId.
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   241
    ].
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   242
    ^ thread
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   243
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   244
    "Created: / 04-02-2018 / 21:35:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   245
    "Modified: / 12-02-2018 / 18:38:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   246
!
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   247
101
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   248
type
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   249
    ^ type
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   250
!
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   251
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   252
value
178
71baafd9bbcb Clean up `GDBVariable(Object) >> #value` and `#valueString`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 160
diff changeset
   253
    "Retun an up-to-date pretty-printed string representation of this varobj's value."
71baafd9bbcb Clean up `GDBVariable(Object) >> #value` and `#valueString`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 160
diff changeset
   254
104
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 103
diff changeset
   255
    changed value. "/ to force update if necessary
106
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   256
    self isValid ifFalse:[ ^ self class classResources string: '<invalid>' ].
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   257
    self inScope ifFalse:[ ^ self class classResources string: '<out-of-scope>' ].
101
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   258
    ^ value
104
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 103
diff changeset
   259
106
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   260
    "Modified: / 12-02-2018 / 22:00:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
178
71baafd9bbcb Clean up `GDBVariable(Object) >> #value` and `#valueString`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 160
diff changeset
   261
    "Modified (comment): / 25-02-2019 / 14:36:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
110
727d8a9e6d5d Variable objecys: added `GDBVariableObject >> #visualizer` and `#visualizer:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   262
!
727d8a9e6d5d Variable objecys: added `GDBVariableObject >> #visualizer` and `#visualizer:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   263
111
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 110
diff changeset
   264
valueFormatted: aGDBOutputFormat
112
a8138ced2f5e Fixed `GDBVariableObject >> valueFormatted:` to work even if python pretty printing is enable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 111
diff changeset
   265
    "Return the value formatted using given format (as String)
a8138ced2f5e Fixed `GDBVariableObject >> valueFormatted:` to work even if python pretty printing is enable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 111
diff changeset
   266
a8138ced2f5e Fixed `GDBVariableObject >> valueFormatted:` to work even if python pretty printing is enable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 111
diff changeset
   267
    Supported formats are:
a8138ced2f5e Fixed `GDBVariableObject >> valueFormatted:` to work even if python pretty printing is enable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 111
diff changeset
   268
        * FormatSignedDecimal
a8138ced2f5e Fixed `GDBVariableObject >> valueFormatted:` to work even if python pretty printing is enable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 111
diff changeset
   269
        * FormatHexadecimal
a8138ced2f5e Fixed `GDBVariableObject >> valueFormatted:` to work even if python pretty printing is enable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 111
diff changeset
   270
        * FormatOctal
a8138ced2f5e Fixed `GDBVariableObject >> valueFormatted:` to work even if python pretty printing is enable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 111
diff changeset
   271
        * FormatPaddedHexadecimal
a8138ced2f5e Fixed `GDBVariableObject >> valueFormatted:` to work even if python pretty printing is enable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 111
diff changeset
   272
a8138ced2f5e Fixed `GDBVariableObject >> valueFormatted:` to work even if python pretty printing is enable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 111
diff changeset
   273
    To get the value in 'natural' format use plain #value 
a8138ced2f5e Fixed `GDBVariableObject >> valueFormatted:` to work even if python pretty printing is enable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 111
diff changeset
   274
    rather than #valueFormatted:
a8138ced2f5e Fixed `GDBVariableObject >> valueFormatted:` to work even if python pretty printing is enable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 111
diff changeset
   275
    "
111
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 110
diff changeset
   276
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 110
diff changeset
   277
    | format result |
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 110
diff changeset
   278
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 110
diff changeset
   279
    aGDBOutputFormat == FormatBinary ifTrue:[ 
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 110
diff changeset
   280
        format := 'binary'
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 110
diff changeset
   281
    ] ifFalse:[aGDBOutputFormat == FormatSignedDecimal ifTrue:[ 
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 110
diff changeset
   282
        format := 'decimal'
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 110
diff changeset
   283
    ] ifFalse:[aGDBOutputFormat == FormatHexadecimal ifTrue:[ 
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 110
diff changeset
   284
        format := 'hexadecimal'
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 110
diff changeset
   285
    ] ifFalse:[aGDBOutputFormat == FormatOctal ifTrue:[ 
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 110
diff changeset
   286
        format := 'octal'
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 110
diff changeset
   287
    ] ifFalse:[aGDBOutputFormat == FormatPaddedHexadecimal ifTrue:[ 
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 110
diff changeset
   288
        format := 'zero-hexadecimal'
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 110
diff changeset
   289
    ] ifFalse:[ 
153
dd55019f1d86 Partability: use ANSI `#signal:` to raise an exception
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 137
diff changeset
   290
        GDBError signal: 'Unsupported format: ', aGDBOutputFormat displayString  
111
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 110
diff changeset
   291
    ]]]]].
112
a8138ced2f5e Fixed `GDBVariableObject >> valueFormatted:` to work even if python pretty printing is enable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 111
diff changeset
   292
a8138ced2f5e Fixed `GDBVariableObject >> valueFormatted:` to work even if python pretty printing is enable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 111
diff changeset
   293
    "/ If pretty printing in MI is enabled, GDB seems to ignore the -f arguments. To work arround
a8138ced2f5e Fixed `GDBVariableObject >> valueFormatted:` to work even if python pretty printing is enable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 111
diff changeset
   294
    "/ this, reset the visualizer to None, print the value and then set it back to default.
a8138ced2f5e Fixed `GDBVariableObject >> valueFormatted:` to work even if python pretty printing is enable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 111
diff changeset
   295
    "/ Pretty ugly, sigh.
a8138ced2f5e Fixed `GDBVariableObject >> valueFormatted:` to work even if python pretty printing is enable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 111
diff changeset
   296
    ^ [
a8138ced2f5e Fixed `GDBVariableObject >> valueFormatted:` to work even if python pretty printing is enable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 111
diff changeset
   297
        debugger isPrettyPrintingEnabled ifTrue:[ 
a8138ced2f5e Fixed `GDBVariableObject >> valueFormatted:` to work even if python pretty printing is enable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 111
diff changeset
   298
            debugger send: (GDBMI_var_set_visualizer arguments: (Array with: name with: 'None')) andWait: false.
a8138ced2f5e Fixed `GDBVariableObject >> valueFormatted:` to work even if python pretty printing is enable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 111
diff changeset
   299
        ].
a8138ced2f5e Fixed `GDBVariableObject >> valueFormatted:` to work even if python pretty printing is enable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 111
diff changeset
   300
        result := debugger send: (GDBMI_var_evaluate_expression arguments: (Array with: '-f' with: format with: name)).
a8138ced2f5e Fixed `GDBVariableObject >> valueFormatted:` to work even if python pretty printing is enable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 111
diff changeset
   301
        result value
a8138ced2f5e Fixed `GDBVariableObject >> valueFormatted:` to work even if python pretty printing is enable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 111
diff changeset
   302
    ] ensure:[ 
a8138ced2f5e Fixed `GDBVariableObject >> valueFormatted:` to work even if python pretty printing is enable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 111
diff changeset
   303
        debugger isPrettyPrintingEnabled ifTrue:[ 
a8138ced2f5e Fixed `GDBVariableObject >> valueFormatted:` to work even if python pretty printing is enable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 111
diff changeset
   304
            debugger send: (GDBMI_var_set_visualizer arguments: (Array with: name with: 'gdb.default_visualizer')) andWait: false.
a8138ced2f5e Fixed `GDBVariableObject >> valueFormatted:` to work even if python pretty printing is enable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 111
diff changeset
   305
        ].
a8138ced2f5e Fixed `GDBVariableObject >> valueFormatted:` to work even if python pretty printing is enable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 111
diff changeset
   306
    ].
111
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 110
diff changeset
   307
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 110
diff changeset
   308
    "Created: / 05-02-2018 / 23:34:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
153
dd55019f1d86 Partability: use ANSI `#signal:` to raise an exception
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 137
diff changeset
   309
    "Modified: / 21-10-2018 / 08:06:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
111
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 110
diff changeset
   310
!
7ce18f6f18ac API: added methods for querying debugger and target features
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 110
diff changeset
   311
110
727d8a9e6d5d Variable objecys: added `GDBVariableObject >> #visualizer` and `#visualizer:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   312
visualizer
727d8a9e6d5d Variable objecys: added `GDBVariableObject >> #visualizer` and `#visualizer:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   313
    "Return the current visualizer used for the variable object.
727d8a9e6d5d Variable objecys: added `GDBVariableObject >> #visualizer` and `#visualizer:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   314
727d8a9e6d5d Variable objecys: added `GDBVariableObject >> #visualizer` and `#visualizer:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   315
     See https://sourceware.org/gdb/onlinedocs/gdb/GDB_002fMI-Variable-Objects.html
727d8a9e6d5d Variable objecys: added `GDBVariableObject >> #visualizer` and `#visualizer:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   316
    "
727d8a9e6d5d Variable objecys: added `GDBVariableObject >> #visualizer` and `#visualizer:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   317
    debugger isPrettyPrintingEnabled ifFalse:[ 
727d8a9e6d5d Variable objecys: added `GDBVariableObject >> #visualizer` and `#visualizer:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   318
        ^ 'None' 
727d8a9e6d5d Variable objecys: added `GDBVariableObject >> #visualizer` and `#visualizer:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   319
    ].
727d8a9e6d5d Variable objecys: added `GDBVariableObject >> #visualizer` and `#visualizer:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   320
    visualizer isNil ifTrue:[
123
1e2c548b0cde Fixed `GDBVariableObject >> #duplicate` for children od dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
   321
        ^ GdbDefaultVisualizer
110
727d8a9e6d5d Variable objecys: added `GDBVariableObject >> #visualizer` and `#visualizer:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   322
    ].
727d8a9e6d5d Variable objecys: added `GDBVariableObject >> #visualizer` and `#visualizer:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   323
    ^ visualizer
727d8a9e6d5d Variable objecys: added `GDBVariableObject >> #visualizer` and `#visualizer:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   324
727d8a9e6d5d Variable objecys: added `GDBVariableObject >> #visualizer` and `#visualizer:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   325
    "Created: / 13-02-2018 / 23:18:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
123
1e2c548b0cde Fixed `GDBVariableObject >> #duplicate` for children od dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
   326
    "Modified: / 04-06-2018 / 15:48:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
110
727d8a9e6d5d Variable objecys: added `GDBVariableObject >> #visualizer` and `#visualizer:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   327
!
727d8a9e6d5d Variable objecys: added `GDBVariableObject >> #visualizer` and `#visualizer:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   328
727d8a9e6d5d Variable objecys: added `GDBVariableObject >> #visualizer` and `#visualizer:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   329
visualizer: aString
727d8a9e6d5d Variable objecys: added `GDBVariableObject >> #visualizer` and `#visualizer:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   330
    "Set a visualizer for the variable object. `aString` is the 
727d8a9e6d5d Variable objecys: added `GDBVariableObject >> #visualizer` and `#visualizer:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   331
     visualizer to use. The special value ‘None’ means to disable 
727d8a9e6d5d Variable objecys: added `GDBVariableObject >> #visualizer` and `#visualizer:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   332
     any visualizer in use.
727d8a9e6d5d Variable objecys: added `GDBVariableObject >> #visualizer` and `#visualizer:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   333
727d8a9e6d5d Variable objecys: added `GDBVariableObject >> #visualizer` and `#visualizer:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   334
     If not ‘None’, `aString` must be a Python expression. This expression 
727d8a9e6d5d Variable objecys: added `GDBVariableObject >> #visualizer` and `#visualizer:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   335
     must evaluate to a callable object which accepts a single argument.
727d8a9e6d5d Variable objecys: added `GDBVariableObject >> #visualizer` and `#visualizer:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   336
727d8a9e6d5d Variable objecys: added `GDBVariableObject >> #visualizer` and `#visualizer:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   337
     See https://sourceware.org/gdb/onlinedocs/gdb/GDB_002fMI-Variable-Objects.html
727d8a9e6d5d Variable objecys: added `GDBVariableObject >> #visualizer` and `#visualizer:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   338
    "
727d8a9e6d5d Variable objecys: added `GDBVariableObject >> #visualizer` and `#visualizer:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   339
    |result |
727d8a9e6d5d Variable objecys: added `GDBVariableObject >> #visualizer` and `#visualizer:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   340
727d8a9e6d5d Variable objecys: added `GDBVariableObject >> #visualizer` and `#visualizer:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   341
    self assert: (debugger isPrettyPrintingEnabled or:[ aString = 'None' ]).
727d8a9e6d5d Variable objecys: added `GDBVariableObject >> #visualizer` and `#visualizer:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   342
    self visualizer = aString ifTrue:[ 
727d8a9e6d5d Variable objecys: added `GDBVariableObject >> #visualizer` and `#visualizer:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   343
        "/ Already set, no need to do anything.    
727d8a9e6d5d Variable objecys: added `GDBVariableObject >> #visualizer` and `#visualizer:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   344
        ^ self 
727d8a9e6d5d Variable objecys: added `GDBVariableObject >> #visualizer` and `#visualizer:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   345
    ].
727d8a9e6d5d Variable objecys: added `GDBVariableObject >> #visualizer` and `#visualizer:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   346
    result := debugger send: (GDBMI_var_set_visualizer arguments: (Array with: name with: aString)) andWait: true.
727d8a9e6d5d Variable objecys: added `GDBVariableObject >> #visualizer` and `#visualizer:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   347
    result isDone ifTrue:[ 
727d8a9e6d5d Variable objecys: added `GDBVariableObject >> #visualizer` and `#visualizer:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   348
        visualizer := aString.
727d8a9e6d5d Variable objecys: added `GDBVariableObject >> #visualizer` and `#visualizer:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   349
        "/ Since we have changed the visualizer, children 
727d8a9e6d5d Variable objecys: added `GDBVariableObject >> #visualizer` and `#visualizer:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   350
        "/ may have changed too. Delete them and recreate 
727d8a9e6d5d Variable objecys: added `GDBVariableObject >> #visualizer` and `#visualizer:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   351
        "/ them on demand (see #children)
112
a8138ced2f5e Fixed `GDBVariableObject >> valueFormatted:` to work even if python pretty printing is enable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 111
diff changeset
   352
        numchild := nil.
110
727d8a9e6d5d Variable objecys: added `GDBVariableObject >> #visualizer` and `#visualizer:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   353
        children notNil ifTrue:[ 
727d8a9e6d5d Variable objecys: added `GDBVariableObject >> #visualizer` and `#visualizer:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   354
            children do:[:child | child release ].
112
a8138ced2f5e Fixed `GDBVariableObject >> valueFormatted:` to work even if python pretty printing is enable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 111
diff changeset
   355
            children := nil.  
110
727d8a9e6d5d Variable objecys: added `GDBVariableObject >> #visualizer` and `#visualizer:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   356
        ].
727d8a9e6d5d Variable objecys: added `GDBVariableObject >> #visualizer` and `#visualizer:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   357
    ].
727d8a9e6d5d Variable objecys: added `GDBVariableObject >> #visualizer` and `#visualizer:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   358
727d8a9e6d5d Variable objecys: added `GDBVariableObject >> #visualizer` and `#visualizer:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   359
    "Created: / 13-02-2018 / 23:20:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
112
a8138ced2f5e Fixed `GDBVariableObject >> valueFormatted:` to work even if python pretty printing is enable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 111
diff changeset
   360
    "Modified: / 19-02-2018 / 15:44:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
101
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   361
! !
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   362
109
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 108
diff changeset
   363
!GDBVariableObject methodsFor:'copying'!
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 108
diff changeset
   364
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 108
diff changeset
   365
duplicate
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 108
diff changeset
   366
    "Create and returns a duplicate of the receiver, representing
122
c939f8a4c3cd Added support for dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 112
diff changeset
   367
     the same value. Other than that the returned duplicate is completely 
109
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 108
diff changeset
   368
     independent"
122
c939f8a4c3cd Added support for dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 112
diff changeset
   369
123
1e2c548b0cde Fixed `GDBVariableObject >> #duplicate` for children od dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
   370
    | dup |
1e2c548b0cde Fixed `GDBVariableObject >> #duplicate` for children od dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
   371
1e2c548b0cde Fixed `GDBVariableObject >> #duplicate` for children od dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
   372
    "/ For children of non-dynamic varobjs duplication is done
1e2c548b0cde Fixed `GDBVariableObject >> #duplicate` for children od dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
   373
    "/ by evaluating its "path" (a fully rooted expression) and 
1e2c548b0cde Fixed `GDBVariableObject >> #duplicate` for children od dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
   374
    "/ returning the new varobj.
1e2c548b0cde Fixed `GDBVariableObject >> #duplicate` for children od dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
   375
    "/ 
1e2c548b0cde Fixed `GDBVariableObject >> #duplicate` for children od dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
   376
    "/ For children of **dynamic** varobjs, this is however more tricky.
1e2c548b0cde Fixed `GDBVariableObject >> #duplicate` for children od dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
   377
    "/ They have no "path". Thus, we first duplicate the parent and then 
1e2c548b0cde Fixed `GDBVariableObject >> #duplicate` for children od dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
   378
    "/ return child of the just duplicated parent at corresponding index.
1e2c548b0cde Fixed `GDBVariableObject >> #duplicate` for children od dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
   379
    (self parent isNil or:[ self parent isDynamic not ]) ifTrue:[ 
1e2c548b0cde Fixed `GDBVariableObject >> #duplicate` for children od dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
   380
        "/ Easy, evaluate path expression...
1e2c548b0cde Fixed `GDBVariableObject >> #duplicate` for children od dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
   381
        dup := debugger evaluate: self path in: self frame
1e2c548b0cde Fixed `GDBVariableObject >> #duplicate` for children od dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
   382
    ] ifFalse:[
1e2c548b0cde Fixed `GDBVariableObject >> #duplicate` for children od dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
   383
        | dupParent |
1e2c548b0cde Fixed `GDBVariableObject >> #duplicate` for children od dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
   384
1e2c548b0cde Fixed `GDBVariableObject >> #duplicate` for children od dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
   385
        dupParent := self parent duplicate.
1e2c548b0cde Fixed `GDBVariableObject >> #duplicate` for children od dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
   386
        dup := dupParent children at: self index.
1e2c548b0cde Fixed `GDBVariableObject >> #duplicate` for children od dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
   387
    ].
1e2c548b0cde Fixed `GDBVariableObject >> #duplicate` for children od dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
   388
    "/ Make sure the duplicate has the same visualizer
1e2c548b0cde Fixed `GDBVariableObject >> #duplicate` for children od dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
   389
    debugger isPrettyPrintingEnabled ifTrue:[ 
1e2c548b0cde Fixed `GDBVariableObject >> #duplicate` for children od dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
   390
        self visualizer ~= GdbDefaultVisualizer ifTrue:[ 
1e2c548b0cde Fixed `GDBVariableObject >> #duplicate` for children od dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
   391
            dup visualizer: self visualizer
1e2c548b0cde Fixed `GDBVariableObject >> #duplicate` for children od dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
   392
        ].
1e2c548b0cde Fixed `GDBVariableObject >> #duplicate` for children od dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
   393
    ].
1e2c548b0cde Fixed `GDBVariableObject >> #duplicate` for children od dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
   394
    ^ dup
109
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 108
diff changeset
   395
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 108
diff changeset
   396
    "Created: / 13-02-2018 / 22:17:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
123
1e2c548b0cde Fixed `GDBVariableObject >> #duplicate` for children od dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
   397
    "Modified: / 04-06-2018 / 15:50:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
109
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 108
diff changeset
   398
! !
f57ce907abf4 Variable objects: added `GDBVariableObject >> #duplicate`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 108
diff changeset
   399
101
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   400
!GDBVariableObject methodsFor:'displaying'!
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   401
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   402
displayOn: aStream
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   403
    self displayOn: aStream indent: 0
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   404
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   405
    "Created: / 28-01-2018 / 21:40:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   406
!
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   407
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   408
displayOn: aStream indent: anInteger
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   409
    aStream next: anInteger * 4 put: Character space.
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   410
    aStream nextPutAll: exp; space; nextPut: $=; space.
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   411
    self hasChildren ifTrue:[ 
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   412
        aStream nextPut:${; cr.
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   413
        self children do:[:each | 
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   414
            each displayOn: aStream indent: anInteger + 1.
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   415
            aStream cr.
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   416
        ].
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   417
        aStream next: anInteger * 4 put: Character space; nextPut:$}.
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   418
    ] ifFalse: [ 
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   419
        aStream nextPutAll: value
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   420
    ].
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   421
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   422
    "Created: / 28-01-2018 / 21:42:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   423
! !
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   424
102
d573a3b2abe2 Variable objects: delete var. objects that are no longer needed
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 101
diff changeset
   425
!GDBVariableObject methodsFor:'finalization'!
d573a3b2abe2 Variable objects: delete var. objects that are no longer needed
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 101
diff changeset
   426
d573a3b2abe2 Variable objects: delete var. objects that are no longer needed
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 101
diff changeset
   427
executor
d573a3b2abe2 Variable objects: delete var. objects that are no longer needed
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 101
diff changeset
   428
    ^ GDBVariableObjectExecutor new 
d573a3b2abe2 Variable objects: delete var. objects that are no longer needed
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 101
diff changeset
   429
            setDebugger: debugger;
d573a3b2abe2 Variable objects: delete var. objects that are no longer needed
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 101
diff changeset
   430
            setId: name;
d573a3b2abe2 Variable objects: delete var. objects that are no longer needed
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 101
diff changeset
   431
            yourself
d573a3b2abe2 Variable objects: delete var. objects that are no longer needed
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 101
diff changeset
   432
d573a3b2abe2 Variable objects: delete var. objects that are no longer needed
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 101
diff changeset
   433
    "Created: / 28-01-2018 / 23:27:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
d573a3b2abe2 Variable objects: delete var. objects that are no longer needed
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 101
diff changeset
   434
!
d573a3b2abe2 Variable objects: delete var. objects that are no longer needed
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 101
diff changeset
   435
d573a3b2abe2 Variable objects: delete var. objects that are no longer needed
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 101
diff changeset
   436
finalizationLobby
d573a3b2abe2 Variable objects: delete var. objects that are no longer needed
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 101
diff changeset
   437
    self assert: debugger notNil.
d573a3b2abe2 Variable objects: delete var. objects that are no longer needed
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 101
diff changeset
   438
    ^ debugger finalizationRegistry.
d573a3b2abe2 Variable objects: delete var. objects that are no longer needed
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 101
diff changeset
   439
d573a3b2abe2 Variable objects: delete var. objects that are no longer needed
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 101
diff changeset
   440
    "Created: / 28-01-2018 / 23:21:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
d573a3b2abe2 Variable objects: delete var. objects that are no longer needed
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 101
diff changeset
   441
! !
d573a3b2abe2 Variable objects: delete var. objects that are no longer needed
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 101
diff changeset
   442
106
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   443
!GDBVariableObject methodsFor:'initialization & release'!
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   444
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   445
initialize
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   446
    "Invoked when a new instance is created."
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   447
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   448
    super initialize.
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   449
    inScope := true.
122
c939f8a4c3cd Added support for dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 112
diff changeset
   450
    dynamic := false.
c939f8a4c3cd Added support for dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 112
diff changeset
   451
    has_more := true.
106
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   452
122
c939f8a4c3cd Added support for dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 112
diff changeset
   453
    "Modified: / 04-06-2018 / 10:55:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
106
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   454
!
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   455
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   456
release
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   457
    "Releases the variable object and all its children. Once released, 
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   458
     the variable object is invalid (i.e., `#isValid` would return `false`) 
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   459
     and should not be used anymore."
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   460
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   461
    self release: true
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   462
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   463
    "Created: / 04-02-2018 / 23:21:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   464
    "Modified: / 13-02-2018 / 09:37:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   465
!
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   466
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   467
release: delete
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   468
    "Releases the variable object and all its children. If 
110
727d8a9e6d5d Variable objecys: added `GDBVariableObject >> #visualizer` and `#visualizer:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   469
     `delete` is `true`, send `-var-delete`."
106
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   470
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   471
    self assert: debugger notNil.
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   472
    self assert: (delete not or:[ parent isNil ]) description: 'Only top-level objects can be deleted (for now)'.
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   473
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   474
    "/ Release all children first, but not not 'delete' them 
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   475
    "/ in GDB (will be done later)
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   476
    children notEmptyOrNil ifTrue:[ 
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   477
        children do: [ :child | child release:false ].
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   478
    ].
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   479
    children := nil.
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   480
    changed := [ changed := false. true ]. 
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   481
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   482
    "/ Now 'delete' the variable and all its children
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   483
    "/ in GDB
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   484
    delete ifTrue:[ 
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   485
        self unregisterForFinalization.
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   486
        debugger isConnected ifTrue:[
110
727d8a9e6d5d Variable objecys: added `GDBVariableObject >> #visualizer` and `#visualizer:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   487
            debugger send: (GDBMI_var_delete arguments: (Array with: name))
106
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   488
        ].
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   489
    ].
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   490
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   491
    "/ Finally, clear the debugger instvar (it's tested in
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   492
    "/ `#isValid`
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   493
    debugger := nil.
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   494
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   495
    "Created: / 13-02-2018 / 09:36:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
110
727d8a9e6d5d Variable objecys: added `GDBVariableObject >> #visualizer` and `#visualizer:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   496
    "Modified: / 13-02-2018 / 23:42:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
727d8a9e6d5d Variable objecys: added `GDBVariableObject >> #visualizer` and `#visualizer:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 109
diff changeset
   497
106
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   498
!
101
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   499
104
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 103
diff changeset
   500
setDebugger: aGDBDebugger
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 103
diff changeset
   501
    super setDebugger: aGDBDebugger.
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 103
diff changeset
   502
    aGDBDebugger notNil ifTrue:[
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 103
diff changeset
   503
        changed := GDBTransientDataHolder debugger: debugger factory: [ self updateChanged ].
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 103
diff changeset
   504
    ].
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 103
diff changeset
   505
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 103
diff changeset
   506
    "Created: / 01-02-2018 / 09:29:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 103
diff changeset
   507
!
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 103
diff changeset
   508
101
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   509
setExpression: aString
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   510
    exp := aString
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   511
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   512
    "Created: / 28-01-2018 / 21:39:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   513
!
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   514
108
f34505ec6a7f Variable objects: keep track of frame in which variable object has been created
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 107
diff changeset
   515
setFrame: aGDBBrame
f34505ec6a7f Variable objects: keep track of frame in which variable object has been created
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 107
diff changeset
   516
    frame := aGDBBrame
f34505ec6a7f Variable objects: keep track of frame in which variable object has been created
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 107
diff changeset
   517
f34505ec6a7f Variable objects: keep track of frame in which variable object has been created
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 107
diff changeset
   518
    "Created: / 15-02-2018 / 09:29:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
f34505ec6a7f Variable objects: keep track of frame in which variable object has been created
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 107
diff changeset
   519
!
f34505ec6a7f Variable objects: keep track of frame in which variable object has been created
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 107
diff changeset
   520
f34505ec6a7f Variable objects: keep track of frame in which variable object has been created
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 107
diff changeset
   521
setFrameId: aString
f34505ec6a7f Variable objects: keep track of frame in which variable object has been created
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 107
diff changeset
   522
    frame := aString
f34505ec6a7f Variable objects: keep track of frame in which variable object has been created
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 107
diff changeset
   523
f34505ec6a7f Variable objects: keep track of frame in which variable object has been created
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 107
diff changeset
   524
    "Created: / 13-02-2018 / 21:24:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
f34505ec6a7f Variable objects: keep track of frame in which variable object has been created
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 107
diff changeset
   525
!
f34505ec6a7f Variable objects: keep track of frame in which variable object has been created
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 107
diff changeset
   526
101
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   527
setParent: variableObjectOrNil
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   528
    self assert: (variableObjectOrNil isNil or:[ variableObjectOrNil isKindOf: self class ]).
104
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 103
diff changeset
   529
    self assert: debugger notNil.
108
f34505ec6a7f Variable objects: keep track of frame in which variable object has been created
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 107
diff changeset
   530
    parent := variableObjectOrNil
101
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   531
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   532
    "Created: / 27-01-2018 / 22:54:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
108
f34505ec6a7f Variable objects: keep track of frame in which variable object has been created
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 107
diff changeset
   533
    "Modified: / 13-02-2018 / 22:02:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
106
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   534
!
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   535
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   536
thread_id: anInteger
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   537
    thread := anInteger
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   538
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   539
    "Created: / 04-02-2018 / 21:25:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
101
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   540
! !
100
aab8dd376f29 Fixed SubscriptionCollection >> value:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 91
diff changeset
   541
103
56bf65352505 Variable objects: preserve the identity of `GDBFrame` and `GDBVariable` objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 102
diff changeset
   542
83
b2fb8968f1f4 Improved some #printOn: and #inspectorExtraAttributes to ease debugging
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 74
diff changeset
   543
!GDBVariableObject methodsFor:'printing & storing'!
b2fb8968f1f4 Improved some #printOn: and #inspectorExtraAttributes to ease debugging
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 74
diff changeset
   544
b2fb8968f1f4 Improved some #printOn: and #inspectorExtraAttributes to ease debugging
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 74
diff changeset
   545
printOn:aStream
b2fb8968f1f4 Improved some #printOn: and #inspectorExtraAttributes to ease debugging
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 74
diff changeset
   546
    "append a printed representation if the receiver to the argument, aStream"
b2fb8968f1f4 Improved some #printOn: and #inspectorExtraAttributes to ease debugging
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 74
diff changeset
   547
b2fb8968f1f4 Improved some #printOn: and #inspectorExtraAttributes to ease debugging
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 74
diff changeset
   548
    super printOn:aStream.
b2fb8968f1f4 Improved some #printOn: and #inspectorExtraAttributes to ease debugging
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 74
diff changeset
   549
    aStream nextPutAll:'('.
b2fb8968f1f4 Improved some #printOn: and #inspectorExtraAttributes to ease debugging
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 74
diff changeset
   550
    value printOn: aStream.
b2fb8968f1f4 Improved some #printOn: and #inspectorExtraAttributes to ease debugging
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 74
diff changeset
   551
    aStream nextPutAll:')'.
b2fb8968f1f4 Improved some #printOn: and #inspectorExtraAttributes to ease debugging
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 74
diff changeset
   552
b2fb8968f1f4 Improved some #printOn: and #inspectorExtraAttributes to ease debugging
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 74
diff changeset
   553
    "Created: / 13-06-2017 / 17:03:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b2fb8968f1f4 Improved some #printOn: and #inspectorExtraAttributes to ease debugging
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 74
diff changeset
   554
! !
b2fb8968f1f4 Improved some #printOn: and #inspectorExtraAttributes to ease debugging
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 74
diff changeset
   555
101
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   556
!GDBVariableObject methodsFor:'queries'!
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   557
104
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 103
diff changeset
   558
hasChanged
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 103
diff changeset
   559
    ^ changed value
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 103
diff changeset
   560
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 103
diff changeset
   561
    "Created: / 30-01-2018 / 00:27:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
106
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   562
    "Modified: / 04-02-2018 / 22:16:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
104
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 103
diff changeset
   563
!
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 103
diff changeset
   564
101
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   565
hasChildren
112
a8138ced2f5e Fixed `GDBVariableObject >> valueFormatted:` to work even if python pretty printing is enable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 111
diff changeset
   566
    self isValid ifFalse:[ ^ false ].
a8138ced2f5e Fixed `GDBVariableObject >> valueFormatted:` to work even if python pretty printing is enable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 111
diff changeset
   567
    numchild isNil ifTrue:[
a8138ced2f5e Fixed `GDBVariableObject >> valueFormatted:` to work even if python pretty printing is enable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 111
diff changeset
   568
        children := nil.
a8138ced2f5e Fixed `GDBVariableObject >> valueFormatted:` to work even if python pretty printing is enable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 111
diff changeset
   569
        ^ self children notEmptyOrNil
a8138ced2f5e Fixed `GDBVariableObject >> valueFormatted:` to work even if python pretty printing is enable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 111
diff changeset
   570
    ].
a8138ced2f5e Fixed `GDBVariableObject >> valueFormatted:` to work even if python pretty printing is enable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 111
diff changeset
   571
    ^ numchild > 0
101
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   572
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   573
    "Created: / 27-01-2018 / 22:47:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
112
a8138ced2f5e Fixed `GDBVariableObject >> valueFormatted:` to work even if python pretty printing is enable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 111
diff changeset
   574
    "Modified: / 15-02-2018 / 13:40:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
106
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   575
! !
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   576
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   577
!GDBVariableObject methodsFor:'testing'!
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   578
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   579
inScope
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   580
   changed value. "/ to force update if necessary
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   581
    ^ inScope
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   582
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   583
    "Created: / 12-02-2018 / 21:56:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   584
!
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   585
122
c939f8a4c3cd Added support for dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 112
diff changeset
   586
isDynamic
c939f8a4c3cd Added support for dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 112
diff changeset
   587
    "Return true, if this varobj is a dynamic varobj, false otherwise"
c939f8a4c3cd Added support for dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 112
diff changeset
   588
c939f8a4c3cd Added support for dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 112
diff changeset
   589
    ^ dynamic
c939f8a4c3cd Added support for dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 112
diff changeset
   590
c939f8a4c3cd Added support for dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 112
diff changeset
   591
    "Created: / 01-06-2018 / 16:29:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
c939f8a4c3cd Added support for dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 112
diff changeset
   592
!
c939f8a4c3cd Added support for dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 112
diff changeset
   593
106
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   594
isValid
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   595
    changed value. "/ to force update if necessary
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   596
    ^ debugger notNil
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   597
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   598
    "Created: / 04-02-2018 / 21:33:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   599
    "Modified: / 12-02-2018 / 22:28:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
137
a98a4a226c26 Fixes in `GDBVariable` and `GDBVariableObject` to make them polymprph
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   600
!
a98a4a226c26 Fixes in `GDBVariable` and `GDBVariableObject` to make them polymprph
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   601
a98a4a226c26 Fixes in `GDBVariable` and `GDBVariableObject` to make them polymprph
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   602
parentIsDynamic
a98a4a226c26 Fixes in `GDBVariable` and `GDBVariableObject` to make them polymprph
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   603
    ^ parent notNil and:[ parent parentIsDynamic or: [ parent isDynamic ] ]
a98a4a226c26 Fixes in `GDBVariable` and `GDBVariableObject` to make them polymprph
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   604
a98a4a226c26 Fixes in `GDBVariable` and `GDBVariableObject` to make them polymprph
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   605
    "Created: / 01-09-2018 / 22:52:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
a98a4a226c26 Fixes in `GDBVariable` and `GDBVariableObject` to make them polymprph
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   606
    "Modified: / 03-09-2018 / 11:32:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
101
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   607
! !
d8fee2af20b2 Variable objects: added support for composite types
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 100
diff changeset
   608
104
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 103
diff changeset
   609
!GDBVariableObject methodsFor:'updating'!
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 103
diff changeset
   610
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 103
diff changeset
   611
updateChanged
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 103
diff changeset
   612
    "Check for updates and update all changed variables accordingly."
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 103
diff changeset
   613
106
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   614
    debugger isNil ifTrue:[ 
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   615
        changed := false.
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   616
        ^ false.
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   617
    ].
160
b5b1e436a994 Fix `GDBVariableObject >> updateChanged` to be an noop when thread is running
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 153
diff changeset
   618
b5b1e436a994 Fix `GDBVariableObject >> updateChanged` to be an noop when thread is running
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 153
diff changeset
   619
    "/ If the thread is running, we cannot check for updates...
b5b1e436a994 Fix `GDBVariableObject >> updateChanged` to be an noop when thread is running
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 153
diff changeset
   620
    (frame notNil and:[frame thread isRunning]) ifTrue:[
b5b1e436a994 Fix `GDBVariableObject >> updateChanged` to be an noop when thread is running
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 153
diff changeset
   621
        ^ false
b5b1e436a994 Fix `GDBVariableObject >> updateChanged` to be an noop when thread is running
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 153
diff changeset
   622
    ].    
b5b1e436a994 Fix `GDBVariableObject >> updateChanged` to be an noop when thread is running
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 153
diff changeset
   623
106
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   624
    (self thread notNil and:[ self thread isValid not]) ifTrue:[ 
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   625
        self release.
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   626
        ^ true
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   627
    ].
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   628
104
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 103
diff changeset
   629
    parent notNil ifTrue:[ 
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 103
diff changeset
   630
        parent updateChanged
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 103
diff changeset
   631
    ] ifFalse:[
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 103
diff changeset
   632
        | result changelist |
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 103
diff changeset
   633
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 103
diff changeset
   634
        result := debugger send: (GDBMI_var_update arguments: (Array with: '--all-values' with: name)).
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 103
diff changeset
   635
        changelist := result propertyAt: #changelist.
106
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   636
        self updateChanged: changelist.        
104
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 103
diff changeset
   637
    ].
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 103
diff changeset
   638
    ^ false
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 103
diff changeset
   639
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 103
diff changeset
   640
    "Created: / 30-01-2018 / 01:08:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
160
b5b1e436a994 Fix `GDBVariableObject >> updateChanged` to be an noop when thread is running
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 153
diff changeset
   641
    "Modified: / 01-11-2018 / 13:33:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
104
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 103
diff changeset
   642
!
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 103
diff changeset
   643
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 103
diff changeset
   644
updateChanged: changelist
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 103
diff changeset
   645
    | change |
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 103
diff changeset
   646
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 103
diff changeset
   647
    changelist isEmptyOrNil ifTrue:[ ^ self ].
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 103
diff changeset
   648
    change := changelist detect: [ :each | each id = self id ] ifNone:[nil].
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 103
diff changeset
   649
    change notNil ifTrue:[ 
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 103
diff changeset
   650
        value := change value.
106
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   651
        inScope := change inScope.
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   652
        inScope = 'invalid' ifTrue:[ 
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   653
            self release.
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   654
            ^ self.
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   655
        ].
104
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 103
diff changeset
   656
        changed value: true.
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 103
diff changeset
   657
        changelist remove: change.
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 103
diff changeset
   658
        changelist isEmptyOrNil ifTrue:[ ^ self ].
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 103
diff changeset
   659
    ] ifFalse:[ 
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 103
diff changeset
   660
        changed value: false.
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 103
diff changeset
   661
    ].
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 103
diff changeset
   662
    children notEmptyOrNil ifTrue:[ 
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 103
diff changeset
   663
        children do: [ :each | each updateChanged: changelist ]
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 103
diff changeset
   664
    ].
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 103
diff changeset
   665
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 103
diff changeset
   666
    "Created: / 30-01-2018 / 01:09:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
106
12c96f17fc53 Variable objects: invalidate variable object when thread on inferior terminates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 104
diff changeset
   667
    "Modified: / 12-02-2018 / 22:29:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
104
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 103
diff changeset
   668
! !
4add55336dfe Variable objects: automagically update values whenever changed.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 103
diff changeset
   669
83
b2fb8968f1f4 Improved some #printOn: and #inspectorExtraAttributes to ease debugging
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 74
diff changeset
   670
!GDBVariableObject class methodsFor:'documentation'!
b2fb8968f1f4 Improved some #printOn: and #inspectorExtraAttributes to ease debugging
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 74
diff changeset
   671
b2fb8968f1f4 Improved some #printOn: and #inspectorExtraAttributes to ease debugging
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 74
diff changeset
   672
version_HG
b2fb8968f1f4 Improved some #printOn: and #inspectorExtraAttributes to ease debugging
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 74
diff changeset
   673
b2fb8968f1f4 Improved some #printOn: and #inspectorExtraAttributes to ease debugging
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 74
diff changeset
   674
    ^ '$Changeset: <not expanded> $'
b2fb8968f1f4 Improved some #printOn: and #inspectorExtraAttributes to ease debugging
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 74
diff changeset
   675
! !
b2fb8968f1f4 Improved some #printOn: and #inspectorExtraAttributes to ease debugging
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 74
diff changeset
   676
123
1e2c548b0cde Fixed `GDBVariableObject >> #duplicate` for children od dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
   677
1e2c548b0cde Fixed `GDBVariableObject >> #duplicate` for children od dynamic varobjs
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
   678
GDBVariableObject initialize!