--- a/Parser.st Thu Jul 08 19:00:43 1999 +0200
+++ b/Parser.st Thu Jul 08 19:00:53 1999 +0200
@@ -3042,39 +3042,11 @@
"Modified: / 31.3.1998 / 17:31:59 / cg"
!
-parsePrimitiveOrResourceSpecOrEmpty
- "parse a methods primitive or resource spec"
-
- |pos wmsg primNr|
-
- [(tokenType == #BinaryOperator) and:[tokenName = '<']] whileTrue:[
- "/ an ST-80 primitive or resourceSpec - parsed but ignored
-
- pos := tokenPosition.
- self nextToken.
- primNr := self parseST80Primitive.
-
- (primNr == #Error) ifTrue:[^ #Error].
- wmsg := nil.
-
- primNr < 0 ifTrue:[
- WarnST80Directives == true ifTrue:[
- wmsg := 'ST-80 directive ignored'.
- ].
- ] 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
+parsePrimitive
"parse an ST-80 type primitive as '< primitive: nr >';
return primitive number or #Error.
+ or a Squeak-style primitive, as '< primitive: string >';
+ return primitive name or #Error.
Also, ST-80 style resource specs are parsed; the result is
left (as side effect) in primitiveResource.
(maybe someone else knows what to do with it ...)
@@ -3084,6 +3056,7 @@
For faster finding of used keyboard accelerators.
st80Primitive ::= 'primitive:' INTEGER
+ squeakPrimitive ::= 'primitive:' STRING
st80Primitive ::= 'resource:' SYMBOL - ignored; leave SYMBOL in primitiveResource
st80Primitive ::= 'resource:' SYMBOL (...) - ignored; leave (SYMBOL (...)) in primitiveResource
"
@@ -3091,60 +3064,60 @@
|primNumber keys resource resourceValue|
(tokenType ~~ #Keyword) ifTrue:[
- self parseError:'bad primitive definition (keyword expected)'.
- ^ #Error
+ self parseError:'bad primitive definition (keyword expected)'.
+ ^ #Error
].
(tokenName = 'primitive:') ifTrue:[
- self nextToken.
- (tokenType == #Integer) ifFalse:[
- self parseError:'primitive number expected'.
- ^ #Error
- ].
- primitiveNr notNil ifTrue:[
- self parseError:'only one primitive spec allowed'.
- primNumber := -1.
- ] ifFalse:[
- primNumber := tokenValue.
- ].
- self nextToken.
+ self nextToken.
+ (tokenType == #Integer) ifFalse:[
+ self parseError:'primitive number expected'.
+ ^ #Error
+ ].
+ primitiveNr notNil ifTrue:[
+ self parseError:'only one primitive spec allowed'.
+ primNumber := -1.
+ ] ifFalse:[
+ primNumber := tokenValue.
+ ].
+ self nextToken.
] ifFalse:[
- (tokenName = 'resource:') ifTrue:[
- self nextToken.
- (tokenType ~~ #Symbol) ifTrue:[
- self parseError:'symbol expected'.
- ^ #Error
- ].
- primNumber := -1.
- resource := tokenValue.
- resourceValue := true.
-
- self nextToken.
-
- tokenType == $( ifTrue:[
- self nextToken.
- keys := OrderedCollection new.
- [tokenType == $) ] whileFalse:[
- keys add:tokenValue.
- self nextToken.
- ].
- resourceValue := keys.
- self nextToken.
- ].
-
- primitiveResource isNil ifTrue:[
- primitiveResource := IdentityDictionary new.
- ].
- primitiveResource at:(resource asSymbol) put:resourceValue.
- ] ifFalse:[
- self parseError:'unrecognized primitive'.
- ^ #Error
- ].
+ (tokenName = 'resource:') ifTrue:[
+ self nextToken.
+ (tokenType ~~ #Symbol) ifTrue:[
+ self parseError:'symbol expected'.
+ ^ #Error
+ ].
+ primNumber := -1.
+ resource := tokenValue.
+ resourceValue := true.
+
+ self nextToken.
+
+ tokenType == $( ifTrue:[
+ self nextToken.
+ keys := OrderedCollection new.
+ [tokenType == $) ] whileFalse:[
+ keys add:tokenValue.
+ self nextToken.
+ ].
+ resourceValue := keys.
+ self nextToken.
+ ].
+
+ primitiveResource isNil ifTrue:[
+ primitiveResource := IdentityDictionary new.
+ ].
+ primitiveResource at:(resource asSymbol) put:resourceValue.
+ ] ifFalse:[
+ self parseError:'unrecognized primitive'.
+ ^ #Error
+ ].
].
((tokenType == #BinaryOperator) and:[tokenName = '>']) ifFalse:[
- self parseError:'bad primitive definition (> expected)'.
- ^ #Error
+ self parseError:'bad primitive definition (> expected)'.
+ ^ #Error
].
self nextToken.
^ primNumber
@@ -3152,6 +3125,36 @@
"Modified: 29.5.1996 / 17:24:09 / cg"
!
+parsePrimitiveOrResourceSpecOrEmpty
+ "parse a methods primitive or resource spec"
+
+ |pos wmsg primNr|
+
+ [(tokenType == #BinaryOperator) and:[tokenName = '<']] whileTrue:[
+ "/ an ST-80 primitive or resourceSpec - parsed but ignored
+
+ pos := tokenPosition.
+ self nextToken.
+ primNr := self parsePrimitive.
+
+ (primNr == #Error) ifTrue:[^ #Error].
+ wmsg := nil.
+
+ primNr < 0 ifTrue:[
+ WarnST80Directives == true ifTrue:[
+ wmsg := 'ST-80 directive ignored'.
+ ].
+ ] 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"
+!
+
statement
"parse a statement; return a node-tree or #Error.
@@ -4115,7 +4118,7 @@
].
(tokenType == ${ ) ifTrue:[
- AllowSqueakComputedArrays ifFalse:[
+ AllowSqueakExtensions ifFalse:[
self parseError:'non-Standard Squeak extension (enable in settings)' position:pos to:tokenPosition.
^ #Error
].
@@ -5007,6 +5010,6 @@
!Parser class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libcomp/Parser.st,v 1.208 1999-07-08 15:42:03 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libcomp/Parser.st,v 1.209 1999-07-08 17:00:53 cg Exp $'
! !
Parser initialize!