John M McIntosh
johnmci at smalltalkconsulting.com
Thu Jun 8 22:47:37 UTC 2006
This was done on purpose years ago to inline all the variables in the
If you have one accessor and one usage of the variable in another
routine and say not to inline the accessor,
then the inliner won't fold the global into a local variable. Your
code example follows the rules nicely because you've only
one usage of the foo variable we can see and why make it a global...
On 8-Jun-06, at 1:53 PM, Andreas Raab wrote:
> Hi -
> I don't know if this behavior has been in the CCode inliner before
> but I just noticed that the inliner will forcefully convert iVars
> to temps if that iVar is only explicitly referred to in a single
> method. Like, for example here:
> ^self cCode: 'foo'
> Interpreter>>setFoo: fooValue
> foo := fooValue.
> The above will cause the inliner to remove foo from the regular
> interpreter variables (even if declared via #declareCVarsIn:) and
> move it into #setFoo:. With the foreseeable result of creating
> total and utter nonsense in the resulting C code.
> Has anyone seen that before?
> - Andreas
John M. McIntosh <johnmci at smalltalkconsulting.com> 1-800-477-2659
Corporate Smalltalk Consulting Ltd. http://www.smalltalkconsulting.com
More information about the Vm-dev