You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by mk...@apache.org on 2003/08/12 22:19:40 UTC

cvs commit: xml-xalan/java/src/org/apache/xalan/xsltc/compiler FunctionCall.java

mkwan       2003/08/12 13:19:40

  Modified:    java/src/org/apache/xalan/xsltc/compiler FunctionCall.java
  Log:
  Fix bytecode generation problem for extension method calls via
  interfaces for bugzilla 22115.
  
  Revision  Changes    Path
  1.30      +12 -3     xml-xalan/java/src/org/apache/xalan/xsltc/compiler/FunctionCall.java
  
  Index: FunctionCall.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/FunctionCall.java,v
  retrieving revision 1.29
  retrieving revision 1.30
  diff -u -r1.29 -r1.30
  --- FunctionCall.java	30 Jan 2003 18:46:00 -0000	1.29
  +++ FunctionCall.java	12 Aug 2003 20:19:40 -0000	1.30
  @@ -75,6 +75,7 @@
   
   import org.apache.bcel.generic.ConstantPoolGen;
   import org.apache.bcel.generic.IFEQ;
  +import org.apache.bcel.generic.INVOKEINTERFACE;
   import org.apache.bcel.generic.INVOKESPECIAL;
   import org.apache.bcel.generic.INVOKESTATIC;
   import org.apache.bcel.generic.INVOKEVIRTUAL;
  @@ -840,11 +841,19 @@
   	    buffer.append(')');
   	    buffer.append(getSignature(_chosenMethod.getReturnType()));
   
  -	    index = cpg.addMethodref(clazz,
  +	    if (_thisArgument != null && _clazz.isInterface()) {
  +	        index = cpg.addInterfaceMethodref(clazz,
  +				     _fname.getLocalPart(),
  +				     buffer.toString());
  +		il.append(new INVOKEINTERFACE(index, n+1));
  +            }
  +            else {
  +	        index = cpg.addMethodref(clazz,
   				     _fname.getLocalPart(),
   				     buffer.toString());
  -	    il.append(_thisArgument != null ? (InvokeInstruction) new INVOKEVIRTUAL(index) :
  +	        il.append(_thisArgument != null ? (InvokeInstruction) new INVOKEVIRTUAL(index) :
   	    		  (InvokeInstruction) new INVOKESTATIC(index));
  +            }
    
   	    // Convert the return type back to our internal type
   	    _type.translateFrom(classGen, methodGen,
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: xalan-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xalan-cvs-help@xml.apache.org