You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by sa...@apache.org on 2004/03/16 23:46:03 UTC

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

santiagopg    2004/03/16 14:46:03

  Modified:    java/src/org/apache/xalan/xsltc/compiler FunctionCall.java
  Log:
  Reverting latest patch by Arun. There are some problems with the new code to invoke functions dynamically (e.g. docbook reports a compile-time type check error). The approach taken to determine when to invoke methods dynamically needs to be revisted.
  
  Revision  Changes    Path
  1.39      +2 -71     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.38
  retrieving revision 1.39
  diff -u -r1.38 -r1.39
  --- FunctionCall.java	23 Feb 2004 17:29:35 -0000	1.38
  +++ FunctionCall.java	16 Mar 2004 22:46:03 -0000	1.39
  @@ -37,13 +37,6 @@
   import org.apache.bcel.generic.InvokeInstruction;
   import org.apache.bcel.generic.NEW;
   import org.apache.bcel.generic.PUSH;
  -import org.apache.bcel.generic.LocalVariableGen;
  -import org.apache.bcel.generic.ASTORE;
  -import org.apache.bcel.generic.ANEWARRAY;
  -import org.apache.bcel.generic.ALOAD;
  -import org.apache.bcel.generic.ACONST_NULL;
  -
  -
   import org.apache.xalan.xsltc.compiler.util.BooleanType;
   import org.apache.xalan.xsltc.compiler.util.ClassGenerator;
   import org.apache.xalan.xsltc.compiler.util.ErrorMsg;
  @@ -133,9 +126,6 @@
       // If the java method is static
       private boolean 	  _isStatic = false;
   
  -    // If unable to resolve statically then resolve dynamically
  -    private boolean  resolveDynamic = false;
  -    
       // Legal conversions between internal and Java types.
       private static final MultiHashtable _internal2Java = new MultiHashtable();
   
  @@ -494,14 +484,10 @@
   	}
   
   	if (_type != null) {
  -           return _type;
  +	    return _type;
   	}
  -        else{
  -          resolveDynamic = true;
  -        }  
   
  -        return  _type = (_clazz != null) ? Type.newObjectType(_clazz)
  -                    : Type.newObjectType(_className);
  +	throw new TypeCheckError(ErrorMsg.ARGUMENT_CONVERSION_ERR, getMethodSignature(argsType));
       }
   
   
  @@ -540,11 +526,6 @@
   	  	    && _clazz != null
   	  	    && _clazz.isAssignableFrom(((ObjectType)firstArgType).getJavaClass()))
   	  	    hasThisArgument = true;
  -                else if(firstArgType instanceof ReferenceType){
  -                    resolveDynamic = true;
  -              	    typeCheckArgs(stable);
  -                    return Type.String;
  -                }
   	  	
   	  	if (hasThisArgument) {
   	  	    _thisArgument = (Expression) _arguments.elementAt(0);
  @@ -794,56 +775,6 @@
   				_chosenConstructor.getDeclaringClass());
   	    
   	}
  -	else if(resolveDynamic) {
  -
  -          final LocalVariableGen _local = methodGen.addLocalVariable2("objects",
  -              org.apache.bcel.generic.Type.OBJECT, il.getEnd());
  -
  -          //Create the Object[].
  -          il.append(new PUSH(cpg, n + 1));
  -          il.append(new ANEWARRAY(cpg.addClass(OBJECT_CLASS)));
  -
  -          // Push "this" if it is an instance method
  -          il.append(DUP);
  -          if (_thisArgument != null) {
  -            il.append(new PUSH(cpg, 0));
  -            _thisArgument.translate(classGen, methodGen);
  -          }
  -          //else add null to the Object array
  -          else {
  -            il.append(new PUSH(cpg, 0));
  -            il.append(ACONST_NULL);
  -          }
  -          il.append(AASTORE);
  -
  -          //Add the parameters to Object[]
  -          for (int i = 0; i < n; i++) {
  -            il.append(DUP);
  -            il.append(new PUSH(cpg, i + 1));
  -            Expression exp = argument(i);
  -            exp.translate(classGen, methodGen);
  -            exp.startIterator(classGen, methodGen);
  -            exp.getType().translateTo(classGen, methodGen, Type.Reference);
  -            il.append(AASTORE);
  -          }
  -          il.append(new ASTORE(_local.getIndex()));
  -
  -          //call invoke parameter
  -          String methodName = null;
  -          if (_chosenMethod != null)
  -            methodName = _chosenMethod.getName();
  -          else
  -            methodName = _fname.getLocalPart();
  -
  -          il.append(new PUSH(cpg, _className));
  -          il.append(new PUSH(cpg, methodName));
  -          il.append(new ALOAD(_local.getIndex()));
  -
  -          index = cpg.addMethodref(CALL_FUNCTION_CLASS, INVOKE_METHOD,
  -              "(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;");
  -          il.append(new INVOKESTATIC(index));
  -
  -        }
   	// Invoke function calls that are handled in separate classes
   	else {
   	    final String clazz = _chosenMethod.getDeclaringClass().getName();
  
  
  

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