[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Assignment statement isn't parsing



Thanks, Felix.  I already thought of this.  I looked at the bytecode 
with javap -c and I am absolutely positive that the classfile is right.

Winghong Felix KWOK wrote:

> Hi Nathan,
> 
> My suspicion is that javac is clever enough to notice that A.calc() always
> returns 0, so it eliminates the extra assignment in the bytecode it
> produces. However, it is not clever enough to see whether
> A.calc() causes any side effects, so it kept the call anyway. I suggest
> that you examine the bytecode (in some readable form, say in jasmin) to
> see whether this is indeed what happens.
> 
> Cheers,
> Felix
> 
> On Wed, 27 Feb 2002, Nathan Kitchen wrote:
> 
> 
>>When I run soot with the command line below on the classes generated
>>with the source code below, I do not get the right results.
>>
>>Command line:
>>	java soot.Main -j --soot-classpath .:$JAVA_HOME/jre/lib/rt.jar -p jb
>>use-original-names A
>>(The problem is independent of whether I use the phase option to keep
>>the original names, but the results are easier to read with it.)
>>
>>Source code:
>>
>>public class A {
>>   void run() {
>>     int e = 0;
>>     e =  calc();
>>   }
>>
>>   static int calc() {
>>     return 0;
>>   }
>>}
>>
>>Here is the bad result, A.jimp:
>>
>>public class A extends java.lang.Object
>>{
>>     void run()
>>     {
>>         A r0;
>>         boolean z0;
>>
>>         r0 := @this;
>>         z0 = 0;
>>         A.calc();
>>         return;
>>     }
>>
>>     public void <init>()
>>     {
>>         A r0;
>>
>>         r0 := @this;
>>         specialinvoke r0.<init>();
>>         return;
>>     }
>>}
>>
>>The line "A.calc();" should be "z0 = A.calc();".
>>However, if I make e into a double, so that the value from calc() has to
>>be cast, I get what I should: "$d0 = A.calc(); z0 = (int) $d0;".
>>
>>Does someone know how to fix this?
>>
>>--
>>Nathan Kitchen
>>kitchen@et.byu.edu
>>
>>
> 
> 


-- 
Nathan Kitchen
kitchen@ee.byu.edu