Work in progress - object descriptors
authorJan Vrany <jan.vrany@fit.cvut.cz>
Wed, 18 Jun 2014 10:50:49 +0100
changeset 16 a5a8c0454395
parent 15 65d3b4bfe871
child 17 10d696c79188
Work in progress - object descriptors
GDBAddressPropertyDescriptor.st
GDBBooleanPropertyDescriptor.st
GDBCompoundPropertyDescriptor.st
GDBEnumPropertyDescriptor.st
GDBIntegerPropertyDescriptor.st
GDBListPropertyDescriptor.st
GDBObject.st
GDBObjectDescriptor.st
GDBObjectDescriptorError.st
GDBObjectPropertyDescriptor.st
GDBPrimitivePropertyDescriptor.st
GDBPropertyDescriptor.st
GDBStringPropertyDescriptor.st
Make.proto
Make.spec
abbrev.stc
bc.mak
jv_libgdbs.st
libInit.cc
libgdbs.rc
tests/GDBParserTests.st
tests/tests.rc
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/GDBAddressPropertyDescriptor.st	Wed Jun 18 10:50:49 2014 +0100
@@ -0,0 +1,9 @@
+"{ Package: 'jv:libgdbs' }"
+
+GDBPrimitivePropertyDescriptor subclass:#GDBAddressPropertyDescriptor
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'GDB-Core-Descriptors'
+!
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/GDBBooleanPropertyDescriptor.st	Wed Jun 18 10:50:49 2014 +0100
@@ -0,0 +1,17 @@
+"{ Package: 'jv:libgdbs' }"
+
+GDBPrimitivePropertyDescriptor subclass:#GDBBooleanPropertyDescriptor
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'GDB-Core-Descriptors'
+!
+
+!GDBBooleanPropertyDescriptor methodsFor:'parsing'!
+
+parseUsingParser:aGDBParser
+    ^ aGDBParser parseValueAsBoolean
+
+    "Created: / 18-06-2014 / 10:37:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/GDBCompoundPropertyDescriptor.st	Wed Jun 18 10:50:49 2014 +0100
@@ -0,0 +1,19 @@
+"{ Package: 'jv:libgdbs' }"
+
+GDBPropertyDescriptor subclass:#GDBCompoundPropertyDescriptor
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'GDB-Core-Descriptors'
+!
+
+!GDBCompoundPropertyDescriptor class methodsFor:'queries'!
+
+isAbstract
+    "Return if this class is an abstract class.
+     True is returned here for myself only; false for subclasses.
+     Abstract subclasses must redefine again."
+
+    ^ self == GDBCompoundPropertyDescriptor.
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/GDBEnumPropertyDescriptor.st	Wed Jun 18 10:50:49 2014 +0100
@@ -0,0 +1,9 @@
+"{ Package: 'jv:libgdbs' }"
+
+GDBPropertyDescriptor subclass:#GDBEnumPropertyDescriptor
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'GDB-Core-Descriptors'
+!
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/GDBIntegerPropertyDescriptor.st	Wed Jun 18 10:50:49 2014 +0100
@@ -0,0 +1,17 @@
+"{ Package: 'jv:libgdbs' }"
+
+GDBPrimitivePropertyDescriptor subclass:#GDBIntegerPropertyDescriptor
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'GDB-Core-Descriptors'
+!
+
+!GDBIntegerPropertyDescriptor methodsFor:'parsing'!
+
+parseUsingParser:aGDBParser
+    ^ aGDBParser parseValueAsBoolean
+
+    "Created: / 18-06-2014 / 10:37:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/GDBListPropertyDescriptor.st	Wed Jun 18 10:50:49 2014 +0100
@@ -0,0 +1,19 @@
+"{ Package: 'jv:libgdbs' }"
+
+GDBCompoundPropertyDescriptor subclass:#GDBListPropertyDescriptor
+	instanceVariableNames:'collectionKlass'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'GDB-Core-Descriptors'
+!
+
+!GDBListPropertyDescriptor methodsFor:'accessing'!
+
+collectionKlass
+    ^ collectionKlass
+!
+
+collectionKlass:something
+    collectionKlass := something.
+! !
+
--- a/GDBObject.st	Wed Jun 18 07:54:03 2014 +0100
+++ b/GDBObject.st	Wed Jun 18 10:50:49 2014 +0100
@@ -23,3 +23,17 @@
     "Created: / 31-05-2014 / 00:01:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
