[Pkg] The Trunk: Compiler-ul.202.mcz
commits at source.squeak.org
commits at source.squeak.org
Fri Apr 1 23:04:25 UTC 2011
Levente Uzonyi uploaded a new version of Compiler to project The Trunk:
http://source.squeak.org/trunk/Compiler-ul.202.mcz
==================== Summary ====================
Name: Compiler-ul.202
Author: ul
Time: 2 April 2011, 12:44:12.796 am
UUID: e7e9151c-c2e9-b14a-bb57-68e6ea8daea5
Ancestors: Compiler-nice.201
- reject literals with superfluous # at the beginning, like #$a #123 ##foo ##(1 2 3), etc
- introduced #character type for characters instead of #number (part 1)
=============== Diff against Compiler-nice.201 ===============
Item was changed:
----- Method: Parser>>pragmaLiteral: (in category 'pragmas') -----
pragmaLiteral: selectorSoFar
"Read a pragma literal. As a nicety we allow a variable name (rather
than a literal string) as the second argument to primitive:error:"
+ (hereType == #string or: [ hereType == #literal or: [ hereType == #number or: [ hereType == #character ] ] ])
- (hereType == #string or: [ hereType == #literal or: [ hereType == #number ] ])
ifTrue: [ ^ self advance ].
(here == $# and: [ tokenType == #word ])
ifTrue: [ ^ self advance ].
(here == #- and: [ tokenType == #number ])
ifTrue: [ ^ (self advance; advance) negated ].
(here = 'true' or: [ here = 'false' or: [ here = 'nil' ] ])
ifTrue: [ ^ Compiler evaluate: self advance ].
"This nicety allows one to supply a primitive error
temp as a variable name, rather than a string."
((selectorSoFar beginsWith: 'primitive:')
and: [(selectorSoFar endsWith: 'error:')
and: [hereType == #word]]) ifTrue:
[^self advance].
^self expected: 'Literal constant'!
Item was changed:
----- Method: Parser>>primaryExpression (in category 'expression types') -----
primaryExpression
hereType == #word
ifTrue:
[parseNode := self variable.
(parseNode isUndefTemp and: [self interactive])
ifTrue: [self queryUndefined].
parseNode nowHasRef.
^ true].
hereType == #leftBracket
ifTrue:
[self advance.
self blockExpression.
^true].
hereType == #leftBrace
ifTrue:
[self braceExpression.
^true].
hereType == #leftParenthesis
ifTrue:
[self advance.
self expression ifFalse: [^self expected: 'expression'].
(self match: #rightParenthesis)
ifFalse: [^self expected: 'right parenthesis'].
^true].
+ (hereType == #string or: [hereType == #number or: [hereType == #literal or: [hereType == #character]]])
- (hereType == #string or: [hereType == #number or: [hereType == #literal]])
ifTrue:
[parseNode := encoder encodeLiteral: self advance.
^true].
(here == #- and: [tokenType == #number and: [1 + hereEnd = mark]])
ifTrue:
[self advance.
parseNode := encoder encodeLiteral: self advance negated.
^true].
^false!
Item was changed:
----- Method: Scanner>>xLitQuote (in category 'multi-character scans') -----
xLitQuote
"Symbols and vectors: #(1 (4 5) 2 3) #ifTrue:ifFalse: #'abc'."
| start |
start := mark.
self step. "litQuote"
self scanToken.
tokenType == #leftParenthesis
ifTrue: [self scanToken; scanLitVec.
mark := start + 1.
tokenType == #doIt
ifTrue: [self offEnd: 'Unmatched parenthesis']]
ifFalse: [tokenType == #leftBracket
ifTrue: [self scanToken; scanLitByteVec.
mark := start + 1.
tokenType == #doIt
ifTrue: [self offEnd: 'Unmatched bracket']]
ifFalse: [(tokenType == #word or: [tokenType == #keyword or: [tokenType == #colon]])
ifTrue: [self scanLitWord]
+ ifFalse: [tokenType == #string
+ ifTrue: [token := token asSymbol]
+ ifFalse: [(tokenType == #binary or: [ tokenType == #verticalBar ])
+ ifFalse: [self notify: 'Invalid literal character' at: start + 1]]]]].
- ifFalse: ["tokenType == #literal
- ifTrue: [token isSymbol
- ifTrue: [""##word""
- token := token
- ""May want to move toward ANSI
- here ""]]
- ifFalse: ["tokenType == #string
- ifTrue: [token := token asSymbol]"]"]]].
mark := start.
tokenType := #literal
"#(Pen)
#Pen
#'Pen'
##Pen
###Pen
"!
More information about the Packages
mailing list