[Soot-list] How to get the type of locals in a FlowAnalysis?
Jochen Wuttke
wuttkej at usi.ch
Wed Jun 23 05:39:21 EDT 2010
Thanks Eric,
that does indeed work.
Jochen
On Jun 23, 2010, at 11:18 AM, Eric Bodden wrote:
> Hi Jochen.
>
> The problem is that in bytecode different primitive type are mangled
> together: byte, short, boolean and int all become int in bytecode.
> Soot therefore includes a special range analysis that attempts to
> re-construct the best, i.e. most narrow type possible. Sometimes this
> analysis may be too good and give you a type that is more narrow than
> the one that was in the original source code.
>
> Would it be possible for you to analyze the program's source code,
> instead of the bytecode? I am reasonably sure that in this case Soot
> will just use the exact types that it finds in the source.
>
> Eric
>
> P.S. Sorry but I know nothing about the AST metrics.
>
> --
> Dr. Eric Bodden
> Software Technology Group, Technische Universität Darmstadt, Germany
> Tel: +49 6151 16-5478 Fax: +49 6151 16-5410
> Mailing Address: S2|02 A209, Hochschulstraße 10, 64289 Darmstadt
>
>
>
> On 23 June 2010 10:03, Jochen Wuttke <wuttkej at usi.ch> wrote:
>> Hi,
>>
>> I'm trying to build a very simple analysis that effectively counts
>> the
>> number and type of local variables occurring in a method.
>> I tried to use the normal ExceptionalUnitGraph to extract this
>> information. However, when I run the analysis on the following
>> method,
>> the variable 'x' is reported to have type 'byte', not 'int'. Guessing
>> from the documentation of some of the phase options to Soot, it looks
>> like the standard type assigner does not care about the declared type
>> of locals, but tries to infer the minimum size the actually values
>> fit
>> in. So in my case, byte rather than int, because I only assign a
>> small
>> numeric value.
>>
>> After digging a little in the API of Soot I saw that there is a
>> package soot.tootlkits.astmetrics that seems to contain a bunch of
>> things working on the AST provided by Polyglot. Is there a way that I
>> can hook up my own AST metric and run it together with the others? I
>> guess that could solve my problem?
>>
>> Thanks for any advice,
>> Jochen
>>
>>
>> public void hasOnlyPrimitives() {
>> int x = 9;
>> long y = 0;
>> x++;
>> y += x;
>> }
>>
>> _______________________________________________
>> Soot-list mailing list
>> Soot-list at sable.mcgill.ca
>> http://mailman.cs.mcgill.ca/mailman/listinfo/soot-list
>>
More information about the Soot-list
mailing list