--- a/ConstantNode.st Sat Aug 08 22:49:53 2020 +0100
+++ b/ConstantNode.st Tue Aug 25 12:20:06 2020 +0100
@@ -105,10 +105,10 @@
"Modified: / 19-07-2011 / 17:24:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
-type:t value:val from: startPos to: endPos
+type:t value:val from:startPos to:endPos
- ^(self basicNew)
- type: t value: val;
+ ^ (self basicNew)
+ type:t value:val;
startPosition:startPos endPosition:endPos;
yourself
@@ -153,6 +153,14 @@
^ #Literal
! !
+!ConstantNode methodsFor:'RBParser compatibility'!
+
+token
+ "for RB compatibility, I implement some of its protocol"
+
+ ^ self
+! !
+
!ConstantNode methodsFor:'accessing'!
lineNumber:ignoredLineNumber
@@ -171,18 +179,55 @@
originalString := aString.
"Modified (comment): / 15-02-2019 / 14:35:50 / Claus Gittinger"
+!
+
+radix
+ "the constant's original radix;
+ remembered so that we can prettyprint it later in the same radix"
+
+ value isInteger ifFalse:[
+ self error.
+ ^ nil.
+ ].
+ originalString isNil ifTrue:[
+ ^ 10
+ ].
+ originalString size < 2 ifTrue:[^ 10].
+ (originalString at:2) == $r ifTrue:[
+ ^ Integer readFrom:originalString readStream.
+ ].
+ originalString size < 3 ifTrue:[^ 10].
+ (originalString at:3) == $r ifTrue:[
+ ^ Integer readFrom:originalString readStream.
+ ].
+ (originalString startsWith:'0x') ifTrue:[^ 16].
+ (originalString startsWith:'0b') ifTrue:[^ 2].
+ (originalString startsWith:'0o') ifTrue:[^ 8].
+ ^ 10
! !
!ConstantNode methodsFor:'code generation'!
codeForSideEffectOn:aStream inBlock:b for:aCompiler
"no code at all"
+ |msg|
+
+ (aCompiler parserFlags warnAboutDeadCodeAndFixMe) ifFalse:[^ self].
+
+ msg := 'Useless constant reference'.
"/ but remember symbolic literals (such as #TODO)
value isSymbol ifTrue:[
aCompiler addLiteral:value.
- ].
- ^ self
+
+ ((#fixme sameAs:value) or:[#todo sameAs:value]) ifTrue:[
+ msg := 'Reminder in code: ',value
+ ].
+ ].
+ aCompiler
+ warning:msg
+ doNotShowAgainAction:(aCompiler actionToDisableWarning:#warnAboutDeadCodeAndFixMe)
+ position:startPosition to:endPosition.
"Modified: / 04-03-2007 / 15:29:54 / cg"
!
@@ -398,6 +443,47 @@
^ value isNumber
"Created: / 16-06-2018 / 08:46:53 / Claus Gittinger"
+!
+
+isLiteralArray
+ ^ value isArray
+
+ "Created: / 16-06-2018 / 08:46:53 / Claus Gittinger"
+!
+
+isLiteralCString
+ ^ self isSTXSpecialLiteralString:$c
+
+ "Created: / 16-06-2018 / 08:46:53 / Claus Gittinger"
+!
+
+isLiteralEString
+ ^ self isSTXSpecialLiteralString:$e
+
+ "Created: / 16-06-2018 / 08:46:53 / Claus Gittinger"
+!
+
+isLiteralIString
+ ^ self isSTXSpecialLiteralString:$i
+
+ "Created: / 16-06-2018 / 08:46:53 / Claus Gittinger"
+!
+
+isLiteralRString
+ ^ self isSTXSpecialLiteralString:$r
+
+ "Created: / 16-06-2018 / 08:46:53 / Claus Gittinger"
+!
+
+isSTXSpecialLiteralString:typeChar
+ ^ value isString
+ and:[ originalString notNil
+ and:[ originalString size > 2
+ and:[ (originalString at:1) == typeChar
+ and:[ (originalString at:2) == $'
+ ]]]]
+
+ "Created: / 16-06-2018 / 08:46:53 / Claus Gittinger"
! !
!ConstantNode methodsFor:'visiting'!