[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Help-smalltalk] RBParser and negative numbers in arrays
From: |
Holger Hans Peter Freyther |
Subject: |
Re: [Help-smalltalk] RBParser and negative numbers in arrays |
Date: |
Mon, 12 Aug 2013 08:57:05 +0200 |
User-agent: |
Mutt/1.5.21 (2010-09-15) |
On Sat, Aug 10, 2013 at 06:10:10PM +0200, Holger Hans Peter Freyther wrote:
>
> But RBParser parseExpression: '-3' parsed properly, it is the mix of
> array literal and this. I would like to add a testLiteralArrayParsing
> as well. But I can now parse the Grease tests and will look into updating
> Grease to the latest version.
I have applied the below changes. Interestingly parsing '-16r3' is working
after your change, it does not go into the isNegative branch. This means
that someone else is consuming the '-' before it is reaching scanNumberValue.
I will try to step through this with the MiniDebugger.
diff --git a/packages/stinst/parser/RBParser.st
b/packages/stinst/parser/RBParser.st
index 25a4427..7e2804e 100644
--- a/packages/stinst/parser/RBParser.st
+++ b/packages/stinst/parser/RBParser.st
@@ -1042,7 +1042,7 @@ Stream subclass: RBScanner [
num := self scanDigits: currentCharacter base: 10.
currentCharacter == $r
ifTrue:
- [isNegative ifTrue: [self error: 'malformed number'].
+ [
base := num truncated.
self step "skip over 'r'".
currentCharacter == $-
diff --git a/packages/stinst/parser/RewriteTests.st
b/packages/stinst/parser/RewriteTests.st
index 5ba9ed2..489a4f8 100644
--- a/packages/stinst/parser/RewriteTests.st
+++ b/packages/stinst/parser/RewriteTests.st
@@ -362,9 +362,12 @@ TestCase subclass: TestParser [
self assert: node value = 3.
node := RBParser parseExpression: '-3'.
self assert: node value = -3.
- self should: [ node := RBParser parseExpression: '-16r3' ] raise:
Error.
+ node := RBParser parseExpression: '-16r3'.
+ self assert: node value = -3.
node := RBParser parseExpression: '16r-3'.
self assert: node value = -3.
+ node := RBParser parseExpression: '- 16r3'.
+ self assert: node value = -3.
node := RBParser parseExpression: '16r-3.23'.
self assert: node value = 16r-3.23.
node := RBParser parseExpression: '16r-3s23_0'.
@@ -378,6 +381,18 @@ TestCase subclass: TestParser [
node := RBParser parseExpression: '3_000_000q1233'.
self assert: node value = 3_000_000q1233.
]
+
+ testLiteralArrayParsing [
+ | node |
+
+ node := RBParser parseExpression: '#(-3 -2 -16r1)'.
+ self assert: node value first = -3.
+ self assert: node value second = -2.
+ self assert: node value third = -1.
+
+ node := RBParser parseExpression: '#(16r-1)'.
+ self assert: node value first = -1.
+ ]
]
TestCase subclass: TestRewrite [
diff --git a/packages/stinst/parser/package.xml
b/packages/stinst/parser/package.xml
index ba9ed69..a57efbb 100644
--- a/packages/stinst/parser/package.xml
+++ b/packages/stinst/parser/package.xml
@@ -29,6 +29,7 @@
<namespace>STInST.Tests</namespace>
<sunit>STInST.Tests.TestStandardRewrites</sunit>
<sunit>STInST.Tests.TestFormat</sunit>
+ <sunit>STInST.Tests.TestParser</sunit>
<sunit>STInST.Tests.TestRewrite</sunit>
<sunit>STInST.Tests.TestScanner</sunit>
<sunit>STInST.Tests.TestDefaultPoolResolution</sunit>