[squeak-dev] The Inbox: Compiler-cmm.185.mcz
Chris Muller
asqueaker at gmail.com
Thu Jan 13 03:21:37 UTC 2011
Dear wizards, would you please double-check this change, which I made
without fully understanding what I am doing, but which fixes a painful
bug for me? Life is too short to spend manually formatting code, so I
use pretty print. I really need it, but the formatter has been making
multiple copies of comments, which I have to manually delete. This of
course defeats the benefit of automatic code-formatting..
It's easy to reproduce:
- pull up any method with a comment inside a block, i.e..,
WeakKeyDictionary>>#finalizeValues,
- Shift + yellow-click in the code-pane to bring up the alternate code-menu
- select 'pretty print'
Observe the comment inside the "ifTrue:" expression at the bottom has
been duplicated.
This does not fix all cases, but it seems to at least alleviate these
boolean-expression cases. The comment is still duplicated inside and:
/ or: blocks, like in BlockNode>>#printStatementsOn:indent:.
Thanks,
Chris
On Wed, Jan 12, 2011 at 8:48 PM, <commits at source.squeak.org> wrote:
> A new version of Compiler was added to project The Inbox:
> http://source.squeak.org/inbox/Compiler-cmm.185.mcz
>
> ==================== Summary ====================
>
> Name: Compiler-cmm.185
> Author: cmm
> Time: 12 January 2011, 8:48:16.196 pm
> UUID: 8aa7ae35-517f-4922-950c-0b88c9a33ec7
> Ancestors: Compiler-nice.184
>
> Fix multiplying comments on pretty-print.
>
> =============== Diff against Compiler-nice.184 ===============
>
> Item was changed:
> ----- Method: Parser>>statements:innerBlock:blockNode: (in category 'expression types') -----
> statements: argNodes innerBlock: inner blockNode: theBlockNode
>
> | stmts returns start |
> "give initial comment to block, since others trail statements"
> theBlockNode comment: currentComment.
> stmts := OrderedCollection new.
> returns := false.
> hereType ~~ #rightBracket ifTrue:
> [[theBlockNode startOfLastStatement: (start := self startOfNextToken).
> (returns := self matchReturn)
> ifTrue:
> [self expression ifFalse:
> [^self expected: 'Expression to return'].
> self addComment.
> stmts addLast: (parseNode isReturningIf
> ifTrue: [parseNode]
> ifFalse: [ReturnNode new
> expr: parseNode
> encoder: encoder
> sourceRange: (start to: self endOfLastToken)])]
> ifFalse:
> [self expression
> ifTrue:
> + [currentComment := nil..
> - [self addComment.
> stmts addLast: parseNode]
> ifFalse:
> [self addComment.
> stmts size = 0 ifTrue:
> [stmts addLast:
> (encoder encodeVariable:
> (inner ifTrue: ['nil'] ifFalse: ['self']))]]].
> returns ifTrue:
> [self match: #period.
> (hereType == #rightBracket or: [hereType == #doIt]) ifFalse:
> [^self expected: 'End of block']].
> returns not and: [self match: #period]] whileTrue].
> theBlockNode
> arguments: argNodes
> statements: stmts
> returns: returns
> from: encoder.
> parseNode := theBlockNode.
> ^true!
>
>
>
More information about the Squeak-dev
mailing list
|