[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Help-smalltalk] [PATCH] stinst: Be able to parse class pragmas with mul
From: |
Holger Hans Peter Freyther |
Subject: |
[Help-smalltalk] [PATCH] stinst: Be able to parse class pragmas with multiple keywords. |
Date: |
Tue, 2 Oct 2012 15:59:41 +0200 |
From: Holger Hans Peter Freyther <address@hidden>
2012-10-02 Holger Freyther <address@hidden>
* tests/stcompiler.st: Add testcase for pragma parsing.
* tests/stcompiler.ok: Update the test result.
2012-10-02 Holger Freyther <address@hidden>
* GSTParser.st: Change GSTFileInParser>>#parseClassTag to parse
more complicated pragmas.
---
ChangeLog | 5 +++++
packages/stinst/parser/ChangeLog | 5 +++++
packages/stinst/parser/GSTParser.st | 19 +++++++++++++------
tests/stcompiler.st | 7 +++++++
4 files changed, 30 insertions(+), 6 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 8c08ade..91c384e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2012-10-02 Holger Freyther <address@hidden>
+
+ * tests/stcompiler.st: Add testcase for pragma parsing.
+ * tests/stcompiler.ok: Update the test result.
+
2012-09-29 Holger Freyther <address@hidden>
* scripts/Convert.st: Collect all rewrite expressions and parse
diff --git a/packages/stinst/parser/ChangeLog b/packages/stinst/parser/ChangeLog
index 31bb50c..58affee 100644
--- a/packages/stinst/parser/ChangeLog
+++ b/packages/stinst/parser/ChangeLog
@@ -1,3 +1,8 @@
+2012-10-02 Holger Freyther <address@hidden>
+
+ * GSTParser.st: Change GSTFileInParser>>#parseClassTag to parse
+ more complicated pragmas.
+
2012-09-29 Holger Freyther <address@hidden>
* RBParser.st: Add RBScanner>>#digitValue:.
diff --git a/packages/stinst/parser/GSTParser.st
b/packages/stinst/parser/GSTParser.st
index c84410a..9e1d0ef 100644
--- a/packages/stinst/parser/GSTParser.st
+++ b/packages/stinst/parser/GSTParser.st
@@ -237,21 +237,28 @@ STInST.STFileInParser subclass: GSTFileInParser [
]
parseClassTag [
- | selector argument stmt |
+ | selectors arguments stmt |
self skipExpectedToken: #<.
(currentToken isKeyword)
- ifTrue: [selector := currentToken value asSymbol. self step]
ifFalse: [self parserError: 'expected keyword'].
-
- argument := self parsePrimitiveObject.
+
+ selectors := OrderedCollection new.
+ arguments := OrderedCollection new.
+
+ "Consume all keywords and literals of the pragma"
+ [currentToken isKeyword] whileTrue: [
+ selectors add: currentToken. self step.
+ arguments add: self parsePrimitiveObject.
+ ].
+
self skipExpectedToken: #>.
stmt := RBMessageNode
receiver: taggee
- selector: selector
- arguments: { argument }.
+ selectorParts: selectors
+ arguments: arguments.
self evaluateStatement: stmt.
]
diff --git a/tests/stcompiler.st b/tests/stcompiler.st
index 084f5f9..8f67250 100644
--- a/tests/stcompiler.st
+++ b/tests/stcompiler.st
@@ -104,6 +104,13 @@ literalValueFoo12345
Eval [
| classes |
+ "Attempt to parse a pragma with multiple parameters"
+ classes := STInST.STClassLoader new
+ parseSmalltalkStream: 'Object subclass: Bla [
+ <pragma: 1 withParam: 3> ]' readStream
+ with: STInST.GSTFileInParser.
+
+ "Check if the proxy has a proper behavior"
classes := STInST.STClassLoader new
parseSmalltalkStream: 'Object subclass: Foo []' readStream
with: STInST.GSTFileInParser.
--
1.7.10.4
- [Help-smalltalk] [PATCH] stinst: Be able to parse class pragmas with multiple keywords.,
Holger Hans Peter Freyther <=