+!GDBObject methodsFor:'attributes access'!
+
+objectAttributes
+    ^ properties
+
+    "Created: / 18-06-2014 / 07:56:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+objectAttributes: aDictionary
+    properties := aDictionary
+
+    "Created: / 18-06-2014 / 07:57:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/GDBObjectDescriptor.st	Wed Jun 18 10:50:49 2014 +0100
@@ -0,0 +1,78 @@
+"{ Package: 'jv:libgdbs' }"
+
+Object subclass:#GDBObjectDescriptor
+	instanceVariableNames:'klass properties'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'GDB-Core-Descriptors'
+!
+
+!GDBObjectDescriptor class methodsFor:'instance creation'!
+
+forClass: aClass
+    ^ self basicNew initializeForClass: aClass
+
+    "Created: / 18-06-2014 / 09:01:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 18-06-2014 / 10:35:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+new
+    self shouldNotImplement.
+
+    "Modified: / 18-06-2014 / 09:41:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!GDBObjectDescriptor methodsFor:'defining'!
+
+define: name as: class
+    | descriptor |
+
+    descriptor := GDBPropertyDescriptor name: name class: class.
+    (properties includesKey: name) ifTrue:[ 
+        GDBObjectDescriptorError newException
+            parameter: descriptor;
+            messageText: ('Property %1 already defined' % name );
+            raiseRequest.
+    ].
+    properties at: name put: descriptor
+
+    "Created: / 17-06-2014 / 22:00:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 18-06-2014 / 10:33:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+define: name as: collectionClass of: elementClass
+    | descriptor |
+
+    descriptor := GDBListPropertyDescriptor name: name class: elementClass.
+    descriptor collectionKlass: collectionClass.
+    (properties includesKey: name) ifTrue:[ 
+        GDBObjectDescriptorError newException
+            parameter: descriptor;
+            messageText: ('Property %1 already defined' % name );
+            raiseRequest.
+    ].
+    properties at: name put: descriptor
+
+    "Created: / 18-06-2014 / 10:34:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!GDBObjectDescriptor methodsFor:'initialization'!
+
+initializeForClass: aClass
+    klass := aClass.
+    properties := Dictionary new.
+
+    "Created: / 18-06-2014 / 09:41:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!GDBObjectDescriptor methodsFor:'printing & storing'!
+
+printOn:aStream
+    "append a printed representation if the receiver to the argument, aStream"
+
+    aStream nextPutAll:'Descriptor for '.
+    klass printOn:aStream.
+
+    "Modified: / 18-06-2014 / 09:59:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/GDBObjectDescriptorError.st	Wed Jun 18 10:50:49 2014 +0100
@@ -0,0 +1,9 @@
+"{ Package: 'jv:libgdbs' }"
+
+Error subclass:#GDBObjectDescriptorError
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'GDB-Core-Descriptors'
+!
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/GDBObjectPropertyDescriptor.st	Wed Jun 18 10:50:49 2014 +0100
@@ -0,0 +1,17 @@
+"{ Package: 'jv:libgdbs' }"
+
+GDBCompoundPropertyDescriptor subclass:#GDBObjectPropertyDescriptor
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'GDB-Core-Descriptors'
+!
+
+!GDBObjectPropertyDescriptor methodsFor:'parsing'!
+
+parseUsingParser:aGDBParser
+    ^ aGDBParser parseValueAsInstanceOf: klass.
+
+    "Created: / 18-06-2014 / 10:40:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/GDBPrimitivePropertyDescriptor.st	Wed Jun 18 10:50:49 2014 +0100
@@ -0,0 +1,23 @@
+"{ Package: 'jv:libgdbs' }"
+
+GDBPropertyDescriptor subclass:#GDBPrimitivePropertyDescriptor
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'GDB-Core-Descriptors'
+!
+
+!GDBPrimitivePropertyDescriptor methodsFor:'parsing'!
+
+parseUsingParser:aGDBParser
+    | val |
+
+    val := aGDBParser parseValue.
+    val isString ifTrue:[ 
+        klass readFrom: val readStream onError: [ ^ val ].
+    ].
+    ^ val
+
+    "Created: / 18-06-2014 / 10:38:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/GDBPropertyDescriptor.st	Wed Jun 18 10:50:49 2014 +0100
@@ -0,0 +1,74 @@
+"{ Package: 'jv:libgdbs' }"
+
+Object subclass:#GDBPropertyDescriptor
+	instanceVariableNames:'name klass'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'GDB-Core-Descriptors'
+!
+
+!GDBPropertyDescriptor class methodsFor:'instance creation'!
+
+name: aString class: aClass
+
+    (aClass inheritsFrom: CharacterArray) ifTrue:[ 
+        ^ GDBStringPropertyDescriptor new initializeWithName: aString class: aClass.
+    ].
+    (aClass inheritsFrom: Integer) ifTrue:[ 
+        ^ GDBIntegerPropertyDescriptor new initializeWithName: aString class: aClass.
+    ].
+    (aClass inheritsFrom: Boolean) ifTrue:[ 
+        ^ GDBBooleanPropertyDescriptor new initializeWithName: aString class: aClass.
+    ].
+    (aClass inheritsFrom: GDBObject) ifTrue:[ 
+        ^ GDBObjectPropertyDescriptor new initializeWithName: aString class: aClass.
+    ].
+    (aClass inheritsFrom: GDBEvent) ifTrue:[ 
+        ^ GDBObjectPropertyDescriptor new initializeWithName: aString class: aClass.
+    ].
+    ^ GDBPrimitivePropertyDescriptor new initializeWithName: aString class: aClass.
+
+    "Created: / 18-06-2014 / 10:03:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!GDBPropertyDescriptor class methodsFor:'queries'!
+
+isAbstract
+    "Return if this class is an abstract class.
+     True is returned here for myself only; false for subclasses.
+     Abstract subclasses must redefine again."
+
+    ^ self == GDBPropertyDescriptor.
+! !
+
+!GDBPropertyDescriptor methodsFor:'accessing'!
+
+get: object
+    ^ object perform: name asSymbol
+
+    "Created: / 17-06-2014 / 22:02:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+set: object to: value
+    ^ object perform: (name asSymbol , ':') asSymbol with: value
+
+    "Created: / 17-06-2014 / 22:08:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!GDBPropertyDescriptor methodsFor:'initialization'!
+
+initializeWithName: aString class: aClass
+    name := aString.
+    klass := aClass.
+
+    "Created: / 18-06-2014 / 10:04:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!GDBPropertyDescriptor methodsFor:'parsing'!
+
+parseUsingParser: aGDBParser
+    self subclassResponsibility
+
+    "Created: / 18-06-2014 / 10:36:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/GDBStringPropertyDescriptor.st	Wed Jun 18 10:50:49 2014 +0100
@@ -0,0 +1,17 @@
+"{ Package: 'jv:libgdbs' }"
+
+GDBPrimitivePropertyDescriptor subclass:#GDBStringPropertyDescriptor
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'GDB-Core-Descriptors'
+!
+
+!GDBStringPropertyDescriptor methodsFor:'parsing'!
+
+parseUsingParser:aGDBParser
+    ^ aGDBParser parseCString
+
+    "Created: / 18-06-2014 / 10:37:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- a/Make.proto	Wed Jun 18 07:54:03 2014 +0100
+++ b/Make.proto	Wed Jun 18 10:50:49 2014 +0100
@@ -131,21 +131,31 @@
 $(OUTDIR)GDBInternalPipeStream.$(O) GDBInternalPipeStream.$(H): GDBInternalPipeStream.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/Stream.$(H) $(STCHDR)
 $(OUTDIR)GDBLauncher.$(O) GDBLauncher.$(H): GDBLauncher.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)GDBObject.$(O) GDBObject.$(H): GDBObject.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)GDBObjectDescriptor.$(O) GDBObjectDescriptor.$(H): GDBObjectDescriptor.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)GDBObjectDescriptorError.$(O) GDBObjectDescriptorError.$(H): GDBObjectDescriptorError.st $(INCLUDE_TOP)/stx/libbasic/Error.$(H) $(INCLUDE_TOP)/stx/libbasic/Exception.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)GDBPTY.$(O) GDBPTY.$(H): GDBPTY.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)GDBPropertyDescriptor.$(O) GDBPropertyDescriptor.$(H): GDBPropertyDescriptor.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)GDB.$(O) GDB.$(H): GDB.st $(INCLUDE_TOP)/jv/libgdbs/GDBCommandStatus.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)GDBAsyncEvent.$(O) GDBAsyncEvent.$(H): GDBAsyncEvent.st $(INCLUDE_TOP)/jv/libgdbs/GDBEvent.$(H) $(INCLUDE_TOP)/stx/goodies/announcements/Announcement.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)GDBCLICommand.$(O) GDBCLICommand.$(H): GDBCLICommand.st $(INCLUDE_TOP)/jv/libgdbs/GDBCommand.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)GDBCommandEvent.$(O) GDBCommandEvent.$(H): GDBCommandEvent.st $(INCLUDE_TOP)/jv/libgdbs/GDBEvent.$(H) $(INCLUDE_TOP)/stx/goodies/announcements/Announcement.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)GDBCommandResultEvent.$(O) GDBCommandResultEvent.$(H): GDBCommandResultEvent.st $(INCLUDE_TOP)/jv/libgdbs/GDBEvent.$(H) $(INCLUDE_TOP)/stx/goodies/announcements/Announcement.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)GDBCompoundPropertyDescriptor.$(O) GDBCompoundPropertyDescriptor.$(H): GDBCompoundPropertyDescriptor.st $(INCLUDE_TOP)/jv/libgdbs/GDBPropertyDescriptor.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)GDBDriver.$(O) GDBDriver.$(H): GDBDriver.st $(INCLUDE_TOP)/jv/libgdbs/GDBDebugFlags.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)GDBEnumPropertyDescriptor.$(O) GDBEnumPropertyDescriptor.$(H): GDBEnumPropertyDescriptor.st $(INCLUDE_TOP)/jv/libgdbs/GDBPropertyDescriptor.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)GDBInternalEvent.$(O) GDBInternalEvent.$(H): GDBInternalEvent.st $(INCLUDE_TOP)/jv/libgdbs/GDBEvent.$(H) $(INCLUDE_TOP)/stx/goodies/announcements/Announcement.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)GDBMICommand.$(O) GDBMICommand.$(H): GDBMICommand.st $(INCLUDE_TOP)/jv/libgdbs/GDBCommand.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)GDBParser.$(O) GDBParser.$(H): GDBParser.st $(INCLUDE_TOP)/jv/libgdbs/GDBCommandStatus.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)GDBPrimitivePropertyDescriptor.$(O) GDBPrimitivePropertyDescriptor.$(H): GDBPrimitivePropertyDescriptor.st $(INCLUDE_TOP)/jv/libgdbs/GDBPropertyDescriptor.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)GDBStreamOutputEvent.$(O) GDBStreamOutputEvent.$(H): GDBStreamOutputEvent.st $(INCLUDE_TOP)/jv/libgdbs/GDBEvent.$(H) $(INCLUDE_TOP)/stx/goodies/announcements/Announcement.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)GDBAddressPropertyDescriptor.$(O) GDBAddressPropertyDescriptor.$(H): GDBAddressPropertyDescriptor.st $(INCLUDE_TOP)/jv/libgdbs/GDBPrimitivePropertyDescriptor.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBPropertyDescriptor.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)GDBBooleanPropertyDescriptor.$(O) GDBBooleanPropertyDescriptor.$(H): GDBBooleanPropertyDescriptor.st $(INCLUDE_TOP)/jv/libgdbs/GDBPrimitivePropertyDescriptor.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBPropertyDescriptor.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)GDBConsoleOutputEvent.$(O) GDBConsoleOutputEvent.$(H): GDBConsoleOutputEvent.st $(INCLUDE_TOP)/jv/libgdbs/GDBEvent.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBStreamOutputEvent.$(H) $(INCLUDE_TOP)/stx/goodies/announcements/Announcement.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)GDBExecutionEvent.$(O) GDBExecutionEvent.$(H): GDBExecutionEvent.st $(INCLUDE_TOP)/jv/libgdbs/GDBAsyncEvent.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBEvent.$(H) $(INCLUDE_TOP)/stx/goodies/announcements/Announcement.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)GDBExitEvent.$(O) GDBExitEvent.$(H): GDBExitEvent.st $(INCLUDE_TOP)/jv/libgdbs/GDBEvent.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBInternalEvent.$(H) $(INCLUDE_TOP)/stx/goodies/announcements/Announcement.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)GDBIntegerPropertyDescriptor.$(O) GDBIntegerPropertyDescriptor.$(H): GDBIntegerPropertyDescriptor.st $(INCLUDE_TOP)/jv/libgdbs/GDBPrimitivePropertyDescriptor.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBPropertyDescriptor.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)GDBListPropertyDescriptor.$(O) GDBListPropertyDescriptor.$(H): GDBListPropertyDescriptor.st $(INCLUDE_TOP)/jv/libgdbs/GDBCompoundPropertyDescriptor.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBPropertyDescriptor.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)GDBLogOutputEvent.$(O) GDBLogOutputEvent.$(H): GDBLogOutputEvent.st $(INCLUDE_TOP)/jv/libgdbs/GDBEvent.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBStreamOutputEvent.$(H) $(INCLUDE_TOP)/stx/goodies/announcements/Announcement.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)GDBMI_ada_task_info.$(O) GDBMI_ada_task_info.$(H): GDBMI_ada_task_info.st $(INCLUDE_TOP)/jv/libgdbs/GDBCommand.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBMICommand.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)GDBMI_add_inferior.$(O) GDBMI_add_inferior.$(H): GDBMI_add_inferior.st $(INCLUDE_TOP)/jv/libgdbs/GDBCommand.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBMICommand.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
