GDBMIParser.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Wed, 01 Oct 2014 09:38:44 +0100
changeset 52 0618438f6ba5
parent 45 deb908479a37
child 55 437ee6413c74
permissions -rw-r--r--
Report async execution event immediately. GDB 7.7.1 (and possibly other versions too) does not write '(gdb)' terminator after an async execution events (even though specification says it should). Thus, report any execution record immediately.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
     1
"{ Encoding: utf8 }"
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
     2
2
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     3
"{ Package: 'jv:libgdbs' }"
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     4
45
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
     5
Object subclass:#GDBMIParser
24
98ff50f8a25d Temporary commit : initial work on session recorder (to use for simulation later)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20
diff changeset
     6
	instanceVariableNames:'source lookahead token token2CommandMappingBlock recorder'
2
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     7
	classVariableNames:''
6
d935bc59f6f4 Removed useless MI prefix
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
     8
	poolDictionaries:'GDBCommandStatus'
3
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
     9
	category:'GDB-Private'
2
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    10
!
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    11
52
0618438f6ba5 Report async execution event immediately.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 45
diff changeset
    12
45
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
    13
!GDBMIParser class methodsFor:'instance creation'!
2
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    14
5
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
    15
on: aStringOrStream
2
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    16
    ^ self new on: aStringOrStream
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    17
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    18
    "Created: / 27-05-2014 / 23:50:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    19
! !
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    20
45
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
    21
!GDBMIParser methodsFor:'accessing'!
18
6bf3d5c400d1 Make GDBEvent and GDBCommandResult also described by value descriptor...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17
diff changeset
    22
24
98ff50f8a25d Temporary commit : initial work on session recorder (to use for simulation later)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20
diff changeset
    23
recorder
98ff50f8a25d Temporary commit : initial work on session recorder (to use for simulation later)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20
diff changeset
    24
    ^ recorder
98ff50f8a25d Temporary commit : initial work on session recorder (to use for simulation later)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20
diff changeset
    25
!
98ff50f8a25d Temporary commit : initial work on session recorder (to use for simulation later)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20
diff changeset
    26
98ff50f8a25d Temporary commit : initial work on session recorder (to use for simulation later)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20
diff changeset
    27
recorder:something
98ff50f8a25d Temporary commit : initial work on session recorder (to use for simulation later)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20
diff changeset
    28
    recorder := something.
98ff50f8a25d Temporary commit : initial work on session recorder (to use for simulation later)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20
diff changeset
    29
!
98ff50f8a25d Temporary commit : initial work on session recorder (to use for simulation later)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20
diff changeset
    30
18
6bf3d5c400d1 Make GDBEvent and GDBCommandResult also described by value descriptor...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17
diff changeset
    31
token2CommandMappingBlock: aBlock
6bf3d5c400d1 Make GDBEvent and GDBCommandResult also described by value descriptor...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17
diff changeset
    32
    token2CommandMappingBlock := aBlock.
6bf3d5c400d1 Make GDBEvent and GDBCommandResult also described by value descriptor...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17
diff changeset
    33
6bf3d5c400d1 Make GDBEvent and GDBCommandResult also described by value descriptor...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17
diff changeset
    34
    "Created: / 19-06-2014 / 21:34:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
6bf3d5c400d1 Make GDBEvent and GDBCommandResult also described by value descriptor...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17
diff changeset
    35
! !
6bf3d5c400d1 Make GDBEvent and GDBCommandResult also described by value descriptor...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17
diff changeset
    36
45
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
    37
!GDBMIParser methodsFor:'initialization'!
2
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    38
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    39
on: aStringOrStream
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    40
    source := aStringOrStream readStream
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    41
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    42
    "Created: / 27-05-2014 / 23:50:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    43
! !
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    44
45
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
    45
!GDBMIParser methodsFor:'parsing'!
2
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    46
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    47
parseCString
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    48
    self expect: $".
15
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
    49
    ^ self parseCStringRest: ''.
2
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    50
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    51
    "Created: / 27-05-2014 / 23:51:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
15
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
    52
    "Modified (format): / 18-06-2014 / 07:19:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    53
!
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    54
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    55
parseCStringEscape: char
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    56
    |ascii c |
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    57
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    58
    char == $" ifTrue:[
5
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
    59
	^ $".
2
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    60
    ].
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    61
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    62
    char == $b ifTrue:[
5
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
    63
	^ Character backspace
2
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    64
    ].
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    65
    char == $t ifTrue:[
5
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
    66
	^ Character tab
2
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    67
    ].
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    68
    char == $n ifTrue:[
5
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
    69
	^ Character cr
2
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    70
    ].
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    71
    char == $r ifTrue:[
5
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
    72
	^ Character return
2
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    73
    ].
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    74
    char == $f ifTrue:[
5
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
    75
	^ Character newPage
2
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    76
    ].
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    77
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    78
"/    char == $u ifTrue:[
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    79
"/        ascii := 0.
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    80
"/        c := source peekOrNil.
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    81
"/        4 timesRepeat:[
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    82
"/            (c isDigitRadix:16) ifFalse:[
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    83
"/                self syntaxError:'invalid hex character constant'
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    84
"/                        position:source position-2 to:(source position - 1).
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    85
"/                ^ Character value:ascii
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    86
"/            ].
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    87
"/            ascii := (ascii bitShift:4).
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    88
"/            ascii := ascii + c digitValue.
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    89
"/            source next. c := source peekOrNil.
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    90
"/        ].
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    91
"/        ^ Character value:ascii
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    92
"/    ].
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    93
    char == $x ifTrue:[
5
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
    94
	ascii := 0.
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
    95
	c := self peekOrNil.
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
    96
	2 timesRepeat:[
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
    97
	    (c isDigitRadix:16) ifFalse:[
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
    98
		self error:'Invalid hex character escape'.
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
    99
		^ Character value:ascii
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   100
	    ].
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   101
	    ascii := (ascii bitShift:4).
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   102
	    ascii := ascii + c digitValue.
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   103
	    self next. c := self peekOrNil.
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   104
	].
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   105
	^ Character value:ascii
2
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   106
    ].
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   107
    "OctalEscape ::= \ OctalDigit |
5
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   108
		     \ OctalDigit OctalDigit
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   109
		     \ ZeroToThree OctalDigit OctalDigit"
