allow multiple resource definitions
authorClaus Gittinger <cg@exept.de>
Wed, 29 May 1996 17:41:46 +0200
changeset 285 19e8d6d22278
parent 284 43bedc665d71
child 286 2413836651f8
allow multiple resource definitions
Parser.st
--- a/Parser.st	Tue May 28 20:20:22 1996 +0200
+++ b/Parser.st	Wed May 29 17:41:46 1996 +0200
@@ -1195,6 +1195,14 @@
     ^ primitiveResource
 !
 
+primitiveResources
+    "return the ST-80 style resource info or nil (valid after parsing)."
+
+    ^ primitiveResource
+
+    "Created: 29.5.1996 / 17:28:00 / cg"
+!
+
 release
     methodArgs := methodVars := tree := selfNode := superNode := nil.
     super release.
@@ -2591,26 +2599,31 @@
 parsePrimitiveOrResourceSpecOrEmpty
     "parse a methods primitive or resource spec"
 
-    |pos wmsg|
-
-    ((tokenType == #BinaryOperator) and:[tokenName = '<']) ifTrue:[
-        "an ST-80 primitive - parsed but ignored"
+    |pos wmsg primNr|
+
+    [(tokenType == #BinaryOperator) and:[tokenName = '<']] whileTrue:[
+        "/ an ST-80 primitive or resourceSpec - parsed but ignored
+
         pos := tokenPosition.
         self nextToken.
-        primitiveNr := self parseST80Primitive.
-        (primitiveNr == #Error) ifTrue:[^ #Error].
-        primitiveNr < 0 ifTrue:[
+        primNr := self parseST80Primitive.
+
+        (primNr == #Error) ifTrue:[^ #Error].
+        wmsg := nil.
+
+        primNr < 0 ifTrue:[
             WarnST80Directives == true ifTrue:[
                 wmsg := 'ST-80 directive ignored'.
             ].
-            primitiveNr := nil.
         ] ifFalse:[
+            primitiveNr := primNr.
             wmsg := 'ST-80 primitive may not work'
         ].
         wmsg notNil ifTrue:[self warning:wmsg position:pos]
     ].
 
     "Created: 27.4.1996 / 16:55:55 / cg"
+    "Modified: 29.5.1996 / 17:25:52 / cg"
 !
 
 parseST80Primitive
@@ -2629,19 +2642,25 @@
      st80Primitive ::= 'resource:' SYMBOL (...) - ignored; leave (SYMBOL (...)) in primitiveResource
     "
 
-    |primNumber keys|
+    |primNumber keys resource resourceValue|
 
     (tokenType ~~ #Keyword) ifTrue:[
         self parseError:'bad primitive definition (keyword expected)'.
         ^ #Error
     ].
+
     (tokenName = 'primitive:') ifTrue:[
         self nextToken.
         (tokenType == #Integer) ifFalse:[
             self parseError:'primitive number expected'.
             ^ #Error
         ].
-        primNumber := tokenValue.
+        primitiveNr notNil ifTrue:[
+            self parseError:'only one primitive spec allowed'.
+            primNumber := -1.
+        ] ifFalse:[
+            primNumber := tokenValue.
+        ].
         self nextToken.
     ] ifFalse:[
         (tokenName = 'resource:') ifTrue:[
@@ -2651,26 +2670,26 @@
                 ^ #Error
             ].
             primNumber := -1.
-            primitiveResource := tokenValue.
-
-            (primitiveResource == #keyboard 
-             or:[primitiveResource == #style])
-            ifTrue:[
+            resource := tokenValue.
+            resourceValue := true.
+
+            self nextToken.
+
+            tokenType == $( ifTrue:[
                 self nextToken.
-                tokenType == $( ifTrue:[
+                keys := OrderedCollection new.
+                [tokenType == $) ] whileFalse:[
+                    keys add:tokenValue.
                     self nextToken.
-                    keys := OrderedCollection new.
-                    [tokenType == $) ] whileFalse:[
-                        keys add:tokenValue.
-                        self nextToken.
-                    ].
-                    primitiveResource := Array with:primitiveResource
-                                               with:keys.
-                    self nextToken.
-                ]
-            ] ifFalse:[
+                ].
+                resourceValue := keys.
                 self nextToken.
             ].
+
+            primitiveResource isNil ifTrue:[
+                primitiveResource := IdentityDictionary new.
+            ].
+            primitiveResource at:(resource asSymbol) put:resourceValue.
         ] ifFalse:[
             self parseError:'unrecognized primitive'.
             ^ #Error
@@ -2684,7 +2703,7 @@
     self nextToken.
     ^ primNumber
 
-    "Modified: 1.3.1996 / 13:33:26 / cg"
+    "Modified: 29.5.1996 / 17:24:09 / cg"
 !
 
 primary
@@ -3480,6 +3499,6 @@
 !Parser class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libcomp/Parser.st,v 1.79 1996-05-18 14:04:40 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libcomp/Parser.st,v 1.80 1996-05-29 15:41:46 cg Exp $'
 ! !
 Parser initialize!