@@ -257,7 +267,9 @@
 $(OUTDIR)GDBMI_var_show_format.$(O) GDBMI_var_show_format.$(H): GDBMI_var_show_format.st $(INCLUDE_TOP)/jv/libgdbs/GDBCommand.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBMICommand.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)GDBMI_var_update.$(O) GDBMI_var_update.$(H): GDBMI_var_update.st $(INCLUDE_TOP)/jv/libgdbs/GDBCommand.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBMICommand.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)GDBNotificationEvent.$(O) GDBNotificationEvent.$(H): GDBNotificationEvent.st $(INCLUDE_TOP)/jv/libgdbs/GDBAsyncEvent.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBEvent.$(H) $(INCLUDE_TOP)/stx/goodies/announcements/Announcement.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)GDBObjectPropertyDescriptor.$(O) GDBObjectPropertyDescriptor.$(H): GDBObjectPropertyDescriptor.st $(INCLUDE_TOP)/jv/libgdbs/GDBCompoundPropertyDescriptor.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBPropertyDescriptor.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)GDBStatusEvent.$(O) GDBStatusEvent.$(H): GDBStatusEvent.st $(INCLUDE_TOP)/jv/libgdbs/GDBAsyncEvent.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBEvent.$(H) $(INCLUDE_TOP)/stx/goodies/announcements/Announcement.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)GDBStringPropertyDescriptor.$(O) GDBStringPropertyDescriptor.$(H): GDBStringPropertyDescriptor.st $(INCLUDE_TOP)/jv/libgdbs/GDBPrimitivePropertyDescriptor.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBPropertyDescriptor.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)GDBTargetOutputEvent.$(O) GDBTargetOutputEvent.$(H): GDBTargetOutputEvent.st $(INCLUDE_TOP)/jv/libgdbs/GDBEvent.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBStreamOutputEvent.$(H) $(INCLUDE_TOP)/stx/goodies/announcements/Announcement.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)GDBBreakpointCreatedEvent.$(O) GDBBreakpointCreatedEvent.$(H): GDBBreakpointCreatedEvent.st $(INCLUDE_TOP)/jv/libgdbs/GDBAsyncEvent.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBEvent.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBNotificationEvent.$(H) $(INCLUDE_TOP)/stx/goodies/announcements/Announcement.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)GDBBreakpointDeletedEvent.$(O) GDBBreakpointDeletedEvent.$(H): GDBBreakpointDeletedEvent.st $(INCLUDE_TOP)/jv/libgdbs/GDBAsyncEvent.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBEvent.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBNotificationEvent.$(H) $(INCLUDE_TOP)/stx/goodies/announcements/Announcement.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