2
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   110
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   111
    (char between:$0 and:$3) ifTrue:[
5
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   112
	ascii := char digitValue.
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   113
	c := self peekOrNil.
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   114
	(c between: $0 and: $7) ifTrue:[
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   115
	    self next.
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   116
	    ascii := (ascii bitShift:3).
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   117
	    ascii := ascii + c digitValue.
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   118
	].
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   119
	c := self peekOrNil.
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   120
	(c between: $0 and: $7) ifTrue:[
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   121
	    self next.
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   122
	    ascii := (ascii bitShift:3).
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   123
	    ascii := ascii + c digitValue.
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   124
	].
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   125
	^ Character value:ascii
2
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   126
    ].
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   127
    (char between:$4 and: $7) ifTrue:[
5
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   128
	ascii := char digitValue.
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   129
	c := self peekOrNil.
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   130
	(c between: $0 and: $7) ifTrue:[
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   131
	    self next.
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   132
	    ascii := (ascii bitShift:3).
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   133
	    ascii := ascii + c digitValue.
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   134
	].
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   135
	^ Character value:ascii
2
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   136
    ].
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   137
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   138
    ^ char
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   139
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   140
    "Created: / 28-05-2014 / 00:02:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   141
!
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   142
15
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   143
parseCStringRest: alreadyRead
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   144
    | buffer inString nextChar |
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   145
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   146
    buffer := (String new: 50) writeStream.
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   147
    buffer nextPutAll: alreadyRead.
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   148
    nextChar := self next.
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   149
    inString := true.
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   150
    [inString] whileTrue:[
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   151
        nextChar isNil ifTrue:[
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   152
            self error: 'Unexpected end of input'.
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   153
        ].
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   154
        nextChar == $\ ifTrue:[
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   155
            nextChar := self next.
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   156
            nextChar := self parseCStringEscape:nextChar.
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   157
        ] ifFalse:[
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   158
            (nextChar == $") ifTrue:[
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   159
                (self peekOrNil == $") ifTrue:[
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   160
                    self next
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   161
                ] ifFalse:[
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   162
                    inString := false
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   163
                ]
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   164
            ].
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   165
        ].
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   166
        inString ifTrue:[
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   167
            buffer nextPut:nextChar.
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   168
            nextChar := self next
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   169
        ]
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   170
    ].
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   171
    ^ buffer contents
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   172
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   173
    "Created: / 18-06-2014 / 07:17:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   174
!
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   175
3
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   176
parseNl
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   177
    | c |
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   178
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   179
    c := self peek.
5
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   180
    (c == Character return or:[ c == Character cr ]) ifTrue:[
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   181
	self next
3
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   182
    ].
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   183
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   184
    "Created: / 30-05-2014 / 09:52:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   185
    "Modified: / 31-05-2014 / 00:38:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   186
!
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   187
27
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   188
parseNonBlankSequence
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   189
    ^ String streamContents:[ :buffer | 
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   190
        [ self peek isNil or: [ self peek isSeparator ] ] whileFalse:[
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   191
            buffer nextPut: self next.
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   192
        ]
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   193
    ]
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   194
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   195
    "Created: / 24-06-2014 / 23:19:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   196
!
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   197
3
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   198
parseOutput
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   199
    "
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   200
    output → ( out-of-band-record )* [ result-record ] '(gdb)' nl
5
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   201
    out-of-band-record → async-record | stream-record
4
62366cc0fd95 Added some events + fixed parser to parse a simple session.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   202
3
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   203
    "
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   204
4
62366cc0fd95 Added some events + fixed parser to parse a simple session.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   205
    | peek events |
3
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   206
6
d935bc59f6f4 Removed useless MI prefix
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   207
    events := GDBEventSet new.
8
7f4882e2562a More work on basic example. GDB exiting not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7
diff changeset
   208
7f4882e2562a More work on basic example. GDB exiting not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7
diff changeset
   209
    peek := self peek.
7f4882e2562a More work on basic example. GDB exiting not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7
diff changeset
   210
    peek == Character space ifTrue:[ self next ].
7f4882e2562a More work on basic example. GDB exiting not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7
diff changeset
   211
    peek := self peek.
7f4882e2562a More work on basic example. GDB exiting not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7
diff changeset
   212
    peek == Character cr ifTrue:[ self next ].
