More work on events and parsing.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/GDBMICommand.st Sat May 31 00:42:30 2014 +0100
@@ -0,0 +1,9 @@
+"{ Package: 'jv:libgdbs' }"
+
+Object subclass:#GDBMICommand
+ instanceVariableNames:''
+ classVariableNames:''
+ poolDictionaries:''
+ category:'GDB-Core-MI'
+!
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/GDBMICommandResult.st Sat May 31 00:42:30 2014 +0100
@@ -0,0 +1,35 @@
+"{ Package: 'jv:libgdbs' }"
+
+Object subclass:#GDBMICommandResult
+ instanceVariableNames:'status value'
+ classVariableNames:''
+ poolDictionaries:''
+ category:'GDB-Core-MI'
+!
+
+
+!GDBMICommandResult methodsFor:'accessing'!
+
+status
+ ^ status
+!
+
+status:something
+ status := something.
+!
+
+value
+ ^ value
+!
+
+value:something
+ value := something.
+! !
+
+!GDBMICommandResult class methodsFor:'documentation'!
+
+version_HG
+
+ ^ '$Changeset: <not expanded> $'
+! !
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/GDBMICommandResultEvent.st Sat May 31 00:42:30 2014 +0100
@@ -0,0 +1,25 @@
+"{ Package: 'jv:libgdbs' }"
+
+GDBMIEvent subclass:#GDBMICommandResultEvent
+ instanceVariableNames:'result'
+ classVariableNames:''
+ poolDictionaries:''
+ category:'GDB-Core-MI-Events'
+!
+
+!GDBMICommandResultEvent methodsFor:'accessing'!
+
+result
+ ^ result
+!
+
+result:something
+ result := something.
+! !
+
+!GDBMICommandResultEvent methodsFor:'testing'!
+
+isCommandResultEvent
+ ^ true
+! !
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/GDBMICommandStatus.st Sat May 31 00:42:30 2014 +0100
@@ -0,0 +1,28 @@
+"{ Package: 'jv:libgdbs' }"
+
+SharedPool subclass:#GDBMICommandStatus
+ instanceVariableNames:''
+ classVariableNames:'CommandStatusDone CommandStatusRunning CommandStatusConnected
+ CommandStatusError CommandStatusExit'
+ poolDictionaries:''
+ category:'GDB-Core-MI'
+!
+
+!GDBMICommandStatus class methodsFor:'initialization'!
+
+initialize
+ "Invoked at system start or when the class is dynamically loaded."
+
+ "/ please change as required (and remove this comment)
+
+ CommandStatusDone := #done.
+ CommandStatusRunning := #running.
+ CommandStatusConnected := #commected.
+ CommandStatusError := #error.
+ CommandStatusExit := #exit.
+
+ "Modified: / 31-05-2014 / 00:05:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+
+GDBMICommandStatus initialize!
--- a/GDBMIDriver.st Wed May 28 09:42:40 2014 +0100
+++ b/GDBMIDriver.st Sat May 31 00:42:30 2014 +0100
@@ -6,7 +6,7 @@
eventNotifier eventDispatcher'
classVariableNames:''
poolDictionaries:''
- category:'GDB-Private-MI'
+ category:'GDB-Private'
!
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/GDBMIEvent.st Sat May 31 00:42:30 2014 +0100
@@ -0,0 +1,25 @@
+"{ Package: 'jv:libgdbs' }"
+
+Announcement subclass:#GDBMIEvent
+ instanceVariableNames:'token'
+ classVariableNames:''
+ poolDictionaries:''
+ category:'GDB-Core-MI-Events'
+!
+
+!GDBMIEvent methodsFor:'accessing'!
+
+token
+ ^ token
+!
+
+token:something
+ token := something.
+! !
+
+!GDBMIEvent methodsFor:'testing'!
+
+isCommandResultEvent
+ ^ false
+! !
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/GDBMIEventSet.st Sat May 31 00:42:30 2014 +0100
@@ -0,0 +1,9 @@
+"{ Package: 'jv:libgdbs' }"
+
+OrderedCollection subclass:#GDBMIEventSet
+ instanceVariableNames:''
+ classVariableNames:''
+ poolDictionaries:''
+ category:'GDB-Core-MI-Events'
+!
+
--- a/GDBMIParser.st Wed May 28 09:42:40 2014 +0100
+++ b/GDBMIParser.st Sat May 31 00:42:30 2014 +0100
@@ -1,10 +1,12 @@
+"{ Encoding: utf8 }"
+
"{ Package: 'jv:libgdbs' }"
Object subclass:#GDBMIParser
- instanceVariableNames:'source lookahead'
+ instanceVariableNames:'source lookahead token'
classVariableNames:''
- poolDictionaries:''
- category:'GDB-Private-MI'
+ poolDictionaries:'GDBMICommandStatus'
+ category:'GDB-Private'
!
!GDBMIParser class methodsFor:'instance creation'!
@@ -146,11 +148,282 @@
"Created: / 28-05-2014 / 00:02:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
+parseNl
+ | c |
+
+ c := self peek.
+ (c == Character return or:[ c == Character cr ]) ifTrue:[
+ self next
+ ].
+
+ "Created: / 30-05-2014 / 09:52:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 31-05-2014 / 00:38:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+parseOutOfBandRecord
+ "
+ out-of-band-record → async-record | stream-record
+ "
+
+ ('*+=' includes: self peek) ifTrue:[
+ self parseAsyncRecord.
+ ].
+
+ ('~@&' includes: self peek) ifTrue:[
+ self parseStreamRecord.
+ ].
+
+ self error: 'Invalid out-of-bound record'
+
+ "Created: / 30-05-2014 / 09:52:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+parseOutput
+ "
+ output → ( out-of-band-record )* [ result-record ] '(gdb)' nl
+ "
+
+ | events |
+
+ events := GDBMIEventSet new.
+ [
+ self peek isDigit ifTrue:[ self parseToken ].
+ self peek ~~ $^
+ ] whileTrue:[
+ events add: self parseOutOfBandRecord.
+ ].
+ events add: self parseResultRecord.
+ self expect: '(gdb)'.
+ self parseNl.
+ ^ events
+
+ "Created: / 30-05-2014 / 09:52:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 31-05-2014 / 00:39:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+parseResultClass
+ "
+ result-class → 'done' | 'running' | 'connected' | 'error' | 'exit'
+ "
+ | c1 c2 |
+
+ c1 := self peek.
+ c1 == $d ifTrue:[
+ self expect: 'done'.
+ ^ CommandStatusDone.
+ ].
+ c1 == $r ifTrue:[
+ self expect: 'running'.
+ ^ CommandStatusRunning.
+ ].
+ c1 == $c ifTrue:[
+ self expect: 'connected'.
+ ^ CommandStatusConnected.
+ ].
+ c1 == $e ifTrue:[
+ self next.
+ c2 := self peek.
+ c2 == $x ifTrue:[
+ self expect: 'xit'.
+ ^ CommandStatusExit.
+ ].
+ c2 == $r ifTrue:[
+ self expect: 'rror'.
+ ^ CommandStatusError.
+ ].
+ ].
+ ^ self error:'Unsupported result class'
+
+ "Created: / 31-05-2014 / 00:16:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+parseResultRecord
+ "
+ result-record → '^' result-class ( ',' result )* nl
+ "
+
+ | result |
+
+ self expect: $^.
+ result := GDBMICommandResult new.
+ result status: self parseResultClass.
+ self peek == $, ifTrue:[
+ self next.
+ result value: self parseResult.
+ ].
+ self parseNl.
+ ^ GDBMICommandResultEvent new result: result.
+
+ "Created: / 30-05-2014 / 09:52:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 31-05-2014 / 00:34:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
parseToken
"Created: / 28-05-2014 / 00:14:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
+!GDBMIParser methodsFor:'parsing-async events'!
+
+parseAsyncClass
+ "raise an error: this method should be implemented (TODO)"
+
+ self peek == $s ifTrue:[
+ self expect: 'stopped'.
+ ^ self
+ ].
+ self error:'Unsupported async class'
+
+ "Created: / 30-05-2014 / 10:15:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+parseAsyncOutput
+ "
+ async-output → async-class ( ',' result )* nl
+ "
+
+ self parseAsyncClass.
+ [ self peek == $, ] whileTrue:[
+ self next.
+ self parseResult
+ ].
+ self parseNl.
+
+ "Created: / 30-05-2014 / 10:13:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+parseAsyncRecord
+ "
+ async-record → exec-async-output | status-async-output | notify-async-output
+ "
+ self peek == $* ifTrue:[
+ ^ self parseExecAsyncOutput.
+ ].
+ self peek == $+ ifTrue:[
+ ^ self parseStatusAsyncOutput.
+ ].
+ self peek == $= ifTrue:[
+ ^ self parseNotifyAsyncOutput.
+ ].
+
+ ^ self error: 'Invalid async-record'
+
+ "Created: / 30-05-2014 / 09:57:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+parseExecAsyncOutput
+ "
+ exec-async-output → '*' async-output
+ "
+
+ self expect: $*.
+ ^ self parseAsyncOutput.
+
+ "Created: / 30-05-2014 / 10:10:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+parseNotifyAsyncOutput
+ "
+ status-notify-output → '=' async-output
+ "
+
+ self expect: $*.
+ ^ self parseAsyncOutput.
+
+ "Created: / 30-05-2014 / 10:10:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+parseStatusAsyncOutput
+ "
+ status-async-output → '+' async-output
+ "
+
+ self expect: $*.
+ ^ self parseAsyncOutput.
+
+ "Created: / 30-05-2014 / 10:10:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!GDBMIParser methodsFor:'parsing-misc'!
+
+parseResult
+ "
+ result → variable = value
+ "
+
+ | name value |
+
+ name := self parseVariable.
+ self expect: $=.
+ value := self parseValue.
+ ^ name -> value
+
+ "Created: / 30-05-2014 / 10:15:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 31-05-2014 / 00:39:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+parseString
+ ^ String streamContents:[:s|
+ [ self peek isLetter or:['-' includes: self peek ] ] whileTrue:[
+ s nextPut: self next.
+ ]
+ ].
+
+ "Created: / 30-05-2014 / 10:32:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 31-05-2014 / 00:33:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+parseVariable
+ "
+ variable → string
+ "
+ ^ self parseString
+
+ "Created: / 30-05-2014 / 10:31:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!GDBMIParser methodsFor:'parsing-stream output'!
+
+parseConsoleStreamOutput
+ self expect: $~.
+ ^ self parseCString
+
+ "Created: / 30-05-2014 / 10:28:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+parseLogStreamOutput
+ self expect: $&.
+ ^ self parseCString
+
+ "Created: / 30-05-2014 / 10:28:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+parseStreamRecord
+ "
+ stream-record → console-stream-output | target-stream-output | log-stream-output
+ "
+
+ self peek == $~ ifTrue:[
+ ^ self parseConsoleStreamOutput
+ ].
+ self peek == $@ ifTrue:[
+ ^ self parseTargetStreamOutput
+ ].
+ self peek == $& ifTrue:[
+ ^ self parseLogStreamOutput
+ ].
+ self error:'Invalid stream record'
+
+ "Created: / 30-05-2014 / 09:57:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+parseTargetStreamOutput
+ self expect: $@.
+ ^ self parseCString
+
+ "Created: / 30-05-2014 / 10:28:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
!GDBMIParser methodsFor:'parsing-utils'!
expect: aStringOrChar
@@ -189,6 +462,91 @@
"Created: / 19-11-2012 / 20:06:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
+!GDBMIParser methodsFor:'parsing-values'!
+
+parseConst
+ "
+ const → c-string
+ "
+
+ ^ self parseCString.
+
+ "Created: / 30-05-2014 / 10:36:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+parseList
+ "
+ list → '[]' | '[' value ( ',' value )* ']' | '[' result ( ',' result )* ']'
+ "
+
+ self expect: $[.
+ ^ self peek == $] ifTrue:[
+ self next.
+ #()
+ ] ifFalse:[
+ Array streamContents:[ :s|
+ s nextPut: self parseValue.
+ [ self peek == $, ] whileTrue:[
+ self next.
+ s nextPut: self parseValue.
+ ].
+ self expect: $].
+ ].
+ ].
+
+ "Created: / 30-05-2014 / 10:36:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+parseTuple
+ "raise an error: this method should be implemented (TODO)"
+
+ | object |
+
+ object := GDBTuple new.
+ self expect: ${.
+ self peek == $} ifTrue:[
+ self next.
+ ] ifFalse:[
+ | name value |
+
+ name := self parseVariable.
+ self expect: $=.
+ value := self parseValue.
+ object propertyAt: name put: value.
+ [ self peek == $, ] whileTrue:[
+ self next.
+ name := self parseVariable.
+ self expect: $=.
+ value := self parseValue.
+ object propertyAt: name put: value.
+ ].
+ self expect: $}.
+ ].
+ ^ object
+
+ "Created: / 30-05-2014 / 10:36:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 31-05-2014 / 00:35:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+parseValue
+ "
+ value → const | tuple | list
+ "
+
+ self peek == $" ifTrue:[
+ ^ self parseConst
+ ].
+ self peek == ${ ifTrue:[
+ ^ self parseTuple.
+ ].
+ self peek == $[ ifTrue:[
+ ^ self parseList
+ ].
+ self error:'Invalid value'
+
+ "Created: / 30-05-2014 / 10:31:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
!GDBMIParser methodsFor:'streaming'!
atEnd
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/GDBObject.st Sat May 31 00:42:30 2014 +0100
@@ -0,0 +1,25 @@
+"{ Package: 'jv:libgdbs' }"
+
+Object subclass:#GDBObject
+ instanceVariableNames:'properties'
+ classVariableNames:''
+ poolDictionaries:''
+ category:'GDB-Core'
+!
+
+!GDBObject methodsFor:'accessing-properties'!
+
+propertyAt: name
+ properties isNil ifTrue:[ Object keyNotFoundError: name ].
+ ^ properties at: name ifAbsent:[ Object keyNotFoundError: name ].
+
+ "Created: / 31-05-2014 / 00:00:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+propertyAt: name put: value
+ properties isNil ifTrue:[ properties := Dictionary new ].
+ properties at: name put: value
+
+ "Created: / 31-05-2014 / 00:01:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/GDBTuple.st Sat May 31 00:42:30 2014 +0100
@@ -0,0 +1,9 @@
+"{ Package: 'jv:libgdbs' }"
+
+GDBObject subclass:#GDBTuple
+ instanceVariableNames:''
+ classVariableNames:''
+ poolDictionaries:''
+ category:'GDB-Core'
+!
+
--- a/Make.proto Wed May 28 09:42:40 2014 +0100
+++ b/Make.proto Sat May 31 00:42:30 2014 +0100
@@ -34,7 +34,7 @@
# add the path(es) here:,
# ********** OPTIONAL: MODIFY the next lines ***
# LOCALINCLUDES=-Ifoo -Ibar
-LOCALINCLUDES= -I$(INCLUDE_TOP)/stx/libbasic
+LOCALINCLUDES= -I$(INCLUDE_TOP)/stx/goodies/announcements -I$(INCLUDE_TOP)/stx/libbasic
# if you need any additional defines for embedded C code,
@@ -102,6 +102,7 @@
# build all mandatory prerequisite packages (containing superclasses) for this package
prereq:
cd $(TOP)/libbasic && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
+ cd $(TOP)/goodies/announcements && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
@@ -123,9 +124,17 @@
# BEGINMAKEDEPEND --- do not remove this line; make depend needs it
$(OUTDIR)GDB.$(O) GDB.$(H): GDB.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)GDBLauncher.$(O) GDBLauncher.$(H): GDBLauncher.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)GDBMICommand.$(O) GDBMICommand.$(H): GDBMICommand.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)GDBMICommandResult.$(O) GDBMICommandResult.$(H): GDBMICommandResult.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)GDBMICommandStatus.$(O) GDBMICommandStatus.$(H): GDBMICommandStatus.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/SharedPool.$(H) $(STCHDR)
$(OUTDIR)GDBMIDriver.$(O) GDBMIDriver.$(H): GDBMIDriver.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)GDBMIParser.$(O) GDBMIParser.$(H): GDBMIParser.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)GDBMIEvent.$(O) GDBMIEvent.$(H): GDBMIEvent.st $(INCLUDE_TOP)/stx/goodies/announcements/Announcement.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)GDBMIEventSet.$(O) GDBMIEventSet.$(H): GDBMIEventSet.st $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/OrderedCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/SequenceableCollection.$(H) $(STCHDR)
+$(OUTDIR)GDBObject.$(O) GDBObject.$(H): GDBObject.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)jv_libgdbs.$(O) jv_libgdbs.$(H): jv_libgdbs.st $(INCLUDE_TOP)/stx/libbasic/LibraryDefinition.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/ProjectDefinition.$(H) $(STCHDR)
+$(OUTDIR)GDBMICommandResultEvent.$(O) GDBMICommandResultEvent.$(H): GDBMICommandResultEvent.st $(INCLUDE_TOP)/jv/libgdbs/GDBMIEvent.$(H) $(INCLUDE_TOP)/stx/goodies/announcements/Announcement.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)GDBMIParser.$(O) GDBMIParser.$(H): GDBMIParser.st $(INCLUDE_TOP)/jv/libgdbs/GDBMICommandStatus.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)GDBTuple.$(O) GDBTuple.$(H): GDBTuple.st $(INCLUDE_TOP)/jv/libgdbs/GDBObject.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
# ENDMAKEDEPEND --- do not remove this line
--- a/Make.spec Wed May 28 09:42:40 2014 +0100
+++ b/Make.spec Sat May 31 00:42:30 2014 +0100
@@ -52,9 +52,17 @@
COMMON_CLASSES= \
GDB \
GDBLauncher \
+ GDBMICommand \
+ GDBMICommandResult \
+ GDBMICommandStatus \
GDBMIDriver \
+ GDBMIEvent \
+ GDBMIEventSet \
+ GDBObject \
+ jv_libgdbs \
+ GDBMICommandResultEvent \
GDBMIParser \
- jv_libgdbs \
+ GDBTuple \
@@ -62,9 +70,17 @@
COMMON_OBJS= \
$(OUTDIR_SLASH)GDB.$(O) \
$(OUTDIR_SLASH)GDBLauncher.$(O) \
+ $(OUTDIR_SLASH)GDBMICommand.$(O) \
+ $(OUTDIR_SLASH)GDBMICommandResult.$(O) \
+ $(OUTDIR_SLASH)GDBMICommandStatus.$(O) \
$(OUTDIR_SLASH)GDBMIDriver.$(O) \
+ $(OUTDIR_SLASH)GDBMIEvent.$(O) \
+ $(OUTDIR_SLASH)GDBMIEventSet.$(O) \
+ $(OUTDIR_SLASH)GDBObject.$(O) \
+ $(OUTDIR_SLASH)jv_libgdbs.$(O) \
+ $(OUTDIR_SLASH)GDBMICommandResultEvent.$(O) \
$(OUTDIR_SLASH)GDBMIParser.$(O) \
- $(OUTDIR_SLASH)jv_libgdbs.$(O) \
+ $(OUTDIR_SLASH)GDBTuple.$(O) \
--- a/abbrev.stc Wed May 28 09:42:40 2014 +0100
+++ b/abbrev.stc Sat May 31 00:42:30 2014 +0100
@@ -3,6 +3,14 @@
# it provides information about a classes filename, category and especially namespace.
GDB GDB jv:libgdbs 'GDB-Core' 0
GDBLauncher GDBLauncher jv:libgdbs 'GDB-Private' 0
-GDBMIDriver GDBMIDriver jv:libgdbs 'GDB-Private-MI' 0
-GDBMIParser GDBMIParser jv:libgdbs 'GDB-Private-MI' 0
+GDBMICommand GDBMICommand jv:libgdbs 'GDB-Core-MI' 0
+GDBMICommandResult GDBMICommandResult jv:libgdbs 'GDB-Core-MI' 0
+GDBMICommandStatus GDBMICommandStatus jv:libgdbs 'GDB-Core-MI' 0
+GDBMIDriver GDBMIDriver jv:libgdbs 'GDB-Private' 0
+GDBMIEvent GDBMIEvent jv:libgdbs 'GDB-Core-MI-Events' 0
+GDBMIEventSet GDBMIEventSet jv:libgdbs 'GDB-Core-MI-Events' 0
+GDBObject GDBObject jv:libgdbs 'GDB-Core' 0
jv_libgdbs jv_libgdbs jv:libgdbs '* Projects & Packages *' 3
+GDBMICommandResultEvent GDBMICommandResultEvent jv:libgdbs 'GDB-Core-MI-Events' 0
+GDBMIParser GDBMIParser jv:libgdbs 'GDB-Private' 0
+GDBTuple GDBTuple jv:libgdbs 'GDB-Core' 0
--- a/bc.mak Wed May 28 09:42:40 2014 +0100
+++ b/bc.mak Sat May 31 00:42:30 2014 +0100
@@ -34,7 +34,7 @@
-LOCALINCLUDES= -I$(INCLUDE_TOP)\stx\libbasic
+LOCALINCLUDES= -I$(INCLUDE_TOP)\stx\goodies\announcements -I$(INCLUDE_TOP)\stx\libbasic
LOCALDEFINES=
STCLOCALOPT=-package=$(PACKAGE) -I. $(LOCALINCLUDES) -headerDir=. $(STCLOCALOPTIMIZATIONS) $(STCWARNINGS) $(LOCALDEFINES) -varPrefix=$(LIBNAME)
@@ -51,6 +51,7 @@
# build all mandatory prerequisite packages (containing superclasses) for this package
prereq:
pushd ..\..\stx\libbasic & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
+ pushd ..\..\stx\goodies\announcements & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
@@ -69,9 +70,17 @@
# BEGINMAKEDEPEND --- do not remove this line; make depend needs it
$(OUTDIR)GDB.$(O) GDB.$(H): GDB.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)GDBLauncher.$(O) GDBLauncher.$(H): GDBLauncher.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)GDBMICommand.$(O) GDBMICommand.$(H): GDBMICommand.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)GDBMICommandResult.$(O) GDBMICommandResult.$(H): GDBMICommandResult.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)GDBMICommandStatus.$(O) GDBMICommandStatus.$(H): GDBMICommandStatus.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\SharedPool.$(H) $(STCHDR)
$(OUTDIR)GDBMIDriver.$(O) GDBMIDriver.$(H): GDBMIDriver.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)GDBMIParser.$(O) GDBMIParser.$(H): GDBMIParser.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)GDBMIEvent.$(O) GDBMIEvent.$(H): GDBMIEvent.st $(INCLUDE_TOP)\stx\goodies\announcements\Announcement.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)GDBMIEventSet.$(O) GDBMIEventSet.$(H): GDBMIEventSet.st $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\OrderedCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\SequenceableCollection.$(H) $(STCHDR)
+$(OUTDIR)GDBObject.$(O) GDBObject.$(H): GDBObject.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)jv_libgdbs.$(O) jv_libgdbs.$(H): jv_libgdbs.st $(INCLUDE_TOP)\stx\libbasic\LibraryDefinition.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\ProjectDefinition.$(H) $(STCHDR)
+$(OUTDIR)GDBMICommandResultEvent.$(O) GDBMICommandResultEvent.$(H): GDBMICommandResultEvent.st $(INCLUDE_TOP)\jv\libgdbs\GDBMIEvent.$(H) $(INCLUDE_TOP)\stx\goodies\announcements\Announcement.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)GDBMIParser.$(O) GDBMIParser.$(H): GDBMIParser.st $(INCLUDE_TOP)\jv\libgdbs\GDBMICommandStatus.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)GDBTuple.$(O) GDBTuple.$(H): GDBTuple.st $(INCLUDE_TOP)\jv\libgdbs\GDBObject.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
# ENDMAKEDEPEND --- do not remove this line
--- a/jv_libgdbs.st Wed May 28 09:42:40 2014 +0100
+++ b/jv_libgdbs.st Sat May 31 00:42:30 2014 +0100
@@ -28,7 +28,8 @@
by searching along the inheritance chain of all of my classes."
^ #(
- #'stx:libbasic' "LibraryDefinition - superclass of jv_libgdbs "
+ #'stx:goodies/announcements' "Announcement - superclass of GDBMICommandResultEvent "
+ #'stx:libbasic' "Collection - superclass of GDBMIEventSet "
)
!
@@ -65,9 +66,17 @@
"<className> or (<className> attributes...) in load order"
GDB
GDBLauncher
+ GDBMICommand
+ GDBMICommandResult
+ GDBMICommandStatus
GDBMIDriver
+ GDBMIEvent
+ GDBMIEventSet
+ GDBObject
+ #'jv_libgdbs'
+ GDBMICommandResultEvent
GDBMIParser
- #'jv_libgdbs'
+ GDBTuple
)
!
--- a/libInit.cc Wed May 28 09:42:40 2014 +0100
+++ b/libInit.cc Sat May 31 00:42:30 2014 +0100
@@ -29,9 +29,17 @@
__BEGIN_PACKAGE2__("libjv_libgdbs", _libjv_libgdbs_Init, "jv:libgdbs");
_GDB_Init(pass,__pRT__,snd);
_GDBLauncher_Init(pass,__pRT__,snd);
+_GDBMICommand_Init(pass,__pRT__,snd);
+_GDBMICommandResult_Init(pass,__pRT__,snd);
+_GDBMICommandStatus_Init(pass,__pRT__,snd);
_GDBMIDriver_Init(pass,__pRT__,snd);
+_GDBMIEvent_Init(pass,__pRT__,snd);
+_GDBMIEventSet_Init(pass,__pRT__,snd);
+_GDBObject_Init(pass,__pRT__,snd);
+_jv_137libgdbs_Init(pass,__pRT__,snd);
+_GDBMICommandResultEvent_Init(pass,__pRT__,snd);
_GDBMIParser_Init(pass,__pRT__,snd);
-_jv_137libgdbs_Init(pass,__pRT__,snd);
+_GDBTuple_Init(pass,__pRT__,snd);
__END_PACKAGE__();
--- a/libgdbs.rc Wed May 28 09:42:40 2014 +0100
+++ b/libgdbs.rc Sat May 31 00:42:30 2014 +0100
@@ -4,7 +4,7 @@
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION 6,2,32767,32767
- PRODUCTVERSION 6,2,3,0
+ PRODUCTVERSION 6,2,4,0
#if (__BORLANDC__)
FILEFLAGSMASK VS_FF_DEBUG | VS_FF_PRERELEASE
FILEFLAGS VS_FF_PRERELEASE | VS_FF_SPECIALBUILD
@@ -24,8 +24,8 @@
VALUE "InternalName", "jv:libgdbs\0"
VALUE "LegalCopyright", "My CopyRight or CopyLeft\0"
VALUE "ProductName", "LibraryName\0"
- VALUE "ProductVersion", "6.2.3.0\0"
- VALUE "ProductDate", "Wed, 28 May 2014 08:41:15 GMT\0"
+ VALUE "ProductVersion", "6.2.4.0\0"
+ VALUE "ProductDate", "Fri, 30 May 2014 23:41:48 GMT\0"
END
END
--- a/tests/GDBMIParserTests.st Wed May 28 09:42:40 2014 +0100
+++ b/tests/GDBMIParserTests.st Sat May 31 00:42:30 2014 +0100
@@ -3,8 +3,8 @@
TestCase subclass:#GDBMIParserTests
instanceVariableNames:''
classVariableNames:''
- poolDictionaries:''
- category:'GDB-Private-MI-Tests'
+ poolDictionaries:'GDBMICommandStatus'
+ category:'GDB-Private-Tests'
!
!GDBMIParserTests methodsFor:'tests - C strings'!
@@ -21,3 +21,24 @@
"Created: / 28-05-2014 / 00:05:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
+!GDBMIParserTests methodsFor:'tests - examples'!
+
+test_simple_example_01
+
+ | parser events |
+
+ parser := GDBMIParser on:
+'^done,bkpt={number="1",type="breakpoint",disp="keep",enabled="y",addr="0x08048564",func="main",file="myprog.c",fullname="/home/nickrob/myprog.c",line="68",thread-groups=["i1"],times="0"}
+(gdb)
+'.
+ events := parser parseOutput.
+
+ self assert: events size == 1.
+ self assert: events first isCommandResultEvent.
+ self assert: events first result status == CommandStatusDone.
+ self assert: events first result value key = 'bkpt'.
+ self assert: (events first result value value propertyAt: 'addr') = '0x08048564'
+
+ "Created: / 30-05-2014 / 23:53:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- a/tests/Make.proto Wed May 28 09:42:40 2014 +0100
+++ b/tests/Make.proto Sat May 31 00:42:30 2014 +0100
@@ -34,7 +34,7 @@
# add the path(es) here:,
# ********** OPTIONAL: MODIFY the next lines ***
# LOCALINCLUDES=-Ifoo -Ibar
-LOCALINCLUDES= -I$(INCLUDE_TOP)/stx/goodies/sunit -I$(INCLUDE_TOP)/stx/libbasic
+LOCALINCLUDES= -I$(INCLUDE_TOP)/jv/libgdbs -I$(INCLUDE_TOP)/stx/goodies/sunit -I$(INCLUDE_TOP)/stx/libbasic
# if you need any additional defines for embedded C code,
@@ -102,8 +102,10 @@
# build all mandatory prerequisite packages (containing superclasses) for this package
prereq:
cd $(TOP)/libbasic && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
+ cd $(TOP)/goodies/announcements && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
cd $(TOP)/libbasic2 && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
cd $(TOP)/libview && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
+ cd ../ && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
cd $(TOP)/libview2 && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
cd $(TOP)/goodies/sunit && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
@@ -125,7 +127,7 @@
# BEGINMAKEDEPEND --- do not remove this line; make depend needs it
-$(OUTDIR)GDBMIParserTests.$(O) GDBMIParserTests.$(H): GDBMIParserTests.st $(INCLUDE_TOP)/stx/goodies/sunit/TestAsserter.$(H) $(INCLUDE_TOP)/stx/goodies/sunit/TestCase.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)GDBMIParserTests.$(O) GDBMIParserTests.$(H): GDBMIParserTests.st $(INCLUDE_TOP)/jv/libgdbs/GDBMICommandStatus.$(H) $(INCLUDE_TOP)/stx/goodies/sunit/TestAsserter.$(H) $(INCLUDE_TOP)/stx/goodies/sunit/TestCase.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)jv_libgdbs_tests.$(O) jv_libgdbs_tests.$(H): jv_libgdbs_tests.st $(INCLUDE_TOP)/stx/libbasic/LibraryDefinition.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/ProjectDefinition.$(H) $(STCHDR)
# ENDMAKEDEPEND --- do not remove this line
--- a/tests/abbrev.stc Wed May 28 09:42:40 2014 +0100
+++ b/tests/abbrev.stc Sat May 31 00:42:30 2014 +0100
@@ -1,5 +1,5 @@
# automagically generated by the project definition
# this file is needed for stc to be able to compile modules independently.
# it provides information about a classes filename, category and especially namespace.
-GDBMIParserTests GDBMIParserTests jv:libgdbs/tests 'GDB-Private-MI-Tests' 1
+GDBMIParserTests GDBMIParserTests jv:libgdbs/tests 'GDB-Private-Tests' 1
jv_libgdbs_tests jv_libgdbs_tests jv:libgdbs/tests '* Projects & Packages *' 3
--- a/tests/bc.mak Wed May 28 09:42:40 2014 +0100
+++ b/tests/bc.mak Sat May 31 00:42:30 2014 +0100
@@ -34,7 +34,7 @@
-LOCALINCLUDES= -I$(INCLUDE_TOP)\stx\goodies\sunit -I$(INCLUDE_TOP)\stx\libbasic
+LOCALINCLUDES= -I$(INCLUDE_TOP)\jv\libgdbs -I$(INCLUDE_TOP)\stx\goodies\sunit -I$(INCLUDE_TOP)\stx\libbasic
LOCALDEFINES=
STCLOCALOPT=-package=$(PACKAGE) -I. $(LOCALINCLUDES) -headerDir=. $(STCLOCALOPTIMIZATIONS) $(STCWARNINGS) $(LOCALDEFINES) -varPrefix=$(LIBNAME)
@@ -51,8 +51,10 @@
# build all mandatory prerequisite packages (containing superclasses) for this package
prereq:
pushd ..\..\..\stx\libbasic & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
+ pushd ..\..\..\stx\goodies\announcements & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
pushd ..\..\..\stx\libbasic2 & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
pushd ..\..\..\stx\libview & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
+ pushd .. & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
pushd ..\..\..\stx\libview2 & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
pushd ..\..\..\stx\goodies\sunit & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
@@ -71,7 +73,7 @@
# BEGINMAKEDEPEND --- do not remove this line; make depend needs it
-$(OUTDIR)GDBMIParserTests.$(O) GDBMIParserTests.$(H): GDBMIParserTests.st $(INCLUDE_TOP)\stx\goodies\sunit\TestAsserter.$(H) $(INCLUDE_TOP)\stx\goodies\sunit\TestCase.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)GDBMIParserTests.$(O) GDBMIParserTests.$(H): GDBMIParserTests.st $(INCLUDE_TOP)\jv\libgdbs\GDBMICommandStatus.$(H) $(INCLUDE_TOP)\stx\goodies\sunit\TestAsserter.$(H) $(INCLUDE_TOP)\stx\goodies\sunit\TestCase.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)jv_libgdbs_tests.$(O) jv_libgdbs_tests.$(H): jv_libgdbs_tests.st $(INCLUDE_TOP)\stx\libbasic\LibraryDefinition.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\ProjectDefinition.$(H) $(STCHDR)
# ENDMAKEDEPEND --- do not remove this line
--- a/tests/jv_libgdbs_tests.st Wed May 28 09:42:40 2014 +0100
+++ b/tests/jv_libgdbs_tests.st Sat May 31 00:42:30 2014 +0100
@@ -28,6 +28,7 @@
by searching along the inheritance chain of all of my classes."
^ #(
+ #'jv:libgdbs' "GDBMICommandStatus - shared pool used by GDBMIParserTests "
#'stx:goodies/sunit' "TestAsserter - superclass of GDBMIParserTests "
#'stx:libbasic' "LibraryDefinition - superclass of jv_libgdbs_tests "
)
@@ -41,7 +42,6 @@
by searching all classes (and their packages) which are referenced by my classes."
^ #(
- #'jv:libgdbs' "GDBMIParser - referenced by GDBMIParserTests>>test_c_string_01 "
)
!
--- a/tests/tests.rc Wed May 28 09:42:40 2014 +0100
+++ b/tests/tests.rc Sat May 31 00:42:30 2014 +0100
@@ -4,7 +4,7 @@
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION 6,2,32767,32767
- PRODUCTVERSION 6,2,3,0
+ PRODUCTVERSION 6,2,4,0
#if (__BORLANDC__)
FILEFLAGSMASK VS_FF_DEBUG | VS_FF_PRERELEASE
FILEFLAGS VS_FF_PRERELEASE | VS_FF_SPECIALBUILD
@@ -24,8 +24,8 @@
VALUE "InternalName", "jv:libgdbs/tests\0"
VALUE "LegalCopyright", "My CopyRight or CopyLeft\0"
VALUE "ProductName", "LibraryName\0"
- VALUE "ProductVersion", "6.2.3.0\0"
- VALUE "ProductDate", "Wed, 28 May 2014 08:41:17 GMT\0"
+ VALUE "ProductVersion", "6.2.4.0\0"
+ VALUE "ProductDate", "Fri, 30 May 2014 23:41:51 GMT\0"
END
END