--- a/Make.spec	Wed Jun 18 07:54:03 2014 +0100
+++ b/Make.spec	Wed Jun 18 10:50:49 2014 +0100
@@ -59,21 +59,31 @@
 	GDBInternalPipeStream \
 	GDBLauncher \
 	GDBObject \
+	GDBObjectDescriptor \
+	GDBObjectDescriptorError \
 	GDBPTY \
+	GDBPropertyDescriptor \
 	jv_libgdbs \
 	GDB \
 	GDBAsyncEvent \
 	GDBCLICommand \
 	GDBCommandEvent \
 	GDBCommandResultEvent \
+	GDBCompoundPropertyDescriptor \
 	GDBDriver \
+	GDBEnumPropertyDescriptor \
 	GDBInternalEvent \
 	GDBMICommand \
 	GDBParser \
+	GDBPrimitivePropertyDescriptor \
 	GDBStreamOutputEvent \
+	GDBAddressPropertyDescriptor \
+	GDBBooleanPropertyDescriptor \
 	GDBConsoleOutputEvent \
 	GDBExecutionEvent \
 	GDBExitEvent \
+	GDBIntegerPropertyDescriptor \
+	GDBListPropertyDescriptor \
 	GDBLogOutputEvent \
 	GDBMI_ada_task_info \
 	GDBMI_add_inferior \
@@ -185,7 +195,9 @@
 	GDBMI_var_show_format \
 	GDBMI_var_update \
 	GDBNotificationEvent \
+	GDBObjectPropertyDescriptor \
 	GDBStatusEvent \
+	GDBStringPropertyDescriptor \
 	GDBTargetOutputEvent \
 	GDBBreakpointCreatedEvent \
 	GDBBreakpointDeletedEvent \
@@ -213,21 +225,31 @@
     $(OUTDIR_SLASH)GDBInternalPipeStream.$(O) \
     $(OUTDIR_SLASH)GDBLauncher.$(O) \
     $(OUTDIR_SLASH)GDBObject.$(O) \
+    $(OUTDIR_SLASH)GDBObjectDescriptor.$(O) \
+    $(OUTDIR_SLASH)GDBObjectDescriptorError.$(O) \
     $(OUTDIR_SLASH)GDBPTY.$(O) \
+    $(OUTDIR_SLASH)GDBPropertyDescriptor.$(O) \
     $(OUTDIR_SLASH)jv_libgdbs.$(O) \
     $(OUTDIR_SLASH)GDB.$(O) \
     $(OUTDIR_SLASH)GDBAsyncEvent.$(O) \
     $(OUTDIR_SLASH)GDBCLICommand.$(O) \
     $(OUTDIR_SLASH)GDBCommandEvent.$(O) \
     $(OUTDIR_SLASH)GDBCommandResultEvent.$(O) \
+    $(OUTDIR_SLASH)GDBCompoundPropertyDescriptor.$(O) \
     $(OUTDIR_SLASH)GDBDriver.$(O) \
+    $(OUTDIR_SLASH)GDBEnumPropertyDescriptor.$(O) \
     $(OUTDIR_SLASH)GDBInternalEvent.$(O) \
     $(OUTDIR_SLASH)GDBMICommand.$(O) \
     $(OUTDIR_SLASH)GDBParser.$(O) \