5
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   213
    [
33
7abcdaaa5229 Fixed parsing of command - reset token before parsing new response.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   214
        token := nil.
6
d935bc59f6f4 Removed useless MI prefix
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   215
        peek := self peek.
9
5cc8797f6523 Make simple example with -gdb-exit command working
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   216
        peek isNil ifTrue:[ 
5cc8797f6523 Make simple example with -gdb-exit command working
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   217
            source atEnd ifTrue:[ ^ events ].
5cc8797f6523 Make simple example with -gdb-exit command working
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   218
        ].
6
d935bc59f6f4 Removed useless MI prefix
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   219
        peek isDigit ifTrue:[ self parseToken. peek := self peek ].
d935bc59f6f4 Removed useless MI prefix
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   220
        peek ~~ $(
5
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   221
    ] whileTrue:[
6
d935bc59f6f4 Removed useless MI prefix
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   222
        ('*+=' includes: self peek) ifTrue:[
52
0618438f6ba5 Report async execution event immediately.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 45
diff changeset
   223
            | event |
0618438f6ba5 Report async execution event immediately.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 45
diff changeset
   224
0618438f6ba5 Report async execution event immediately.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 45
diff changeset
   225
            event := self parseAsyncRecord.
0618438f6ba5 Report async execution event immediately.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 45
diff changeset
   226
            events add: event.
0618438f6ba5 Report async execution event immediately.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 45
diff changeset
   227
            "Sigh, GDB 7.7.1 does not write '(gdb)' terminator after an
0618438f6ba5 Report async execution event immediately.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 45
diff changeset
   228
             async execution events (even though specification says it should). 
0618438f6ba5 Report async execution event immediately.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 45
diff changeset
   229
             Thus, report any execution record immediately"
0618438f6ba5 Report async execution event immediately.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 45
diff changeset
   230
            event isExecutionEvent ifTrue:[
0618438f6ba5 Report async execution event immediately.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 45
diff changeset
   231
                events last token: token.
0618438f6ba5 Report async execution event immediately.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 45
diff changeset
   232
                recorder notNil ifTrue:[ 
0618438f6ba5 Report async execution event immediately.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 45
diff changeset
   233
                    recorder recordResponseEnd.
0618438f6ba5 Report async execution event immediately.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 45
diff changeset
   234
                ].
0618438f6ba5 Report async execution event immediately.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 45
diff changeset
   235
                ^ events
0618438f6ba5 Report async execution event immediately.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 45
diff changeset
   236
            ].
6
d935bc59f6f4 Removed useless MI prefix
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   237
        ] ifFalse:[
d935bc59f6f4 Removed useless MI prefix
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   238
            ('~@&' includes: self peek) ifTrue:[
d935bc59f6f4 Removed useless MI prefix
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   239
                events add: self parseStreamRecord.
d935bc59f6f4 Removed useless MI prefix
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   240
            ] ifFalse:[
d935bc59f6f4 Removed useless MI prefix
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   241
                peek == $^ ifTrue:[
d935bc59f6f4 Removed useless MI prefix
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   242
                    events add: self parseResultRecord.
d935bc59f6f4 Removed useless MI prefix
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   243
                ] ifFalse:[
d935bc59f6f4 Removed useless MI prefix
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   244
                    self error:'Invalid MI record'.
d935bc59f6f4 Removed useless MI prefix
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   245
                ].
d935bc59f6f4 Removed useless MI prefix
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   246
            ].
d935bc59f6f4 Removed useless MI prefix
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   247
        ].
8
7f4882e2562a More work on basic example. GDB exiting not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7
diff changeset
   248
        events last token: token.
3
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   249
    ].
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   250
    self expect: '(gdb)'.
25
58e042a191a9 More work on GDB session recorder.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 24
diff changeset
   251
    [ self peek == Character space ] whileTrue:[ self next ].
3
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   252
    self parseNl.
24
98ff50f8a25d Temporary commit : initial work on session recorder (to use for simulation later)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20
diff changeset
   253
    recorder notNil ifTrue:[ 
98ff50f8a25d Temporary commit : initial work on session recorder (to use for simulation later)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20
diff changeset
   254
        recorder recordResponseEnd.
98ff50f8a25d Temporary commit : initial work on session recorder (to use for simulation later)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20
diff changeset
   255
    ].
3
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   256
    ^ events
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   257
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   258
    "Created: / 30-05-2014 / 09:52:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
52
0618438f6ba5 Report async execution event immediately.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 45
diff changeset
   259
    "Modified: / 01-10-2014 / 09:36:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
3
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   260
!
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   261
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   262
parseResultClass
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   263
    "
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   264
    result-class → 'done' | 'running' | 'connected' | 'error' | 'exit'
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   265
    "
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   266
    | c1 c2 |
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   267
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   268
    c1 := self peek.
5
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   269
    c1 == $d ifTrue:[
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   270
	self expect: 'done'.
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   271
	^ CommandStatusDone.
3
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   272
    ].
5
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   273
    c1 == $r ifTrue:[
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   274
	self expect: 'running'.
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   275
	^ CommandStatusDone.
3
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   276
    ].
5
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   277
    c1 == $c ifTrue:[
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   278
	self expect: 'connected'.
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   279
	^ CommandStatusConnected.
3
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   280
    ].
5
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   281
    c1 == $e ifTrue:[
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   282
	self next.
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   283
	c2 := self peek.
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   284
	c2 == $x ifTrue:[
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   285
	    self expect: 'xit'.
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   286
	    ^ CommandStatusExit.
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   287
	].
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   288
	c2 == $r ifTrue:[
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   289
	    self expect: 'rror'.
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   290
	    ^ CommandStatusError.
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   291
	].
3
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   292
    ].
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   293
    ^ self error:'Unsupported result class'
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   294
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   295
    "Created: / 31-05-2014 / 00:16:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
4
62366cc0fd95 Added some events + fixed parser to parse a simple session.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   296
    "Modified: / 01-06-2014 / 23:21:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
3
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   297
!
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   298
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   299
parseResultRecord
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   300
    "
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   301
    result-record → '^' result-class ( ',' result )* nl
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   302
    "
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   303
18
6bf3d5c400d1 Make GDBEvent and GDBCommandResult also described by value descriptor...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17
diff changeset
   304
    | command result descriptor propertyName propertyDescriptor propertyValue |
3
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   305
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   306
    self expect: $^.
6
d935bc59f6f4 Removed useless MI prefix
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   307
    result := GDBCommandResult new.
3
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   308
    result status: self parseResultClass.
45
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   309
    descriptor := GDBMAContainer new.
18
6bf3d5c400d1 Make GDBEvent and GDBCommandResult also described by value descriptor...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17
diff changeset
   310
    (token notNil and:[ token2CommandMappingBlock notNil ]) ifTrue:[ 
6bf3d5c400d1 Make GDBEvent and GDBCommandResult also described by value descriptor...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17
diff changeset
   311
        command := token2CommandMappingBlock value: token. 
6bf3d5c400d1 Make GDBEvent and GDBCommandResult also described by value descriptor...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17
diff changeset
   312
        command notNil ifTrue:[
6bf3d5c400d1 Make GDBEvent and GDBCommandResult also described by value descriptor...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17
diff changeset
   313
            result command: command.
45
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   314
            descriptor := command resultDescription.        
18
6bf3d5c400d1 Make GDBEvent and GDBCommandResult also described by value descriptor...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17
diff changeset
   315
        ].
3
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   316
    ].
18
6bf3d5c400d1 Make GDBEvent and GDBCommandResult also described by value descriptor...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17
diff changeset
   317
    [ self peek == $, ] whileTrue:[
6bf3d5c400d1 Make GDBEvent and GDBCommandResult also described by value descriptor...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17
diff changeset
   318
        self next. "/ eat $,
6bf3d5c400d1 Make GDBEvent and GDBCommandResult also described by value descriptor...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17
diff changeset
   319
        propertyName := self parseVariable.
6bf3d5c400d1 Make GDBEvent and GDBCommandResult also described by value descriptor...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17
diff changeset
   320
        propertyDescriptor := descriptor propertyDescriptorAt: propertyName.
6bf3d5c400d1 Make GDBEvent and GDBCommandResult also described by value descriptor...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17
diff changeset
   321
        self expect: $=.
6bf3d5c400d1 Make GDBEvent and GDBCommandResult also described by value descriptor...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17
diff changeset
   322
        propertyDescriptor isNil ifTrue:[ 
6bf3d5c400d1 Make GDBEvent and GDBCommandResult also described by value descriptor...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17
diff changeset
   323
            propertyValue := self parseValue.
6bf3d5c400d1 Make GDBEvent and GDBCommandResult also described by value descriptor...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17
diff changeset
   324
        ] ifFalse:[ 
45
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   325
            propertyValue := propertyDescriptor parseUsingGDBMIParser:self. 
18
6bf3d5c400d1 Make GDBEvent and GDBCommandResult also described by value descriptor...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17
diff changeset
   326
        ]. 
6bf3d5c400d1 Make GDBEvent and GDBCommandResult also described by value descriptor...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17
diff changeset
   327
        result propertyAt: propertyName put: propertyValue.
6bf3d5c400d1 Make GDBEvent and GDBCommandResult also described by value descriptor...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17
diff changeset
   328
     ].             
3
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   329
    self parseNl.
6
d935bc59f6f4 Removed useless MI prefix
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   330
    ^ GDBCommandResultEvent new result: result.
3
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   331
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   332
    "Created: / 30-05-2014 / 09:52:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
45
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   333
    "Modified: / 23-09-2014 / 23:37:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
3
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   334
!
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   335
2
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   336
parseToken
8
7f4882e2562a More work on basic example. GDB exiting not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7
diff changeset
   337
    token := 0.
7f4882e2562a More work on basic example. GDB exiting not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7
diff changeset
   338
    [ self peek isDigit ] whileTrue:[ 
7f4882e2562a More work on basic example. GDB exiting not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7
diff changeset
   339
        token := (token * 10) + (self next codePoint - $0 codePoint).
7f4882e2562a More work on basic example. GDB exiting not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7
diff changeset
   340
    ].
2
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   341
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   342
    "Created: / 28-05-2014 / 00:14:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
8
7f4882e2562a More work on basic example. GDB exiting not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7
diff changeset
   343
    "Modified: / 03-06-2014 / 00:49:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   344
! !
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   345
45
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   346
!GDBMIParser methodsFor:'parsing-async events'!
3
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   347
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   348
parseAsyncRecord
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   349
    "
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   350
    async-record → exec-async-output | status-async-output | notify-async-output
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   351
    "
5
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   352
    self peek == $* ifTrue:[
6
d935bc59f6f4 Removed useless MI prefix
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   353
        self next.
d935bc59f6f4 Removed useless MI prefix
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   354
        ^ self parseAsyncRecord: GDBExecutionEvent.
3
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   355
    ].
5
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   356
    self peek == $+ ifTrue:[
6
d935bc59f6f4 Removed useless MI prefix
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   357
        self next.
d935bc59f6f4 Removed useless MI prefix
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   358
        ^ self parseAsyncRecord: GDBStatusEvent .
3
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   359
    ].
5
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   360
    self peek == $= ifTrue:[
6
d935bc59f6f4 Removed useless MI prefix
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   361
        self next.
d935bc59f6f4 Removed useless MI prefix
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   362
        ^ self parseAsyncRecord: GDBNotificationEvent.
3
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   363
    ].
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   364
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   365
    ^ self error: 'Invalid async-record'
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   366
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   367
    "Created: / 30-05-2014 / 09:57:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
6
d935bc59f6f4 Removed useless MI prefix
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   368
    "Modified: / 02-06-2014 / 22:19:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
3
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   369
!
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   370
13
45ec9353003f Added classes for each async event type.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
   371
parseAsyncRecord: eventClassBase
3
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   372
    "
4
62366cc0fd95 Added some events + fixed parser to parse a simple session.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   373
    async-output → async-class ( ',' result )* nl
5
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   374
    "
3
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   375
18
6bf3d5c400d1 Make GDBEvent and GDBCommandResult also described by value descriptor...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17
diff changeset
   376
    | type eventClass event propertyName propertyDescriptor descriptor propertyValue |
3
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   377
4
62366cc0fd95 Added some events + fixed parser to parse a simple session.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   378
    type := self parseString.
13
45ec9353003f Added classes for each async event type.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
   379
    eventClass := eventClassBase eventClassForType: type.
18
6bf3d5c400d1 Make GDBEvent and GDBCommandResult also described by value descriptor...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17
diff changeset
   380
    event := eventClass new.
6bf3d5c400d1 Make GDBEvent and GDBCommandResult also described by value descriptor...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17
diff changeset
   381
    event type: type.
45
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   382
    descriptor := eventClass description.
18
6bf3d5c400d1 Make GDBEvent and GDBCommandResult also described by value descriptor...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17
diff changeset
   383
    [ self peek == $, ] whileTrue:[
6bf3d5c400d1 Make GDBEvent and GDBCommandResult also described by value descriptor...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17
diff changeset
   384
        self next. "/ eat $,
6bf3d5c400d1 Make GDBEvent and GDBCommandResult also described by value descriptor...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17
diff changeset
   385
        propertyName := self parseVariable.
6bf3d5c400d1 Make GDBEvent and GDBCommandResult also described by value descriptor...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17
diff changeset
   386
        propertyDescriptor := descriptor propertyDescriptorAt: propertyName.
6bf3d5c400d1 Make GDBEvent and GDBCommandResult also described by value descriptor...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17
diff changeset
   387
        self expect: $=.
6bf3d5c400d1 Make GDBEvent and GDBCommandResult also described by value descriptor...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17
diff changeset
   388
        propertyDescriptor isNil ifTrue:[ 
6bf3d5c400d1 Make GDBEvent and GDBCommandResult also described by value descriptor...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17
diff changeset
   389
            propertyValue := self parseValue.
6bf3d5c400d1 Make GDBEvent and GDBCommandResult also described by value descriptor...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17
diff changeset
   390
        ] ifFalse:[ 
45
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   391
            propertyValue := propertyDescriptor parseUsingGDBMIParser:self. 
18
6bf3d5c400d1 Make GDBEvent and GDBCommandResult also described by value descriptor...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17
diff changeset
   392
        ]. 
6bf3d5c400d1 Make GDBEvent and GDBCommandResult also described by value descriptor...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17
diff changeset
   393
        event propertyAt: propertyName put: propertyValue.
4
62366cc0fd95 Added some events + fixed parser to parse a simple session.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   394
    ].
62366cc0fd95 Added some events + fixed parser to parse a simple session.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   395
    self parseNl.
3
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   396
18
6bf3d5c400d1 Make GDBEvent and GDBCommandResult also described by value descriptor...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17
diff changeset
   397
    ^ event
3
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   398
4
62366cc0fd95 Added some events + fixed parser to parse a simple session.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   399
    "Created: / 01-06-2014 / 23:43:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
18
6bf3d5c400d1 Make GDBEvent and GDBCommandResult also described by value descriptor...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17
diff changeset
   400
    "Modified: / 19-06-2014 / 21:43:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
3
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   401
! !
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   402
45
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   403
!GDBMIParser methodsFor:'parsing-commands'!
27
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   404
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   405
parseCommand
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   406
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   407
    self peek isDigit ifTrue:[ 
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   408
        self parseToken
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   409
    ].
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   410
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   411
    ^ self peek == $- ifTrue:[ 
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   412
        self parseCommandMI
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   413
    ] ifFalse:[ 
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   414
        self parseCommandCLI
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   415
    ].
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   416
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   417
    "Created: / 24-06-2014 / 23:08:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   418
!
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   419
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   420
parseCommandCLI
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   421
    "raise an error: this method should be implemented (TODO)"
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   422
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   423
    ^ GDBCLICommand new
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   424
        token: token;
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   425
        value: self nextLine;
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   426
        yourself
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   427
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   428
    "Created: / 24-06-2014 / 23:10:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   429
!
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   430
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   431
parseCommandMI
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   432
    "raise an error: this method should be implemented (TODO)"
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   433
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   434
    | operation className class args |
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   435
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   436
    self next. "/ eat $-.
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   437
    operation := self parseVariable.
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   438
    className := ('GDBMI_' , (operation copyReplaceAll: $- with: $_)) asSymbol.
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   439
    class := Smalltalk at: className.
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   440
    args := OrderedCollection new.
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   441
    [ self peek isNil or:[ self peek == Character cr ] ] whileFalse:[  
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   442
        self skipSeparators.
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   443
        self peek == $" ifTrue:[ 
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   444
            args add: self parseCString
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   445
        ] ifFalse:[ 
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   446
            args add: self parseNonBlankSequence
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   447
        ].
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   448
    ].
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   449
    self next. "/ eat CR.
