--- 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!