Re: Problem with instrumentation in constructors

Andrew Huntwork <[email protected]>
Newsgroups gmane.comp.jakarta.bcel.user
Message-ID <[email protected]>
First, note my objections to this method given in the thread you 
reference below.

It looks like you're saying below that your current problem is that 
you're getting TargetLostExceptions.  I would propose a slightly 
different idea for getIListSuper that would possibly solve several 
problems:

InstructionHandle getIListSuper(InstructionList il) {
  //do your NEW/INVOKESPECIAL counting here to find the super() call
  return separator;
}

now change insertTryFinally to have this signature:
void insertTryFinally(InstructionList il,InstructionHandle ih) and
pass it separator.  make the beginning of the try / finally be 
separator.  remove this block, since it's no longer necessary:


 > 	if(superList != null){
 >         iList.insert ( iList.getStart (), superList );
 >         }

i wonder how that will work.

Koduru, Rajendra Kumar Reddy wrote:
> Hi All, 
> 	
> 	problem with instrucion list seperation.
> 
> 	I am trying to instrument my constructor as mentioned in
> http://www.mail-archive.com/[email protected]/msg00475.html
> 
> 	could you please let me know, where i am going wrong...
> 	
> 	instrMethod() {
> 
> 	 InstructionList iList = mgen.getInstructionList ();
> // I am getting my instruction list
> 
> 
> 	/* if init, I want to seperate this list into two instruction
> lists, one containing 
> 	until super calls (let us say super list)and other containing
> the iList,without the instructions till super calls
> 	*/
> 
> 	  if ( mgen.getName().equals ( "<init>" ) ){
> 
>         superList = getIListSuper(iList);
> 
>       }
> 
> 	// inserting try finally around the iList
> 	insertTryFinally (iList)
> 	
> 	if(superList != null){
>         iList.insert ( iList.getStart (), superList );
>         } 
> 
> 
> 	return mgen.getMethod ();
> 	}
> 
> 
> 	public InstructionList getIListSuper(InstructionList iList){
>     
>     int invkSpec = 0;
> 
>     InstructionHandle seperator = null;
>    
>     InstructionList superList = iList.copy(); // deep copy
>     
>     for ( Iterator i = superList.iterator (); i.hasNext (); ) {
>       seperator = ( InstructionHandle ) i.next ();
> 
>       if(seperator.getInstruction() instanceof NEW )
>           invkSpec++;
> 
>       if(seperator.getInstruction() instanceof INVOKESPECIAL )
>         invkSpec--;
> 
>       if(invkSpec < 0 )
>         break;
>     }
>     
>     if(invkSpec < 0) {
>     try {
>       superList.delete(seperator.getNext(),iList.getEnd()); 	// i
> collect here the instruction list till the seperator
> 	iList.delete(iList.getStart(), seperator);
> // the iList that should be instrumented. // throwing target lost
> exception
> 
>     } catch ( TargetLostException e ) {				
>      e.printStackTrace();
>     }
>  
>     return superList;
>     }
>   
> 	  return null;
>     }
> 
> 
> 
> 	The problem could be said as seperating an isntruction list into
> two instruction lists based on InstructionHandle
> 	i.e, based on seperator (InstructionHandle), I want to divide
> the incoming instructionList into two parts (one list till super call
> and other staring
> After super() until end)
> 
> 
> 	Please help me in this regard.
> 
> Thank you
> Reddy
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
> 
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.