32
d9c96b33afd6 Temporary commit: more work on simulator...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 27
diff changeset
   450
    ^ (class arguments: args asArray) token: token.
27
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   451
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   452
    "Created: / 24-06-2014 / 23:10:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
32
d9c96b33afd6 Temporary commit: more work on simulator...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 27
diff changeset
   453
    "Modified: / 26-08-2014 / 08:02:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
27
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   454
! !
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   455
45
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   456
!GDBMIParser methodsFor:'parsing-misc'!
3
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   457
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   458
parseResult
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   459
    "
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   460
    result → variable = value
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   461
    "
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   462
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   463
    | name value |
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   464
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   465
    name := self parseVariable.
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   466
    self expect: $=.
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   467
    value := self parseValue.
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   468
    ^ name -> value
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   469
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   470
    "Created: / 30-05-2014 / 10:15:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   471
    "Modified: / 31-05-2014 / 00:39:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   472
!
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   473
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   474
parseString
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   475
    ^ String streamContents:[:s|
27
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   476
        [ self peek notNil and:[self peek isLetterOrDigit or:['-_' includes: self peek ] ] ] whileTrue:[
15
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   477
            s nextPut: self next.
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   478
        ]
3
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   479
    ].
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   480
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   481
    "Created: / 30-05-2014 / 10:32:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
