[squeak-dev] Refactoring Browser error

Alistair Grant akgrant0710 at gmail.com
Sun Nov 4 19:16:21 UTC 2018


Hi All,

If I attempt to execute the following:

| rules |

rules := RBParseTreeRewriter new.

rules replace: 'state at: `@index put: `@expr' with: 'state at:
`@index put: `@expr asC_unsigned_int'.

(rules executeTree: (MD5Plugin parseTreeFor:
#md5ProcessBuffer:withState:)) ifTrue:
[rules tree newSource inspect].
self error: 'parse tree rewrite failed'


I get "Error: End of statement list encountered" (stack trace below).
The same works and produces the expected output in Pharo 7.

It looks like the Refactoring Browser has diverged quite a bit between
Squeak and Pharo.

Who looks after RB in Squeak, and is there a plan to keep in sync with
Pharo, or the other way around, or should this be fixed independently?

Thanks,
Alistair




4 November 2018 8:01:29.599623 pm

VM: unix - Smalltalk
Image: Squeak5.3alpha [latest update: #18261]

SecurityManager state:
Restricted: false
FileAccess: true
SocketAccess: true
Working Dir /home/alistair/vmmaker/opensmalltalk-vm/sqvmm.03
Trusted Dir /home/alistair/vmmaker/opensmalltalk-vm/sqvmm.03/secure
Untrusted Dir /home/alistair/vmmaker/opensmalltalk-vm/sqvmm.03/My Squeak

RBPatternParser(Object)>>error:
Receiver: a RBPatternParser
Arguments and temporary variables:
aString: 'End of statement list encounted'
Receiver's instance variables:
scanner: a RBPatternScanner
currentToken: RBShortAssignmentToken
nextToken: nil
errorBlock: nil
source: 'state at: `@index put: `@expr asC_unsigned_int'
comments: an OrderedCollection()
pragmas: nil

RBPatternParser(RBParser)>>parserError:
Receiver: a RBPatternParser
Arguments and temporary variables:
aString: 'End of statement list encounted'
Receiver's instance variables:
scanner: a RBPatternScanner
currentToken: RBShortAssignmentToken
nextToken: nil
errorBlock: nil
source: 'state at: `@index put: `@expr asC_unsigned_int'
comments: an OrderedCollection()
pragmas: nil

RBPatternParser(RBParser)>>parseStatementList:into:
Receiver: a RBPatternParser
Arguments and temporary variables:
pragmaBoolean: false
sequenceNode: RBSequenceNode()
statements: an OrderedCollection(RBMessageNode(state at: `@index put:
`@expr as...etc...
return: true
periods: an OrderedCollection()
returnPosition: nil
node: RBMessageNode(state at: `@index put: `@expr asC)
Receiver's instance variables:
scanner: a RBPatternScanner
currentToken: RBShortAssignmentToken
nextToken: nil
errorBlock: nil
source: 'state at: `@index put: `@expr asC_unsigned_int'
comments: an OrderedCollection()
pragmas: nil

RBPatternParser(RBParser)>>parseStatements:
Receiver: a RBPatternParser
Arguments and temporary variables:
pragmaBoolean: false
args: #()
leftBar: nil
rightBar: nil
Receiver's instance variables:
scanner: a RBPatternScanner
currentToken: RBShortAssignmentToken
nextToken: nil
errorBlock: nil
source: 'state at: `@index put: `@expr asC_unsigned_int'
comments: an OrderedCollection()
pragmas: nil

RBPatternParser(RBParser)>>parseExpression:
Receiver: a RBPatternParser
Arguments and temporary variables:
aString: 'state at: `@index put: `@expr asC_unsigned_int'
node: nil
Receiver's instance variables:
scanner: a RBPatternScanner
currentToken: RBShortAssignmentToken
nextToken: nil
errorBlock: nil
source: 'state at: `@index put: `@expr asC_unsigned_int'
comments: an OrderedCollection()
pragmas: nil

RBPatternParser class(RBParser class)>>parseExpression:onError:
Receiver: RBPatternParser
Arguments and temporary variables:
aString: 'state at: `@index put: `@expr asC_unsigned_int'
aBlock: nil
node: nil
parser: a RBPatternParser
Receiver's instance variables:
superclass: RBParser
methodDict: a MethodDictionary(#messageNodeClass->(RBPatternParser>>#messageNod...etc...
format: 65543
instanceVariables: nil
organization: ('private-classes' messageNodeClass methodNodeClass
pragmaNodeClass...etc...
subclasses: nil
name: #RBPatternParser
classPool: nil
sharedPools: nil
environment: Smalltalk
category: #'AST-Core-Parser'

RBParser class>>parseRewriteExpression:onError:
Receiver: RBParser
Arguments and temporary variables:
aString: 'state at: `@index put: `@expr asC_unsigned_int'
aBlock: nil
Receiver's instance variables:
superclass: Object
methodDict: a MethodDictionary(#addCommentsTo:->(RBParser>>#addCommentsTo:
"a CompiledMethod...etc...
format: 65543
instanceVariables: #('scanner' 'currentToken' 'nextToken' 'errorBlock'
'source'...etc...
organization: ('private' addCommentsTo: nextToken
patchLiteralArrayToken patchLiteralMessage...etc...
subclasses: {RBPatternParser}
name: #RBParser
classPool: nil
sharedPools: nil
environment: Smalltalk
category: #'AST-Core-Parser'

RBParser class>>parseRewriteExpression:
Receiver: RBParser
Arguments and temporary variables:
aString: 'state at: `@index put: `@expr asC_unsigned_int'
Receiver's instance variables:
superclass: Object
methodDict: a MethodDictionary(#addCommentsTo:->(RBParser>>#addCommentsTo:
"a CompiledMethod...etc...
format: 65543
instanceVariables: #('scanner' 'currentToken' 'nextToken' 'errorBlock'
'source'...etc...
organization: ('private' addCommentsTo: nextToken
patchLiteralArrayToken patchLiteralMessage...etc...
subclasses: {RBPatternParser}
name: #RBParser
classPool: nil
sharedPools: nil
environment: Smalltalk
category: #'AST-Core-Parser'

RBStringReplaceRule>>replaceString:
Receiver: a RBStringReplaceRule
Arguments and temporary variables:
replaceString: 'state at: `@index put: `@expr asC_unsigned_int'
Receiver's instance variables:
searchTree: RBMessageNode(state at: `@index put: `@expr)
owner: nil
verificationBlock: [closure] in RBStringReplaceRule(RBReplaceRule)>>initialize
replaceTree: nil

RBStringReplaceRule>>searchFor:replaceWith:
Receiver: a RBStringReplaceRule
Arguments and temporary variables:
searchString: 'state at: `@index put: `@expr'
replaceString: 'state at: `@index put: `@expr asC_unsigned_int'
Receiver's instance variables:
searchTree: RBMessageNode(state at: `@index put: `@expr)
owner: nil
verificationBlock: [closure] in RBStringReplaceRule(RBReplaceRule)>>initialize
replaceTree: nil

RBStringReplaceRule class>>searchFor:replaceWith:
Receiver: RBStringReplaceRule
Arguments and temporary variables:
searchString: 'state at: `@index put: `@expr'
replaceString: 'state at: `@index put: `@expr asC_unsigned_int'
Receiver's instance variables:
superclass: RBReplaceRule
methodDict: a MethodDictionary(#foundMatchFor:->(RBStringReplaceRule>>#foundMat...etc...
format: 65540
instanceVariables: #('replaceTree')
organization: ('matching' foundMatchFor:)
('initialize-release' methodReplaceString:...etc...
subclasses: nil
name: #RBStringReplaceRule
classPool: nil
sharedPools: nil
environment: Smalltalk
category: #'AST-Core-Matching'

RBParseTreeRewriter>>replace:with:
Receiver: a RBParseTreeRewriter
Arguments and temporary variables:
searchString: 'state at: `@index put: `@expr'
replaceString: 'state at: `@index put: `@expr asC_unsigned_int'
Receiver's instance variables:
searches: an OrderedCollection()
answer: nil
argumentSearches: an OrderedCollection()
context: a RBSmallDictionary
messages: nil
tree: nil

UndefinedObject>>DoIt
Receiver: nil
Arguments and temporary variables:
rules: a RBParseTreeRewriter
Receiver's instance variables:
nil


--- The full stack ---
RBPatternParser(Object)>>error:
RBPatternParser(RBParser)>>parserError:
RBPatternParser(RBParser)>>parseStatementList:into:
RBPatternParser(RBParser)>>parseStatements:
RBPatternParser(RBParser)>>parseExpression:
RBPatternParser class(RBParser class)>>parseExpression:onError:
RBParser class>>parseRewriteExpression:onError:
RBParser class>>parseRewriteExpression:
RBStringReplaceRule>>replaceString:
RBStringReplaceRule>>searchFor:replaceWith:
RBStringReplaceRule class>>searchFor:replaceWith:
RBParseTreeRewriter>>replace:with:
UndefinedObject>>DoIt


More information about the Squeak-dev mailing list