[squeak-dev] The Trunk: Compiler-ar.137.mcz
Alexander Lazarević
laza at blobworks.com
Wed Mar 24 09:47:22 UTC 2010
There is (still?) an allowUnderscoreAssignment preference setting in the
compiler (lowercase) category from Parser>>initialize?
Alex
On Wed, Mar 24, 2010 at 09:25, <commits at source.squeak.org> wrote:
> Andreas Raab uploaded a new version of Compiler to project The Trunk:
> http://source.squeak.org/trunk/Compiler-ar.137.mcz
>
> ==================== Summary ====================
>
> Name: Compiler-ar.137
> Author: ar
> Time: 24 March 2010, 1:25:23.067 am
> UUID: 090fc365-fe3c-6741-a731-3222d6ab6afa
> Ancestors: Compiler-nice.136
>
> Underscore assignments and underscore selector preferences and
> implementation. The defaults are set to be compatible with past usage, i.e.,
> allowUnderscoreAssignment is true and allowUnderscoreSelectors is false.
> Might consider changing this after 4.1.
>
> =============== Diff against Compiler-nice.136 ===============
>
> Item was added:
> + ----- Method: Scanner>>allowUnderscoreSelectors (in category 'private')
> -----
> + allowUnderscoreSelectors
> + "Query preference"
> + ^self class prefAllowUnderscoreSelectors!
>
> Item was changed:
> ----- Method: Scanner class>>initialize (in category 'initialization')
> -----
> initialize
> | newTable |
> newTable := Array new: 256 withAll: #xBinary. "default"
> newTable atAll: #(9 10 12 13 32 ) put: #xDelimiter. "tab lf ff cr
> space"
> newTable atAll: ($0 asciiValue to: $9 asciiValue) put: #xDigit.
>
> 1 to: 255
> do: [:index |
> (Character value: index) isLetter
> ifTrue: [newTable at: index put: #xLetter]].
>
> newTable at: 30 put: #doIt.
> newTable at: $" asciiValue put: #xDoubleQuote.
> newTable at: $# asciiValue put: #xLitQuote.
> newTable at: $$ asciiValue put: #xDollar.
> newTable at: $' asciiValue put: #xSingleQuote.
> newTable at: $: asciiValue put: #xColon.
> newTable at: $( asciiValue put: #leftParenthesis.
> newTable at: $) asciiValue put: #rightParenthesis.
> newTable at: $. asciiValue put: #period.
> newTable at: $; asciiValue put: #semicolon.
> newTable at: $[ asciiValue put: #leftBracket.
> newTable at: $] asciiValue put: #rightBracket.
> newTable at: ${ asciiValue put: #leftBrace.
> newTable at: $} asciiValue put: #rightBrace.
> newTable at: $^ asciiValue put: #upArrow.
> + newTable at: $_ asciiValue put: #xUnderscore.
> - newTable at: $_ asciiValue put: #leftArrow.
> newTable at: $| asciiValue put: #verticalBar.
> TypeTable := newTable "bon voyage!!"
>
> "Scanner initialize"!
>
> Item was added:
> + ----- Method: Parser>>allowUnderscoreAssignments (in category 'private')
> -----
> + allowUnderscoreAssignments
> + "Query class + preference"
> + ^encoder classEncoding allowUnderscoreAssignments
> + ifNil:[super allowUnderscoreAssignments]!
>
> Item was added:
> + ----- Method: Scanner>>allowUnderscoreAssignments (in category 'private')
> -----
> + allowUnderscoreAssignments
> + "Query preference"
> + ^self class prefAllowUnderscoreAssignments!
>
> Item was added:
> + ----- Method: Scanner class>>prefAllowUnderscoreAssignments: (in category
> 'preferences') -----
> + prefAllowUnderscoreAssignments: aBool
> + "Accessor for the system-wide preference"
> + AllowUnderscoreAssignments := aBool!
>
> Item was added:
> + ----- Method: Scanner class>>prefAllowUnderscoreAssignments (in category
> 'preferences') -----
> + prefAllowUnderscoreAssignments
> + "Accessor for the system-wide preference"
> + <preference: 'Allow underscore assignments'
> + category: 'Compiler'
> + description: 'When true, underscore can be used as
> assignment operator'
> + type: #Boolean>
> + ^AllowUnderscoreAssignments ifNil:[true]!
>
> Item was added:
> + ----- Method: Scanner class>>prefAllowUnderscoreSelectors: (in category
> 'preferences') -----
> + prefAllowUnderscoreSelectors: aBool
> + "Accessor for the system-wide preference"
> + AllowUnderscoreSelectors := aBool!
>
> Item was changed:
> ----- Method: Scanner>>xUnderscore (in category 'multi-character scans')
> -----
> xUnderscore
> + self allowUnderscoreAssignments ifTrue:[ | type |
> + "Figure out if x _foo (no space between _ and foo)
> + should be a selector or assignment"
> + (((type := self typeTableAt: aheadChar) == #xLetter
> + or:[type == #xDigit or:[type == #xUnderscore]])
> + and:[self allowUnderscoreSelectors]) ifFalse:[
> + self step.
> + tokenType := #leftArrow.
> + ^token := #':='
> + ].
> + ].
> + self allowUnderscoreSelectors ifTrue:[^self xLetter].
> + ^self xIllegal
> + !
> - Preferences allowUnderscoreAssignment ifFalse:[^self xIllegal].
> - self step.
> - tokenType := #leftArrow.
> - ^token := #':='!
>
> Item was changed:
> ----- Method: Scanner>>xLetter (in category 'multi-character scans') -----
> xLetter
> "Form a word or keyword."
>
> | type |
> buffer reset.
> + [(type := self typeTableAt: hereChar) == #xLetter
> + or: [type == #xDigit
> + or: [type == #xUnderscore and:[self
> allowUnderscoreSelectors]]]] whileTrue:
> - [(type := self typeTableAt: hereChar) == #xLetter or: [type ==
> #xDigit]]
> - whileTrue:
> ["open code step for speed"
> buffer nextPut: hereChar.
> hereChar := aheadChar.
> aheadChar := source atEnd
> ifTrue: [30
> asCharacter "doit"]
> ifFalse: [source
> next]].
> tokenType := (type == #colon or: [type == #xColon and: [aheadChar ~~
> $=]])
> ifTrue:
> [buffer nextPut: self step.
> "Allow any number of
> embedded colons in literal symbols"
> [(self typeTableAt:
> hereChar) == #xColon] whileTrue:
> [buffer nextPut:
> self step].
> #keyword]
> ifFalse:
> [type == #leftParenthesis
> ifTrue:
> [buffer
> nextPut: self step; nextPut: $).
>
> #positionalMessage]
> ifFalse:[#word]].
> token := buffer contents!
>
> Item was changed:
> Object subclass: #Scanner
> instanceVariableNames: 'source mark hereChar aheadChar token
> tokenType currentComment buffer typeTable'
> + classVariableNames: 'AllowUnderscoreAssignments
> AllowUnderscoreSelectors TypeTable'
> - classVariableNames: 'TypeTable'
> poolDictionaries: ''
> category: 'Compiler-Kernel'!
>
> !Scanner commentStamp: '<historical>' prior: 0!
> I scan a string or text, picking out Smalltalk syntactic tokens. I look
> one character ahead. I put each token found into the instance variable,
> token, and its type (a Symbol) into the variable, tokenType. At the end of
> the input stream, I pretend to see an endless sequence of special characters
> called doits.!
>
> Item was added:
> + ----- Method: Scanner class>>prefAllowUnderscoreSelectors (in category
> 'preferences') -----
> + prefAllowUnderscoreSelectors
> + "Accessor for the system-wide preference"
> + <preference: 'Allow underscore selectors'
> + category: 'Compiler'
> + description: 'When true, underscore can be used in
> selectors and varibable names'
> + type: #Boolean>
> + ^AllowUnderscoreSelectors ifNil:[false]!
>
> Item was added:
> + ----- Method: Parser>>allowUnderscoreSelectors (in category 'private')
> -----
> + allowUnderscoreSelectors
> + "Query class + preference"
> + ^encoder classEncoding allowUnderscoreSelectors
> + ifNil:[super allowUnderscoreSelectors]!
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20100324/3c3bd88d/attachment.htm
More information about the Squeak-dev
mailing list
|