+    $(OUTDIR_SLASH)GDBPrimitivePropertyDescriptor.$(O) \
     $(OUTDIR_SLASH)GDBStreamOutputEvent.$(O) \
+    $(OUTDIR_SLASH)GDBAddressPropertyDescriptor.$(O) \
+    $(OUTDIR_SLASH)GDBBooleanPropertyDescriptor.$(O) \
     $(OUTDIR_SLASH)GDBConsoleOutputEvent.$(O) \
     $(OUTDIR_SLASH)GDBExecutionEvent.$(O) \
     $(OUTDIR_SLASH)GDBExitEvent.$(O) \
+    $(OUTDIR_SLASH)GDBIntegerPropertyDescriptor.$(O) \
+    $(OUTDIR_SLASH)GDBListPropertyDescriptor.$(O) \
     $(OUTDIR_SLASH)GDBLogOutputEvent.$(O) \
     $(OUTDIR_SLASH)GDBMI_ada_task_info.$(O) \
     $(OUTDIR_SLASH)GDBMI_add_inferior.$(O) \
@@ -339,7 +361,9 @@
     $(OUTDIR_SLASH)GDBMI_var_show_format.$(O) \
     $(OUTDIR_SLASH)GDBMI_var_update.$(O) \
     $(OUTDIR_SLASH)GDBNotificationEvent.$(O) \
+    $(OUTDIR_SLASH)GDBObjectPropertyDescriptor.$(O) \
     $(OUTDIR_SLASH)GDBStatusEvent.$(O) \
+    $(OUTDIR_SLASH)GDBStringPropertyDescriptor.$(O) \
     $(OUTDIR_SLASH)GDBTargetOutputEvent.$(O) \
     $(OUTDIR_SLASH)GDBBreakpointCreatedEvent.$(O) \
     $(OUTDIR_SLASH)GDBBreakpointDeletedEvent.$(O) \
--- a/abbrev.stc	Wed Jun 18 07:54:03 2014 +0100
+++ b/abbrev.stc	Wed Jun 18 10:50:49 2014 +0100
@@ -10,21 +10,31 @@
 GDBInternalPipeStream GDBInternalPipeStream jv:libgdbs 'GDB-Support' 0
 GDBLauncher GDBLauncher jv:libgdbs 'GDB-Private' 0
 GDBObject GDBObject jv:libgdbs 'GDB-Core' 0
+GDBObjectDescriptor GDBObjectDescriptor jv:libgdbs 'GDB-Core-Descriptors' 0
+GDBObjectDescriptorError GDBObjectDescriptorError jv:libgdbs 'GDB-Core-Descriptors' 1
 GDBPTY GDBPTY jv:libgdbs 'GDB-Private' 0
+GDBPropertyDescriptor GDBPropertyDescriptor jv:libgdbs 'GDB-Core-Descriptors' 0
 jv_libgdbs jv_libgdbs jv:libgdbs '* Projects & Packages *' 3
 GDB GDB jv:libgdbs 'GDB-Core' 0
 GDBAsyncEvent GDBAsyncEvent jv:libgdbs 'GDB-Core-Events' 0
 GDBCLICommand GDBCLICommand jv:libgdbs 'GDB-Core-Commands' 0
 GDBCommandEvent GDBCommandEvent jv:libgdbs 'GDB-Core-Events' 0
 GDBCommandResultEvent GDBCommandResultEvent jv:libgdbs 'GDB-Core-Events' 0
+GDBCompoundPropertyDescriptor GDBCompoundPropertyDescriptor jv:libgdbs 'GDB-Core-Descriptors' 0
 GDBDriver GDBDriver jv:libgdbs 'GDB-Private' 0
+GDBEnumPropertyDescriptor GDBEnumPropertyDescriptor jv:libgdbs 'GDB-Core-Descriptors' 0
 GDBInternalEvent GDBInternalEvent jv:libgdbs 'GDB-Core-Events' 0
 GDBMICommand GDBMICommand jv:libgdbs 'GDB-Core-Commands' 0
 GDBParser GDBParser jv:libgdbs 'GDB-Private' 0
+GDBPrimitivePropertyDescriptor GDBPrimitivePropertyDescriptor jv:libgdbs 'GDB-Core-Descriptors' 0
 GDBStreamOutputEvent GDBStreamOutputEvent jv:libgdbs 'GDB-Core-Events' 0
+GDBAddressPropertyDescriptor GDBAddressPropertyDescriptor jv:libgdbs 'GDB-Core-Descriptors' 0
+GDBBooleanPropertyDescriptor GDBBooleanPropertyDescriptor jv:libgdbs 'GDB-Core-Descriptors' 0
 GDBConsoleOutputEvent GDBConsoleOutputEvent jv:libgdbs 'GDB-Core-Events' 0
 GDBExecutionEvent GDBExecutionEvent jv:libgdbs 'GDB-Core-Events' 0
 GDBExitEvent GDBExitEvent jv:libgdbs 'GDB-Core-Events' 0
+GDBIntegerPropertyDescriptor GDBIntegerPropertyDescriptor jv:libgdbs 'GDB-Core-Descriptors' 0
+GDBListPropertyDescriptor GDBListPropertyDescriptor jv:libgdbs 'GDB-Core-Descriptors' 0
 GDBLogOutputEvent GDBLogOutputEvent jv:libgdbs 'GDB-Core-Events' 0
 GDBMI_ada_task_info GDBMI_ada_task_info jv:libgdbs 'GDB-Core-Commands-MI' 0
 GDBMI_add_inferior GDBMI_add_inferior jv:libgdbs 'GDB-Core-Commands-MI' 0
@@ -136,7 +146,9 @@
 GDBMI_var_show_format GDBMI_var_show_format jv:libgdbs 'GDB-Core-Commands-MI' 0
 GDBMI_var_update GDBMI_var_update jv:libgdbs 'GDB-Core-Commands-MI' 0
 GDBNotificationEvent GDBNotificationEvent jv:libgdbs 'GDB-Core-Events' 0