27
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   482
    "Modified: / 24-06-2014 / 23:30:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
3
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   483
!
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   484
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   485
parseVariable
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   486
    "
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   487
    variable → string
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   488
    "
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   489
    ^ self parseString
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   490
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   491
    "Created: / 30-05-2014 / 10:31:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   492
! !
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   493
45
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   494
!GDBMIParser methodsFor:'parsing-stream output'!
3
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   495
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   496
parseStreamRecord
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   497
    "
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   498
    stream-record → console-stream-output | target-stream-output | log-stream-output
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   499
    "
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   500
4
62366cc0fd95 Added some events + fixed parser to parse a simple session.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   501
    self peek == $~ ifTrue:[
6
d935bc59f6f4 Removed useless MI prefix
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   502
        self next.
d935bc59f6f4 Removed useless MI prefix
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   503
        ^ self parseStreamRecord: GDBConsoleOutputEvent.
3
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   504
    ].
5
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   505
    self peek == $@ ifTrue:[
6
d935bc59f6f4 Removed useless MI prefix
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   506
        self next.
d935bc59f6f4 Removed useless MI prefix
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   507
        ^ self parseStreamRecord: GDBTargetOutputEvent.
3
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   508
    ].
5
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   509
    self peek == $& ifTrue:[
6
d935bc59f6f4 Removed useless MI prefix
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   510
        self next.
d935bc59f6f4 Removed useless MI prefix
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   511
        ^ self parseStreamRecord: GDBLogOutputEvent.
3
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   512
    ].
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   513
    self error:'Invalid stream record'
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   514
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   515
    "Created: / 30-05-2014 / 09:57:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
6
d935bc59f6f4 Removed useless MI prefix
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   516
    "Modified: / 02-06-2014 / 22:21:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
3
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   517
!
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   518
4
62366cc0fd95 Added some events + fixed parser to parse a simple session.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   519
parseStreamRecord: eventClass
62366cc0fd95 Added some events + fixed parser to parse a simple session.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   520
    | value |
3
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   521
4
62366cc0fd95 Added some events + fixed parser to parse a simple session.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   522
    value := self parseCString.
62366cc0fd95 Added some events + fixed parser to parse a simple session.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   523
    self parseNl.
62366cc0fd95 Added some events + fixed parser to parse a simple session.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   524
    ^ eventClass new value: value; yourself
62366cc0fd95 Added some events + fixed parser to parse a simple session.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   525
62366cc0fd95 Added some events + fixed parser to parse a simple session.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   526
    "Created: / 01-06-2014 / 23:41:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
