[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Help-smalltalk] [PATCH] stinst: Parse lowercase number literals from Sq
From: |
Holger Hans Peter Freyther |
Subject: |
[Help-smalltalk] [PATCH] stinst: Parse lowercase number literals from Squeak/Pharo |
Date: |
Sat, 29 Sep 2012 03:45:59 +0200 |
From: Holger Hans Peter Freyther <address@hidden>
Be able to parse literals like 16rabcdef from Squeak/Pharo source.
Introduce RBScanner>>#digitValue: and reimplement >>#isDigit:base:
and #digitValue: in the SqueakFileInScanner class.
---
ChangeLog | 5 +++++
packages/stinst/parser/ChangeLog | 7 +++++++
packages/stinst/parser/RBParser.st | 9 +++++++--
packages/stinst/parser/SqueakParser.st | 12 ++++++++++++
tests/stcompiler.ok | 3 +++
tests/stcompiler.st | 11 +++++++++++
6 files changed, 45 insertions(+), 2 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 7353dcc..694ec33 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2012-09-29 Holger Freyther <address@hidden>
+
+ * tests/stcompiler.st: Add testcase for parsing 16rff.
+ * tests/stcompiler.ok: Update the test result.
+
2012-09-09 Holger Freyther <address@hidden>
* tests/stcompiler.st: Add testcase for article.
diff --git a/packages/stinst/parser/ChangeLog b/packages/stinst/parser/ChangeLog
index c49df53..31bb50c 100644
--- a/packages/stinst/parser/ChangeLog
+++ b/packages/stinst/parser/ChangeLog
@@ -1,3 +1,10 @@
+2012-09-29 Holger Freyther <address@hidden>
+
+ * RBParser.st: Add RBScanner>>#digitValue:.
+ * SqueakParser.st: Reimplement SqueakFileInScanner>>#digitValue:,
+ SqueakFileInScanner>>#isDigit:base:. Parsing of 16rff is now
+ possible.
+
2012-09-09 Holger Freyther <address@hidden>
* STLoaderObjs.st: Add LoadedBehavior>>#article.
diff --git a/packages/stinst/parser/RBParser.st
b/packages/stinst/parser/RBParser.st
index f40356b..2700977 100644
--- a/packages/stinst/parser/RBParser.st
+++ b/packages/stinst/parser/RBParser.st
@@ -976,6 +976,11 @@ Stream subclass: RBScanner [
ifFalse: [aChar isDigit]
]
+ digitValue: aChar [
+ <category: 'private-scanning numbers'>
+ ^ aChar digitValue
+ ]
+
scanDigits: ch base: base [
<category: 'private-scanning numbers'>
| c num |
@@ -987,7 +992,7 @@ Stream subclass: RBScanner [
c := currentCharacter].
c notNil and: [self isDigit: c base: base]]
whileTrue:
- [num := num * base + c digitValue.
+ [num := num * base + (self digitValue: c).
self step.
c := currentCharacter].
^num
@@ -1016,7 +1021,7 @@ Stream subclass: RBScanner [
c := currentCharacter].
c notNil and: [self isDigit: c base: base]]
whileTrue:
- [result := result * base + c digitValue.
+ [result := result * base + (self digitValue: c).
self step.
c := currentCharacter.
scale := scale - 1].
diff --git a/packages/stinst/parser/SqueakParser.st
b/packages/stinst/parser/SqueakParser.st
index e223e66..6be255d 100644
--- a/packages/stinst/parser/SqueakParser.st
+++ b/packages/stinst/parser/SqueakParser.st
@@ -76,6 +76,18 @@ STFileScanner subclass: SqueakFileInScanner [
<comment: nil>
<category: 'Refactory-Parser'>
+ isDigit: aChar base: aBase [
+ <category: 'private-scanning numbers'>
+ "Pharo/Squeak allows 16rff as literal."
+ ^ super isDigit: aChar asUppercase base: aBase.
+ ]
+
+ digitValue: aChar [
+ <category: 'private-scanning numbers'>
+ "Pharo/Squeak allows 16rff as literal."
+ ^ super digitValue: aChar asUppercase
+ ]
+
on: aStream [
<category: 'accessing'>
super on: aStream.
diff --git a/tests/stcompiler.ok b/tests/stcompiler.ok
index f3acb52..dc54a2c 100644
--- a/tests/stcompiler.ok
+++ b/tests/stcompiler.ok
@@ -46,4 +46,7 @@ Execution begins...
returned value is OrderedSet new: 32 "<0>"
Execution begins...
+returned value is OrderedSet new: 32 "<0>"
+
+Execution begins...
returned value is 'an'
diff --git a/tests/stcompiler.st b/tests/stcompiler.st
index ef44d8d..084f5f9 100644
--- a/tests/stcompiler.st
+++ b/tests/stcompiler.st
@@ -91,6 +91,17 @@ asParser
]
Eval [
+ | squeak |
+ "Test literal parsing"
+ squeak := '!String methodsFor: ''*unit-test'' stamp: ''lr 11/7/2009
13:32''!
+literalValueFoo12345
+ ^ 16rabcdef! !'.
+
+ STInST.STClassLoader new parseSmalltalkStream: squeak readStream
+ with: STInST.SqueakFileInParser.
+]
+
+Eval [
| classes |
classes := STInST.STClassLoader new
--
1.7.10.4
- [Help-smalltalk] [PATCH] stinst: Parse lowercase number literals from Squeak/Pharo,
Holger Hans Peter Freyther <=