+GDBObjectPropertyDescriptor GDBObjectPropertyDescriptor jv:libgdbs 'GDB-Core-Descriptors' 0
 GDBStatusEvent GDBStatusEvent jv:libgdbs 'GDB-Core-Events' 0
+GDBStringPropertyDescriptor GDBStringPropertyDescriptor jv:libgdbs 'GDB-Core-Descriptors' 0
 GDBTargetOutputEvent GDBTargetOutputEvent jv:libgdbs 'GDB-Core-Events' 0
 GDBBreakpointCreatedEvent GDBBreakpointCreatedEvent jv:libgdbs 'GDB-Core-Events' 0
 GDBBreakpointDeletedEvent GDBBreakpointDeletedEvent jv:libgdbs 'GDB-Core-Events' 0
--- a/bc.mak	Wed Jun 18 07:54:03 2014 +0100
+++ b/bc.mak	Wed Jun 18 10:50:49 2014 +0100
@@ -77,21 +77,31 @@
 $(OUTDIR)GDBInternalPipeStream.$(O) GDBInternalPipeStream.$(H): GDBInternalPipeStream.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\Stream.$(H) $(STCHDR)
 $(OUTDIR)GDBLauncher.$(O) GDBLauncher.$(H): GDBLauncher.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)GDBObject.$(O) GDBObject.$(H): GDBObject.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)GDBObjectDescriptor.$(O) GDBObjectDescriptor.$(H): GDBObjectDescriptor.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)GDBObjectDescriptorError.$(O) GDBObjectDescriptorError.$(H): GDBObjectDescriptorError.st $(INCLUDE_TOP)\stx\libbasic\Error.$(H) $(INCLUDE_TOP)\stx\libbasic\Exception.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)GDBPTY.$(O) GDBPTY.$(H): GDBPTY.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)GDBPropertyDescriptor.$(O) GDBPropertyDescriptor.$(H): GDBPropertyDescriptor.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)GDB.$(O) GDB.$(H): GDB.st $(INCLUDE_TOP)\jv\libgdbs\GDBCommandStatus.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)GDBAsyncEvent.$(O) GDBAsyncEvent.$(H): GDBAsyncEvent.st $(INCLUDE_TOP)\jv\libgdbs\GDBEvent.$(H) $(INCLUDE_TOP)\stx\goodies\announcements\Announcement.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)GDBCLICommand.$(O) GDBCLICommand.$(H): GDBCLICommand.st $(INCLUDE_TOP)\jv\libgdbs\GDBCommand.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)GDBCommandEvent.$(O) GDBCommandEvent.$(H): GDBCommandEvent.st $(INCLUDE_TOP)\jv\libgdbs\GDBEvent.$(H) $(INCLUDE_TOP)\stx\goodies\announcements\Announcement.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)GDBCommandResultEvent.$(O) GDBCommandResultEvent.$(H): GDBCommandResultEvent.st $(INCLUDE_TOP)\jv\libgdbs\GDBEvent.$(H) $(INCLUDE_TOP)\stx\goodies\announcements\Announcement.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)GDBCompoundPropertyDescriptor.$(O) GDBCompoundPropertyDescriptor.$(H): GDBCompoundPropertyDescriptor.st $(INCLUDE_TOP)\jv\libgdbs\GDBPropertyDescriptor.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)GDBDriver.$(O) GDBDriver.$(H): GDBDriver.st $(INCLUDE_TOP)\jv\libgdbs\GDBDebugFlags.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)GDBEnumPropertyDescriptor.$(O) GDBEnumPropertyDescriptor.$(H): GDBEnumPropertyDescriptor.st $(INCLUDE_TOP)\jv\libgdbs\GDBPropertyDescriptor.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)GDBInternalEvent.$(O) GDBInternalEvent.$(H): GDBInternalEvent.st $(INCLUDE_TOP)\jv\libgdbs\GDBEvent.$(H) $(INCLUDE_TOP)\stx\goodies\announcements\Announcement.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)GDBMICommand.$(O) GDBMICommand.$(H): GDBMICommand.st $(INCLUDE_TOP)\jv\libgdbs\GDBCommand.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)GDBParser.$(O) GDBParser.$(H): GDBParser.st $(INCLUDE_TOP)\jv\libgdbs\GDBCommandStatus.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)GDBPrimitivePropertyDescriptor.$(O) GDBPrimitivePropertyDescriptor.$(H): GDBPrimitivePropertyDescriptor.st $(INCLUDE_TOP)\jv\libgdbs\GDBPropertyDescriptor.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)GDBStreamOutputEvent.$(O) GDBStreamOutputEvent.$(H): GDBStreamOutputEvent.st $(INCLUDE_TOP)\jv\libgdbs\GDBEvent.$(H) $(INCLUDE_TOP)\stx\goodies\announcements\Announcement.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)GDBAddressPropertyDescriptor.$(O) GDBAddressPropertyDescriptor.$(H): GDBAddressPropertyDescriptor.st $(INCLUDE_TOP)\jv\libgdbs\GDBPrimitivePropertyDescriptor.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBPropertyDescriptor.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)GDBBooleanPropertyDescriptor.$(O) GDBBooleanPropertyDescriptor.$(H): GDBBooleanPropertyDescriptor.st $(INCLUDE_TOP)\jv\libgdbs\GDBPrimitivePropertyDescriptor.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBPropertyDescriptor.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)GDBConsoleOutputEvent.$(O) GDBConsoleOutputEvent.$(H): GDBConsoleOutputEvent.st $(INCLUDE_TOP)\jv\libgdbs\GDBEvent.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBStreamOutputEvent.$(H) $(INCLUDE_TOP)\stx\goodies\announcements\Announcement.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)GDBExecutionEvent.$(O) GDBExecutionEvent.$(H): GDBExecutionEvent.st $(INCLUDE_TOP)\jv\libgdbs\GDBAsyncEvent.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBEvent.$(H) $(INCLUDE_TOP)\stx\goodies\announcements\Announcement.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)GDBExitEvent.$(O) GDBExitEvent.$(H): GDBExitEvent.st $(INCLUDE_TOP)\jv\libgdbs\GDBEvent.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBInternalEvent.$(H) $(INCLUDE_TOP)\stx\goodies\announcements\Announcement.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)GDBIntegerPropertyDescriptor.$(O) GDBIntegerPropertyDescriptor.$(H): GDBIntegerPropertyDescriptor.st $(INCLUDE_TOP)\jv\libgdbs\GDBPrimitivePropertyDescriptor.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBPropertyDescriptor.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)GDBListPropertyDescriptor.$(O) GDBListPropertyDescriptor.$(H): GDBListPropertyDescriptor.st $(INCLUDE_TOP)\jv\libgdbs\GDBCompoundPropertyDescriptor.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBPropertyDescriptor.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)GDBLogOutputEvent.$(O) GDBLogOutputEvent.$(H): GDBLogOutputEvent.st $(INCLUDE_TOP)\jv\libgdbs\GDBEvent.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBStreamOutputEvent.$(H) $(INCLUDE_TOP)\stx\goodies\announcements\Announcement.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)GDBMI_ada_task_info.$(O) GDBMI_ada_task_info.$(H): GDBMI_ada_task_info.st $(INCLUDE_TOP)\jv\libgdbs\GDBCommand.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBMICommand.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)GDBMI_add_inferior.$(O) GDBMI_add_inferior.$(H): GDBMI_add_inferior.st $(INCLUDE_TOP)\jv\libgdbs\GDBCommand.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBMICommand.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