3
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   527
! !
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   528
45
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   529
!GDBMIParser methodsFor:'parsing-utils'!
2
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   530
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   531
expect: aStringOrChar
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   532
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   533
    | c |
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   534
    aStringOrChar isCharacter ifTrue:[
5
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   535
	(self atEnd or:[(c := self next) ~= aStringOrChar]) ifTrue:[
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   536
	    self error:('Expected ''%1'' got ''%2''.' bindWith: aStringOrChar with: c).
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   537
	].
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   538
	^self.
2
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   539
    ].
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   540
    aStringOrChar isString ifTrue:[
5
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   541
	aStringOrChar do:[:expected|
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   542
	    (self atEnd or:[(c := self next) ~= expected]) ifTrue:[
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   543
		self error:('Expected ''%1''.' bindWith: aStringOrChar).
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   544
	    ].
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   545
	].
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   546
	^self.
2
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   547
    ].
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   548
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   549
    self error:'Invalid expected value'.
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   550
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   551
    "Created: / 19-11-2012 / 20:08:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   552
    "Modified: / 28-05-2014 / 00:17:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   553
!
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   554
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   555
expectLineEnd
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   556
    self expect: Character cr.
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   557
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   558
    "Created: / 19-11-2012 / 20:06:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   559
!
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   560
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   561
expectSpace
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   562
    self expect: Character space.
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   563
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   564
    "Created: / 19-11-2012 / 20:06:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   565
! !
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   566
45
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   567
!GDBMIParser methodsFor:'parsing-values'!
3
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   568
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   569
parseConst
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   570
    "
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   571
    const → c-string
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   572
    "
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   573
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   574
    ^ self parseCString.
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   575
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   576
    "Created: / 30-05-2014 / 10:36:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   577
!
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   578
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   579
parseList
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   580
    "
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   581
    list → '[]' | '[' value ( ',' value )* ']' | '[' result ( ',' result )* ']'
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   582
    "
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   583
15
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   584
    | list |
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   585
3
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   586
    self expect: $[.
15
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   587
    list := self parseListBody.
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   588
    self expect: $].
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   589
    ^ list
3
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   590
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   591
    "Created: / 30-05-2014 / 10:36:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
15
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   592
    "Modified: / 17-06-2014 / 22:14:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   593
!
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   594
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   595
parseListBody
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   596
    | value object |
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   597
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   598
    object := OrderedCollection new.
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   599
    self peek ~~ $] ifTrue:[
17
10d696c79188 Value descroptors refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   600
        [
10d696c79188 Value descroptors refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   601
            ('"{[' includes: self peek) ifFalse:[ 
10d696c79188 Value descroptors refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   602
                self parseVariable.
10d696c79188 Value descroptors refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   603
                self expect: $=.
10d696c79188 Value descroptors refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   604
            ].
15
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   605
            value := self parseValue.
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   606
            object add: value.
17
10d696c79188 Value descroptors refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   607
        ] doWhile:[
10d696c79188 Value descroptors refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   608
            (self peek == $,) ifTrue:[ self next. true ] ifFalse:[ false ]     
15
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   609
        ].
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   610
    ].
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   611
    ^ object asArray
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   612
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   613
    "Created: / 17-06-2014 / 22:14:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
17
10d696c79188 Value descroptors refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   614
    "Modified: / 19-06-2014 / 09:32:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
3
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   615
!
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   616
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   617
parseTuple
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   618
    | object |
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   619
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   620
    self expect: ${.
15
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   621
    object := self parseTupleBody.
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   622
    self expect: $}.
3
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   623
    ^ object
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   624
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   625
    "Created: / 30-05-2014 / 10:36:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
15
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   626
    "Modified (comment): / 14-06-2014 / 02:28:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   627
!
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   628
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   629
parseTupleBody
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   630
    | name value dict |
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   631
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   632
    dict := Dictionary new.
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   633
    self peek ~~ $} ifTrue:[
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   634
        name := self parseVariable.
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   635
        self expect: $=.
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   636
        value := self parseValue.
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   637
        dict at: name put: value.
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   638
        [ self peek == $, ] whileTrue:[
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   639
            self next.
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   640
            name := self parseVariable.
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   641
            self expect: $=.
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   642
            value := self parseValue.
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   643
            dict at: name put: value.
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   644
        ].
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   645
    ].
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   646
    ^ dict
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   647
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   648
    "Created: / 14-06-2014 / 02:19:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
3
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   649
!
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   650
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   651
parseValue
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   652
    "
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   653
    value → const | tuple | list
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   654
    "
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   655
5
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   656
    self peek == $" ifTrue:[
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   657
	^ self parseConst
3
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   658
    ].
5
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   659
    self peek == ${ ifTrue:[
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   660
	^ self parseTuple.
3
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   661
    ].
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   662
    self peek == $[ ifTrue:[
5
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   663
	^ self parseList
3
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   664
    ].
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   665
    self error:'Invalid value'
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   666
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   667
    "Created: / 30-05-2014 / 10:31:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   668
! !
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   669
45
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   670
!GDBMIParser methodsFor:'parsing-values-typed'!
15
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   671
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   672
parseValueAsBoolean
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   673
    "
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   674
    bool → 'y' | 'n' | value
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   675
    "
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   676
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   677
    self peek == $" ifTrue:[
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   678
        | c |
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   679
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   680
        self expect: $".
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   681
        c := self next.
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   682
        (c ~~ $y and:[ c ~~ $n ]) ifTrue:[ 
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   683
            ^ self parseCStringRest: c asString.  
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   684
        ].
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   685
        self peek ~~ $" ifTrue:[ 
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   686
            ^ self parseCStringRest: c asString.  
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   687
        ].
17
10d696c79188 Value descroptors refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   688
        self next.
15
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   689
        ^ c == $y
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   690
    ].
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   691
    ^ self parseValue
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   692
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   693
    "Created: / 18-06-2014 / 07:33:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
17
10d696c79188 Value descroptors refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   694
    "Modified: / 18-06-2014 / 20:55:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
10d696c79188 Value descroptors refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   695
!
10d696c79188 Value descroptors refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   696
45
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   697
parseValueAsInstanceOf: class
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   698
    | description |
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   699
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   700
    class == Boolean ifTrue:[ 
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   701
        description := Magritte::MABooleanDescription new.
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   702
    ] ifFalse:[
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   703
    class == Integer ifTrue:[ 
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   704
        description := Magritte::MANumberDescription new
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   705
    ] ifFalse:[
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   706
    class == String ifTrue:[ 
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   707
        description := Magritte::MAStringDescription new
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   708
    ] ifFalse:[
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   709
        description := class description. 
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   710
    ]]].     
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   711
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   712
    ^ self parseValueAsListOf: class describedBy: description.
