GDBMIParser.st
changeset 89 ba62d486014f
parent 87 50e80d25ea6f
child 91 472a4841a8b6
--- a/GDBMIParser.st	Wed Sep 13 22:11:51 2017 +0100
+++ b/GDBMIParser.st	Tue Oct 03 21:15:12 2017 +0100
@@ -869,6 +869,16 @@
     "Created: / 18-06-2014 / 07:39:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
+parseValueAsListElementDescribedBy:descriptor
+    self peek isAlphaNumeric ifTrue:[ 
+        self parseVariable.
+        self expect: $=. 
+    ].
+    ^ descriptor parseUsingGDBMIParser:self
+
+    "Created: / 11-11-2017 / 12:19:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 parseValueAsListOf: class
     | description |
 
@@ -891,27 +901,52 @@
 !
 
 parseValueAsListOf:class describedBy:descriptor
-    | list |
+    ^ self parseValueAsListOf:class describedBy:descriptor allowOmmitedBrackets: false
+
+    "Created: / 18-06-2014 / 21:00:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 11-11-2017 / 12:14:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+parseValueAsListOf:class describedBy:descriptor allowOmmitedBrackets: allowOmmitedBrackets
+    | list bracketsOmmited |
+
+
 
-    self peek ~~ $[ ifTrue:[ ^ self parseValue ].
-    self next. "/ eat ${
-    self peek ~~ $] ifTrue:[
-        list := OrderedCollection new.
+    self peek == $[ ifTrue:[ 
+        self next. "/ eat $[
+        bracketsOmmited := false.
+    ] ifFalse:[
+        allowOmmitedBrackets ifFalse:[
+            ^ self parseValue 
+        ].
+        bracketsOmmited := true.
+    ].
+
+    list := OrderedCollection new.
+    bracketsOmmited ifTrue:[ 
         [ 
-            self peek isAlphaNumeric ifTrue:[ 
-                self parseVariable.
-                self expect: $=. 
+            list add: (self parseValueAsListElementDescribedBy: descriptor).  
+        ] doWhile:[  
+            (self peek == $,) ifTrue:[ self next ].
+            self peek == ${
+        ].    
+    ] ifFalse:[
+        self peek ~~ $] ifTrue:[ 
+            [ 
+                list add: (self parseValueAsListElementDescribedBy: descriptor).  
+            ] doWhile: [
+                (self peek == $,) ifTrue:[ self next. true ] ifFalse:[ false ]
             ].
-            list add: (descriptor parseUsingGDBMIParser:self)
-        ] doWhile: [ 
-            (self peek == $,) ifTrue:[ self next. true ] ifFalse:[ false ]
         ].
     ].
-    self expect: $].
-    ^ list
 
-    "Created: / 18-06-2014 / 21:00:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 17-09-2014 / 08:03:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    bracketsOmmited ifFalse:[
+        self expect: $]. "/ eats $]
+    ].
+    ^ list asNilIfEmpty.
+
+    "Created: / 11-11-2017 / 12:14:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 12-11-2017 / 17:22:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 parseValueAsString