@@ -203,7 +213,9 @@
 $(OUTDIR)GDBMI_var_show_format.$(O) GDBMI_var_show_format.$(H): GDBMI_var_show_format.st $(INCLUDE_TOP)\jv\libgdbs\GDBCommand.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBMICommand.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)GDBMI_var_update.$(O) GDBMI_var_update.$(H): GDBMI_var_update.st $(INCLUDE_TOP)\jv\libgdbs\GDBCommand.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBMICommand.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)GDBNotificationEvent.$(O) GDBNotificationEvent.$(H): GDBNotificationEvent.st $(INCLUDE_TOP)\jv\libgdbs\GDBAsyncEvent.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBEvent.$(H) $(INCLUDE_TOP)\stx\goodies\announcements\Announcement.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)GDBObjectPropertyDescriptor.$(O) GDBObjectPropertyDescriptor.$(H): GDBObjectPropertyDescriptor.st $(INCLUDE_TOP)\jv\libgdbs\GDBCompoundPropertyDescriptor.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBPropertyDescriptor.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)GDBStatusEvent.$(O) GDBStatusEvent.$(H): GDBStatusEvent.st $(INCLUDE_TOP)\jv\libgdbs\GDBAsyncEvent.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBEvent.$(H) $(INCLUDE_TOP)\stx\goodies\announcements\Announcement.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)GDBStringPropertyDescriptor.$(O) GDBStringPropertyDescriptor.$(H): GDBStringPropertyDescriptor.st $(INCLUDE_TOP)\jv\libgdbs\GDBPrimitivePropertyDescriptor.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBPropertyDescriptor.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)GDBTargetOutputEvent.$(O) GDBTargetOutputEvent.$(H): GDBTargetOutputEvent.st $(INCLUDE_TOP)\jv\libgdbs\GDBEvent.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBStreamOutputEvent.$(H) $(INCLUDE_TOP)\stx\goodies\announcements\Announcement.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)GDBBreakpointCreatedEvent.$(O) GDBBreakpointCreatedEvent.$(H): GDBBreakpointCreatedEvent.st $(INCLUDE_TOP)\jv\libgdbs\GDBAsyncEvent.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBEvent.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBNotificationEvent.$(H) $(INCLUDE_TOP)\stx\goodies\announcements\Announcement.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)GDBBreakpointDeletedEvent.$(O) GDBBreakpointDeletedEvent.$(H): GDBBreakpointDeletedEvent.st $(INCLUDE_TOP)\jv\libgdbs\GDBAsyncEvent.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBEvent.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBNotificationEvent.$(H) $(INCLUDE_TOP)\stx\goodies\announcements\Announcement.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
--- a/jv_libgdbs.st	Wed Jun 18 07:54:03 2014 +0100
+++ b/jv_libgdbs.st	Wed Jun 18 10:50:49 2014 +0100
@@ -73,21 +73,31 @@
         GDBInternalPipeStream
         GDBLauncher
         GDBObject
+        GDBObjectDescriptor
+        GDBObjectDescriptorError
         GDBPTY
+        GDBPropertyDescriptor
         #'jv_libgdbs'
         GDB
         GDBAsyncEvent
         GDBCLICommand
         GDBCommandEvent
         GDBCommandResultEvent
+        GDBCompoundPropertyDescriptor
         GDBDriver
+        GDBEnumPropertyDescriptor
         GDBInternalEvent
         GDBMICommand
         GDBParser
+        GDBPrimitivePropertyDescriptor
         GDBStreamOutputEvent
+        GDBAddressPropertyDescriptor
+        GDBBooleanPropertyDescriptor
         GDBConsoleOutputEvent
         GDBExecutionEvent
         GDBExitEvent
+        GDBIntegerPropertyDescriptor
+        GDBListPropertyDescriptor
         GDBLogOutputEvent
         #'GDBMI_ada_task_info'
         #'GDBMI_add_inferior'
@@ -199,7 +209,9 @@
         #'GDBMI_var_show_format'
         #'GDBMI_var_update'
         GDBNotificationEvent
+        GDBObjectPropertyDescriptor
         GDBStatusEvent
+        GDBStringPropertyDescriptor
         GDBTargetOutputEvent
         GDBBreakpointCreatedEvent
         GDBBreakpointDeletedEvent
--- a/libInit.cc	Wed Jun 18 07:54:03 2014 +0100
+++ b/libInit.cc	Wed Jun 18 10:50:49 2014 +0100
@@ -36,21 +36,31 @@
 _GDBInternalPipeStream_Init(pass,__pRT__,snd);
 _GDBLauncher_Init(pass,__pRT__,snd);
 _GDBObject_Init(pass,__pRT__,snd);
