[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Help-smalltalk] [PATCH] stinst: Be able to parse class pragmas with
From: |
Paolo Bonzini |
Subject: |
Re: [Help-smalltalk] [PATCH] stinst: Be able to parse class pragmas with multiple keywords. |
Date: |
Mon, 08 Oct 2012 18:01:38 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:15.0) Gecko/20120911 Thunderbird/15.0.1 |
Il 02/10/2012 15:59, Holger Hans Peter Freyther ha scritto:
> 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.
>
Applied.
Paolo