<div dir="ltr">Hi all:
<div><br></div><div>I have a question on local allocation in jimple body generation, hope someone could kindly shed some light on this.</div><div><br></div><div>For the following source code:</div><div><br></div><div>class TestActivity{</div><div><div> Intent intent;</div><div> public void test7()</div><div> {</div><div> intent = new Intent();</div><div> intent.setClass(this, TestActivity.class);</div><div> startActivity(intent);</div><div> }</div></div><div>}</div><div><br></div><div>The following jimple is generated:</div><div><br></div><div><div> public void test7()</div><div> {</div><div> TestActivity r0;</div><div> android.content.Intent $r1, $r2, $r3;</div><div><br></div><div> r0 := @this: TestActivity;</div><div><br></div><div> $r1 = new android.content.Intent;</div><div><br></div><div> specialinvoke $r1.<android.content.Intent: void <init>()>();</div><div><br></div><div> r0.<TestActivity: android.content.Intent intent> = $r1;</div><div><br></div><div> $r2 = r0.<TestActivity: android.content.Intent intent>; //line 7</div><div><br></div><div> virtualinvoke $r2.<android.content.Intent: void setClass(android.content.Context,java.lang.Class)>(r0, class "TestActivity"); //line 8</div><div><br></div><div> $r3 = r0.<TestActivity: android.content.Intent intent>; //line9</div><div><br></div><div> virtualinvoke r0.<TestActivity: void startActivity(android.content.Intent)>($r3); //line 10</div><div><br></div><div> return;</div><div> }</div></div><div><br></div><div>Why can't line9 and line7 use the same local $r2, but use two locals $r3 and $r2? Aren't them identical?</div><div><br></div><div>If only on local is used, line9 can be omitted and line10 will be virtualinvoke r0.<TestActivity: void startActivity(android.content.Intent)>($r2); </div><div><br></div><div>Thanks for any help on this question!</div></div>