You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@groovy.apache.org by Wolfgang Pedot <wo...@finkzeit.at> on 2015/07/29 10:40:11 UTC
AST transformation to modify variable names
Hello,
I have the following Scenario:
OSGI-based application with embedded GroovyScriptEngines, lots of
small(ish) scripts which use variables from the Binding.
All those Binding-Variables are written in uppercase (like constants) to
distinguish them from locally used variables in the script.
While looking into recent increases in compile-time for the scripts I
learned that those uppercase variable names are part of the problem
because they cause a lot of undesired class-lookups.
Modifying all the existing scripts would be a giant pain so I thought
there might be a way to do this using an AST transformation, what I
would like to do is something like adding a lower-case prefix to all
uppercase-variables but I cant seem to find the right angle.
Any hints/ideas? Most of the variable-names are known, but some are not.
regards
Wolfgang Pedot
Re: AST transformation to modify variable names
Posted by Wolfgang Pedot <wo...@finkzeit.at>.
Great tip, thanks a lot!
Looking at that code I was able to cook up something that actually works
in a pretty demanding test-case and doing the transformation in the
CONVERSION phase actually got rid of all the class-lookups.
This currently reduces script-compilation time by a factor of 2-3 and
also greatly reduces the amount of RAM allocated. I still have to figure
out a second problem but this helps a lot!
Thanks again
Wolfgang
Am 29.07.2015 21:59, schrieb Shil Sinha:
> Have you looked at VariableAccessReplacer and its related classes
> in org.codehaus.groovy.transform.tailrec? They might not fit your use
> case as is, but you could probably modify them to do what you want.
>
> On Wed, Jul 29, 2015 at 4:40 AM, Wolfgang Pedot
> <wolfgang.pedot@finkzeit.at <ma...@finkzeit.at>> wrote:
>
> Hello,
>
> I have the following Scenario:
>
> OSGI-based application with embedded GroovyScriptEngines, lots of
> small(ish) scripts which use variables from the Binding.
> All those Binding-Variables are written in uppercase (like
> constants) to distinguish them from locally used variables in the
> script.
> While looking into recent increases in compile-time for the
> scripts I learned that those uppercase variable names are part of
> the problem because they cause a lot of undesired class-lookups.
> Modifying all the existing scripts would be a giant pain so I
> thought there might be a way to do this using an AST
> transformation, what I would like to do is something like adding a
> lower-case prefix to all uppercase-variables but I cant seem to
> find the right angle.
> Any hints/ideas? Most of the variable-names are known, but some
> are not.
>
> regards
> Wolfgang Pedot
>
>
Re: AST transformation to modify variable names
Posted by Shil Sinha <sh...@gmail.com>.
Have you looked at VariableAccessReplacer and its related classes
in org.codehaus.groovy.transform.tailrec? They might not fit your use case
as is, but you could probably modify them to do what you want.
On Wed, Jul 29, 2015 at 4:40 AM, Wolfgang Pedot <wo...@finkzeit.at>
wrote:
> Hello,
>
> I have the following Scenario:
>
> OSGI-based application with embedded GroovyScriptEngines, lots of
> small(ish) scripts which use variables from the Binding.
> All those Binding-Variables are written in uppercase (like constants) to
> distinguish them from locally used variables in the script.
> While looking into recent increases in compile-time for the scripts I
> learned that those uppercase variable names are part of the problem because
> they cause a lot of undesired class-lookups.
> Modifying all the existing scripts would be a giant pain so I thought
> there might be a way to do this using an AST transformation, what I would
> like to do is something like adding a lower-case prefix to all
> uppercase-variables but I cant seem to find the right angle.
> Any hints/ideas? Most of the variable-names are known, but some are not.
>
> regards
> Wolfgang Pedot
>
>