help-smalltalk
[Top][All Lists]
Advanced

[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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]