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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to