+_GDBObjectDescriptor_Init(pass,__pRT__,snd);
+_GDBObjectDescriptorError_Init(pass,__pRT__,snd);
 _GDBPTY_Init(pass,__pRT__,snd);
+_GDBPropertyDescriptor_Init(pass,__pRT__,snd);
 _jv_137libgdbs_Init(pass,__pRT__,snd);
 _GDB_Init(pass,__pRT__,snd);
 _GDBAsyncEvent_Init(pass,__pRT__,snd);
 _GDBCLICommand_Init(pass,__pRT__,snd);
 _GDBCommandEvent_Init(pass,__pRT__,snd);
 _GDBCommandResultEvent_Init(pass,__pRT__,snd);
+_GDBCompoundPropertyDescriptor_Init(pass,__pRT__,snd);
 _GDBDriver_Init(pass,__pRT__,snd);
+_GDBEnumPropertyDescriptor_Init(pass,__pRT__,snd);
 _GDBInternalEvent_Init(pass,__pRT__,snd);
 _GDBMICommand_Init(pass,__pRT__,snd);
 _GDBParser_Init(pass,__pRT__,snd);
+_GDBPrimitivePropertyDescriptor_Init(pass,__pRT__,snd);
 _GDBStreamOutputEvent_Init(pass,__pRT__,snd);
+_GDBAddressPropertyDescriptor_Init(pass,__pRT__,snd);
+_GDBBooleanPropertyDescriptor_Init(pass,__pRT__,snd);
 _GDBConsoleOutputEvent_Init(pass,__pRT__,snd);
 _GDBExecutionEvent_Init(pass,__pRT__,snd);
 _GDBExitEvent_Init(pass,__pRT__,snd);
+_GDBIntegerPropertyDescriptor_Init(pass,__pRT__,snd);
+_GDBListPropertyDescriptor_Init(pass,__pRT__,snd);
 _GDBLogOutputEvent_Init(pass,__pRT__,snd);
 _GDBMI_137ada_137task_137info_Init(pass,__pRT__,snd);
 _GDBMI_137add_137inferior_Init(pass,__pRT__,snd);
@@ -162,7 +172,9 @@
 _GDBMI_137var_137show_137format_Init(pass,__pRT__,snd);
 _GDBMI_137var_137update_Init(pass,__pRT__,snd);
 _GDBNotificationEvent_Init(pass,__pRT__,snd);
+_GDBObjectPropertyDescriptor_Init(pass,__pRT__,snd);
 _GDBStatusEvent_Init(pass,__pRT__,snd);
+_GDBStringPropertyDescriptor_Init(pass,__pRT__,snd);
 _GDBTargetOutputEvent_Init(pass,__pRT__,snd);
 _GDBBreakpointCreatedEvent_Init(pass,__pRT__,snd);
 _GDBBreakpointDeletedEvent_Init(pass,__pRT__,snd);
--- a/libgdbs.rc	Wed Jun 18 07:54:03 2014 +0100
+++ b/libgdbs.rc	Wed Jun 18 10:50:49 2014 +0100
@@ -25,7 +25,7 @@
       VALUE "LegalCopyright", "My CopyRight or CopyLeft\0"
       VALUE "ProductName", "LibraryName\0"
       VALUE "ProductVersion", "6.2.4.0\0"
-      VALUE "ProductDate", "Wed, 18 Jun 2014 06:52:43 GMT\0"
+      VALUE "ProductDate", "Wed, 18 Jun 2014 09:50:09 GMT\0"
     END
 
   END
--- a/tests/GDBParserTests.st	Wed Jun 18 07:54:03 2014 +0100
+++ b/tests/GDBParserTests.st	Wed Jun 18 10:50:49 2014 +0100
@@ -1,13 +1,67 @@
 "{ Package: 'jv:libgdbs/tests' }"
 
 TestCase subclass:#GDBParserTests
-	instanceVariableNames:''
+	instanceVariableNames:'properties prop1 prop2 prop3'
 	classVariableNames:''
 	poolDictionaries:'GDBCommandStatus'
 	category:'GDB-Private-Tests'
 !
 
 
+!GDBParserTests methodsFor:'accessing'!
+
+prop1
+    ^ prop1
+!
+
+prop1:something
+    prop1 := something.
+!
+
+prop2
+    ^ prop2
+!
+
+prop2:something
+    prop2 := something.
+!
+
+prop3
+    ^ prop3
+!
+
+prop3:something
+    prop3 := something.
+!
+
+properties
+    ^ properties
+! !
+
+!GDBParserTests 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>"
+! !
+
+!GDBParserTests methodsFor:'running'!
+
+tearDown
+    properties := nil.
+
+    "Created: / 18-06-2014 / 07:59:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
 !GDBParserTests methodsFor:'tests - C strings'!
 
 test_c_string_01
@@ -257,6 +311,22 @@
     self assert: (GDBParser on: '"12xyz"') parseValueAsInteger = '12xyz'.
 
     "Created: / 18-06-2014 / 07:38:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+test_object_01a
+    | descriptor object |
+
+    descriptor := GDBObjectDescriptor forClass: self class.
+    descriptor define: #prop1 as: Integer.
+
+    object := descriptor parseUsingParser: (GDBParser on: '{prop1="123"}').
+
+    self assert: object class == self class.
+    self assert: object prop1 == 123.
+    self assert: object properties isEmptyOrNil
+
+    "Created: / 18-06-2014 / 09:01:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 18-06-2014 / 10:35:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !GDBParserTests class methodsFor:'documentation'!
--- a/tests/tests.rc	Wed Jun 18 07:54:03 2014 +0100
+++ b/tests/tests.rc	Wed Jun 18 10:50:49 2014 +0100
@@ -25,7 +25,7 @@
       VALUE "LegalCopyright", "My CopyRight or CopyLeft\0"
       VALUE "ProductName", "LibraryName\0"
       VALUE "ProductVersion", "6.2.4.0\0"
-      VALUE "ProductDate", "Wed, 18 Jun 2014 06:52:46 GMT\0"
+      VALUE "ProductDate", "Wed, 18 Jun 2014 09:50:11 GMT\0"
     END
 
   END