17
10d696c79188 Value descroptors refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   713
10d696c79188 Value descroptors refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   714
    "Created: / 18-06-2014 / 20:28:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
45
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   715
    "Modified: / 23-09-2014 / 23:16:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
17
10d696c79188 Value descroptors refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   716
!
10d696c79188 Value descroptors refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   717
10d696c79188 Value descroptors refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   718
parseValueAsInstanceOf: class describedBy: descriptor
10d696c79188 Value descroptors refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   719
    | object propertyName propertyValue propertyDescriptor |
10d696c79188 Value descroptors refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   720
10d696c79188 Value descroptors refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   721
    self peek ~~ ${ ifTrue:[ ^ self parseValue ].
10d696c79188 Value descroptors refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   722
    self next. "/ eat ${
10d696c79188 Value descroptors refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   723
    object := class new.
10d696c79188 Value descroptors refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   724
    self peek ~~ $} ifTrue:[
10d696c79188 Value descroptors refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   725
        [ 
10d696c79188 Value descroptors refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   726
            propertyName := self parseVariable.
10d696c79188 Value descroptors refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   727
            propertyDescriptor := descriptor propertyDescriptorAt: propertyName.
10d696c79188 Value descroptors refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   728
            self expect: $=.
10d696c79188 Value descroptors refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   729
            propertyDescriptor isNil ifTrue:[ 
10d696c79188 Value descroptors refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   730
                propertyValue := self parseValue.
10d696c79188 Value descroptors refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   731
            ] ifFalse:[ 
45
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   732
                propertyValue := propertyDescriptor parseUsingGDBMIParser:self. 
17
10d696c79188 Value descroptors refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   733
            ].
10d696c79188 Value descroptors refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   734
            object propertyAt: propertyName put: propertyValue
10d696c79188 Value descroptors refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   735
        ] doWhile: [ 
10d696c79188 Value descroptors refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   736
            (self peek == $,) ifTrue:[ self next. true ] ifFalse:[ false ]
10d696c79188 Value descroptors refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   737
        ].
10d696c79188 Value descroptors refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   738
    ].
10d696c79188 Value descroptors refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   739
    self expect: $}.
10d696c79188 Value descroptors refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   740
    ^ object
10d696c79188 Value descroptors refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   741
10d696c79188 Value descroptors refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   742
    "Created: / 18-06-2014 / 20:28:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
10d696c79188 Value descroptors refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   743
    "Modified: / 18-06-2014 / 23:34:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
15
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   744
!
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   745
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   746
parseValueAsInteger
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   747
    "
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   748
    bool → ''' [0-9]+ ''' | value
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   749
    "
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   750
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   751
    self peek == $" ifTrue:[
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   752
        | c v |
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   753
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   754
        self expect: $".
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   755
        c := self next.
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   756
        v := 0.
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   757
        c isDigit ifTrue:[ 
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   758
            [ c isDigit ] whileTrue:[ 
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   759
                v := (v * 10) + (c codePoint - $0 codePoint).
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   760
                c := self next.
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   761
            ].
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   762
            c == $" ifTrue:[ 
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   763
                ^ v
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   764
            ] ifFalse:[ 
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   765
                ^ self parseCStringRest:v printString , c  
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   766
            ].
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   767
        ].
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   768
        ^ self parseCStringRest: c asString
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   769
    ].
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   770
    ^ self parseValue
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   771
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   772
    "Created: / 18-06-2014 / 07:39:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
17
10d696c79188 Value descroptors refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   773
!
10d696c79188 Value descroptors refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   774
45
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   775
parseValueAsListOf: class
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   776
    | description |
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   777
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   778
    class == Boolean ifTrue:[ 
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   779
        description := Magritte::MABooleanDescription new.
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   780
    ] ifFalse:[
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   781
    class == Integer ifTrue:[ 
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   782
        description := Magritte::MANumberDescription new
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   783
    ] ifFalse:[
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   784
    class == String ifTrue:[ 
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   785
        description := Magritte::MAStringDescription new
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   786
    ] ifFalse:[
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   787
        description := class description. 
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   788
    ]]].     
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   789
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   790
    ^ self parseValueAsListOf: class describedBy: description.
17
10d696c79188 Value descroptors refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   791
10d696c79188 Value descroptors refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   792
    "Created: / 18-06-2014 / 21:00:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
45
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   793
    "Modified: / 23-09-2014 / 23:17:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
17
10d696c79188 Value descroptors refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   794
!
10d696c79188 Value descroptors refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   795
10d696c79188 Value descroptors refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   796
parseValueAsListOf:class describedBy:descriptor
10d696c79188 Value descroptors refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   797
    | list |
10d696c79188 Value descroptors refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   798
10d696c79188 Value descroptors refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   799
    self peek ~~ $[ ifTrue:[ ^ self parseValue ].
10d696c79188 Value descroptors refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   800
    self next. "/ eat ${
10d696c79188 Value descroptors refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   801
    self peek ~~ $] ifTrue:[
10d696c79188 Value descroptors refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   802
        list := OrderedCollection new.
10d696c79188 Value descroptors refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   803
        [ 
40
0ce76b671515 Some more support for stack frames.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 33
diff changeset
   804
            self peek isAlphaNumeric ifTrue:[ 
0ce76b671515 Some more support for stack frames.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 33
diff changeset
   805
                self parseVariable.
0ce76b671515 Some more support for stack frames.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 33
diff changeset
   806
                self expect: $=. 
0ce76b671515 Some more support for stack frames.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 33
diff changeset
   807
            ].
45
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   808
            list add: (descriptor parseUsingGDBMIParser:self)
17
10d696c79188 Value descroptors refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   809
        ] doWhile: [ 
10d696c79188 Value descroptors refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   810
            (self peek == $,) ifTrue:[ self next. true ] ifFalse:[ false ]
10d696c79188 Value descroptors refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   811
        ].
10d696c79188 Value descroptors refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   812
    ].
10d696c79188 Value descroptors refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   813
    self expect: $].
10d696c79188 Value descroptors refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   814
    ^ list
10d696c79188 Value descroptors refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   815
10d696c79188 Value descroptors refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   816
    "Created: / 18-06-2014 / 21:00:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
