About the new compiler, Part I
John Brant
brant at refactoryworkers.com
Sun Jan 20 16:34:18 UTC 2008
Paolo Bonzini wrote:
> By the way, his work led to the discovery of a couple of RBParser bugs.
> See http://snipurl.com/1xu6y for a c.l.s post describing them.
I thought I had replied to this, but it appears that I didn't. Anyway,
the problem with both of these rewrites is that you are trying to
replace a cascade message with something that isn't a message. For
example, when you perform the '``@receiver display: ``@object' ->
'``@object' rewrite on the following:
(stream display: z) display: (stream display: x);
display: y; nextPut: $q
It first matches the "(stream display: z) display: (stream display: x)"
expression. It then searches in the ``@receiver and ``@object for more
matches and replaces them so after replacing the subexpressions, we get
"``@receiver = z" and "``@object = x". Now, we return the overall
replacement for the cascaded #display:. In this case we return the "x"
expression. Since this is not a message, we cannot use it in a cascaded
message, so in VW (I don't know about other implementations), we print
an error message to the transcript and we ignore the rewrite for this
node. The error message is "Cannot replace message node inside of
cascaded node with non-message node."
If we allowed this bad replacement, we would essentially be transforming
the code to:
x;
y; nextPut: $q
And this isn't valid Smalltalk code.
John Brant
More information about the Squeak-dev
mailing list
|