--- a/Parser.st Sat Nov 03 18:59:24 2012 +0100
+++ b/Parser.st Mon Nov 05 19:50:44 2012 +0100
@@ -2164,14 +2164,14 @@
!
setNameSpace:aNameSpaceName
+ "sent from a namespace directive, if there is no requestor.
+ Remember the current namespace."
+
currentNamespace := aNameSpaceName isString
ifTrue:[ NameSpace fullName:aNameSpaceName ]
ifFalse:[ aNameSpaceName ].
"Modified: 8.11.1996 / 13:43:14 / cg"
-
-
-
!
setPackage:aPackageID
@@ -5097,6 +5097,15 @@
"Modified: / 05-07-2010 / 17:15:34 / cg"
!
+makeSelector:rawSelector
+false ifTrue:[ "/ will eventually support namespace selectors
+ currentNamespace notNil ifTrue:[
+ ^ (':',currentNamespace name,':',rawSelector) asSymbol
+ ].
+].
+ ^ rawSelector asSymbol.
+!
+
parseExpressionWithSelf:anObject notifying:someOne ignoreErrors:ignoreErrors ignoreWarnings:ignoreWarnings inNameSpace:aNameSpaceOrNil
"parse aString as an expression with self set to anObject;
Return the parseTree (if ok), nil (for an empty string
@@ -5134,47 +5143,6 @@
"Created: / 14-12-1999 / 15:11:37 / cg"
!
-parseExtendedMethodSpec
- |pos1 pos2 var|
-
- "/ EXPERIMENTAL
-false ifTrue:[
- (tokenType == #Symbol) ifTrue:[
- pos1 := tokenPosition.
- selector := token asSymbol.
- self nextToken.
- self markMethodSelectorFrom:pos1 to:(tokenPosition-1).
- beginOfBodyPosition := tokenPosition.
-
- tokenType == $( ifTrue:[
- self nextToken.
- [ tokenType ~~ $) ] whileTrue:[
-
- (tokenType ~~ #Identifier) ifTrue:[^ #Error].
- pos2 := tokenPosition+tokenName size-1.
- self markArgumentIdentifierFrom:tokenPosition to:pos2.
- var := Variable name:tokenName.
- methodArgs isNil ifTrue:[
- methodArgs := Array with:var.
- methodArgNames := Array with:tokenName
- ] ifFalse:[
- (methodArgNames includes:tokenName) ifTrue:[
- self methodArgRedefined:tokenName from:tokenPosition to:pos2
- ].
- methodArgs := methodArgs copyWith:var.
- methodArgNames := methodArgNames copyWith:tokenName
- ].
- self nextToken.
- ].
- self nextToken.
- ].
-
- ^ self
- ].
-].
- ^ #Error
-!
-
parseMethod
"parse a method.
Return the parseTree or #Error.
@@ -5456,28 +5424,32 @@
| IDENTIFIER
"
- |arg pos2 selectorPositions|
+ |arg pos1 pos2 argPos1 argPos2 rawSelector|
tokenType isNil ifTrue:[
self nextToken.
].
+
+ pos1 := tokenPosition.
+
"/ selectorPositions := OrderedCollection new.
(tokenType == #Keyword) ifTrue:[
- selector := ''.
+ rawSelector := ''.
[tokenType == #Keyword] whileTrue:[
- "/ selectorPositions add:(tokenPosition to:(tokenPosition+tokenName size-1)).
- self markMethodSelectorFrom:tokenPosition to:(tokenPosition+tokenName size-1).
- selector := selector , tokenName.
+ "/ selectorPositions add:(pos1 to:(pos1+tokenName size - 1)).
+ self markMethodSelectorFrom:pos1 to:(pos1+tokenName size - 1).
+ rawSelector := rawSelector , tokenName.
self nextToken.
(tokenType ~~ #Identifier) ifTrue:[
"/ ^ #Error].
^ self identifierExpectedIn:'method-arg declaration'
].
-
- pos2 := tokenPosition+tokenName size-1.
- self markMethodArgumentIdentifierFrom:tokenPosition to:pos2.
+ argPos1 := tokenPosition.
+ argPos2 := argPos1+tokenName size - 1.
+ pos2 := argPos2.
+ self markMethodArgumentIdentifierFrom:argPos1 to:argPos2.
self checkMethodArgumentNameConventionsFor:tokenName.
arg := Variable name:tokenName.
methodArgs isNil ifTrue:[
@@ -5485,7 +5457,7 @@
methodArgNames := Array with:tokenName
] ifFalse:[
(methodArgNames includes:tokenName) ifTrue:[
- self methodArgRedefined:tokenName from:tokenPosition to:pos2
+ self methodArgRedefined:tokenName from:argPos1 to:argPos2
].
methodArgs := methodArgs copyWith:arg.
methodArgNames := methodArgNames copyWith:tokenName
@@ -5495,7 +5467,7 @@
(self classesInstVarNames includes:tokenName) ifTrue:[
self
warning:'argument "' , tokenName allBold , '" hides instance variable.'
- position:tokenPosition to:pos2
+ position:argPos1 to:argPos2
]
].
].
@@ -5505,18 +5477,21 @@
"/ arg domain:nil.
"/ ].
].
- selector := selector asSymbol.
+
+ selector := self makeSelector:rawSelector.
endOfSelectorPosition := pos2.
beginOfBodyPosition := tokenPosition.
^ self
].
(self isValidUnarySelector:tokenType) ifTrue:[
- pos2 := tokenPosition+tokenName size-1.
- self markMethodSelectorFrom:tokenPosition to:pos2.
- selector := tokenName asSymbol.
+ pos2 := pos1+tokenName size - 1.
+ self markMethodSelectorFrom:pos1 to:pos2.
+ rawSelector := tokenName.
+ self nextToken.
+
+ selector := self makeSelector:rawSelector.
endOfSelectorPosition := pos2.
- self nextToken.
beginOfBodyPosition := tokenPosition.
^ self
].
@@ -5524,21 +5499,23 @@
"/ special handling for | and ^, which are also lexical tokens
(tokenType == $|
or:[(tokenType == $^) and:[parserFlags allowCaretAsBinop]]) ifTrue:[
+ pos2 := pos1+token size - 1.
token := tokenName := (String with:tokenType).
tokenType := #BinaryOperator.
self
warnPossibleIncompatibility:('''',token,''' might not be a valid selector in other smalltalk systems')
- position:tokenPosition to:pos2.
+ position:pos1 to:pos2.
].
(tokenType == #BinaryOperator) ifTrue:[
- self markMethodSelectorFrom:tokenPosition to:(tokenPosition+tokenName size-1).
- selector := tokenName asSymbol.
+ self markMethodSelectorFrom:pos1 to:(pos1+tokenName size - 1).
+ rawSelector := tokenName.
self nextToken.
(tokenType ~~ #Identifier) ifTrue:[^ #Error].
- pos2 := tokenPosition+tokenName size-1.
- self markMethodArgumentIdentifierFrom:tokenPosition to:pos2.
+ argPos1 := tokenPosition.
+ pos2 := argPos2 := argPos1+tokenName size - 1.
+ self markMethodArgumentIdentifierFrom:argPos1 to:argPos2.
self checkMethodArgumentNameConventionsFor:tokenName.
arg := Variable name:tokenName.
@@ -5547,6 +5524,7 @@
endOfSelectorPosition := pos2.
self nextToken.
+ selector := self makeSelector:rawSelector.
beginOfBodyPosition := tokenPosition.
"/ ((tokenType == #BinaryOperator) and:[token = '#']) ifTrue:[
"/ self nextToken.
@@ -5555,7 +5533,7 @@
^ self
].
- ^ self parseExtendedMethodSpec
+ ^ #Error
"Modified: / 12-07-2010 / 09:57:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified: / 21-08-2011 / 08:12:20 / cg"
@@ -10885,11 +10863,11 @@
!Parser class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libcomp/Parser.st,v 1.729 2012-10-24 18:27:35 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libcomp/Parser.st,v 1.730 2012-11-05 18:50:44 cg Exp $'
!
version_CVS
- ^ '$Header: /cvs/stx/stx/libcomp/Parser.st,v 1.729 2012-10-24 18:27:35 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libcomp/Parser.st,v 1.730 2012-11-05 18:50:44 cg Exp $'
!
version_SVN