40
0ce76b671515 Some more support for stack frames.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 33
diff changeset
   817
    "Modified: / 17-09-2014 / 08:03:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
45
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   818
!
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   819
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   820
parseValueAsString
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   821
    ^ self parseCString
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   822
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   823
    "Created: / 23-09-2014 / 22:22:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
15
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   824
! !
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   825
45
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   826
!GDBMIParser methodsFor:'streaming'!
2
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   827
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   828
atEnd
15
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   829
    ^ lookahead isNil and:[ source atEnd ].
2
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   830
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   831
    "Created: / 28-05-2014 / 00:17:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
15
65d3b4bfe871 Initial support for parsing typed values (now only booleans and integers)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
   832
    "Modified: / 14-06-2014 / 02:27:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   833
!
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   834
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   835
next
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   836
    | next |
5
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   837
    lookahead notNil ifTrue:[
24
98ff50f8a25d Temporary commit : initial work on session recorder (to use for simulation later)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20
diff changeset
   838
        next := lookahead.
98ff50f8a25d Temporary commit : initial work on session recorder (to use for simulation later)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20
diff changeset
   839
        lookahead := nil.
98ff50f8a25d Temporary commit : initial work on session recorder (to use for simulation later)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20
diff changeset
   840
        ^ next.
2
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   841
    ].
24
98ff50f8a25d Temporary commit : initial work on session recorder (to use for simulation later)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20
diff changeset
   842
    next := source next.
98ff50f8a25d Temporary commit : initial work on session recorder (to use for simulation later)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20
diff changeset
   843
    recorder notNil ifTrue:[ 
98ff50f8a25d Temporary commit : initial work on session recorder (to use for simulation later)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20
diff changeset
   844
        recorder recordResponseChar: next.
98ff50f8a25d Temporary commit : initial work on session recorder (to use for simulation later)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20
diff changeset
   845
    ].
98ff50f8a25d Temporary commit : initial work on session recorder (to use for simulation later)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20
diff changeset
   846
    ^ next
2
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   847
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   848
    "Created: / 23-10-2012 / 10:57:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
24
98ff50f8a25d Temporary commit : initial work on session recorder (to use for simulation later)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20
diff changeset
   849
    "Modified: / 22-06-2014 / 21:56:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   850
!
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   851
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   852
nextLine
24
98ff50f8a25d Temporary commit : initial work on session recorder (to use for simulation later)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20
diff changeset
   853
    | line |
27
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   854
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   855
    line := lookahead notNil 
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   856
                ifTrue:[ lookahead asString ,  source nextLine ] 
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   857
                ifFalse:[ source nextLine ].
2
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   858
    lookahead := nil.
24
98ff50f8a25d Temporary commit : initial work on session recorder (to use for simulation later)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20
diff changeset
   859
    recorder notNil ifTrue:[ 
98ff50f8a25d Temporary commit : initial work on session recorder (to use for simulation later)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20
diff changeset
   860
        recorder recordResponse: line.  
98ff50f8a25d Temporary commit : initial work on session recorder (to use for simulation later)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20
diff changeset
   861
    ].
98ff50f8a25d Temporary commit : initial work on session recorder (to use for simulation later)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20
diff changeset
   862
    ^ line
2
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   863
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   864
    "Created: / 23-10-2012 / 11:05:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
27
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   865
    "Modified: / 24-06-2014 / 23:28:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   866
!
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   867
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   868
peek
5
5cdb702e1bec stc fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
   869
    lookahead notNil ifTrue:[
24
98ff50f8a25d Temporary commit : initial work on session recorder (to use for simulation later)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20
diff changeset
   870
        ^ lookahead
2
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   871
    ].
24
98ff50f8a25d Temporary commit : initial work on session recorder (to use for simulation later)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20
diff changeset
   872
    lookahead := source next.
98ff50f8a25d Temporary commit : initial work on session recorder (to use for simulation later)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20
diff changeset
   873
    recorder notNil ifTrue:[ 
98ff50f8a25d Temporary commit : initial work on session recorder (to use for simulation later)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20
diff changeset
   874
        lookahead notNil ifTrue:[
98ff50f8a25d Temporary commit : initial work on session recorder (to use for simulation later)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20
diff changeset
   875
            recorder recordResponseChar: lookahead.
98ff50f8a25d Temporary commit : initial work on session recorder (to use for simulation later)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20
diff changeset
   876
        ].
98ff50f8a25d Temporary commit : initial work on session recorder (to use for simulation later)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20
diff changeset
   877
    ].
98ff50f8a25d Temporary commit : initial work on session recorder (to use for simulation later)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20
diff changeset
   878
    ^ lookahead
2
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   879
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   880
    "Created: / 28-05-2014 / 00:18:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
24
98ff50f8a25d Temporary commit : initial work on session recorder (to use for simulation later)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20
diff changeset
   881
    "Modified: / 23-06-2014 / 09:34:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   882
!
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   883
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   884
peekOrNil
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   885
    lookahead notNil ifTrue:[ ^ lookahead ].
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   886
    source atEnd ifTrue:[ ^ nil ].
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   887
    ^ self peek
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   888
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   889
    "Created: / 28-05-2014 / 00:15:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   890
!
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   891
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   892
skipSeparators
27
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   893
    [ self peek notNil and:[ self peek isSeparator ] ] whileTrue:[ self next ]
2
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   894
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   895
    "Created: / 19-11-2012 / 20:05:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
27
e7e01078d9c4 Temporary commit - more on process simulator
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
   896
    "Modified: / 24-06-2014 / 23:31:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   897
! !
6
d935bc59f6f4 Removed useless MI prefix
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   898
52
0618438f6ba5 Report async execution event immediately.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 45
diff changeset
   899
!GDBMIParser class methodsFor:'documentation'!
0618438f6ba5 Report async execution event immediately.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 45
diff changeset
   900
0618438f6ba5 Report async execution event immediately.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 45
diff changeset
   901
version_HG
0618438f6ba5 Report async execution event immediately.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 45
diff changeset
   902
0618438f6ba5 Report async execution event immediately.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 45
diff changeset
   903
    ^ '$Changeset: <not expanded> $'
0618438f6ba5 Report async execution event immediately.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 45
diff changeset
   904
! !
0618438f6ba5 Report async execution event immediately.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 45
diff changeset
   905