morten      01/06/19 03:44:19

  Modified:    java/src/org/apache/xalan/xsltc/compiler ContainsCall.java
                        FunctionCall.java If.java LogicalExpr.java
                        Param.java QName.java StartsWithCall.java
                        SymbolTable.java SyntaxTreeNode.java Template.java
                        Variable.java xpath.cup
               java/src/org/apache/xalan/xsltc/runtime BasisLibrary.java
  Log:
  Fix for function calls used as clauses in logical expressions.
  Submitted by: [EMAIL PROTECTED]
  Reviewed by:  [EMAIL PROTECTED]
  
  Revision  Changes    Path
  1.2       +21 -8     
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/ContainsCall.java
  
  Index: ContainsCall.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/ContainsCall.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- ContainsCall.java 2001/04/17 18:51:24     1.1
  +++ ContainsCall.java 2001/06/19 10:44:09     1.2
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: ContainsCall.java,v 1.1 2001/04/17 18:51:24 sboag Exp $
  + * @(#)$Id: ContainsCall.java,v 1.2 2001/06/19 10:44:09 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -77,28 +77,36 @@
       private Expression _token = null;
   
       /**
  -     *
  +     * Create a contains() call - two arguments, both strings
        */
       public ContainsCall(QName fname, Vector arguments) {
        super(fname, arguments);
       }
   
       /**
  -     *
  +     * This XPath function returns true/false values
        */
  +    public boolean isBoolean() {
  +     return true;
  +    }
  +
  +    /**
  +     * Type check the two parameters for this function
  +     */
       public Type typeCheck(SymbolTable stable) throws TypeCheckError {
  +
        // Check that the function was passed exactly two arguments
        if (argumentCount() != 2) {
  -         ErrorMsg msg = new ErrorMsg("Illegal number of arguments "+
  -                                     "to contains() function");
  -         throw new TypeCheckError(msg);
  +         throw new TypeCheckError(ErrorMsg.FUNRESOL_ERR, getName());
        }
  -     
  +
  +     // The first argument must be a String, or cast to a String
        _base = argument(0);
        Type baseType = _base.typeCheck(stable);        
        if (baseType != Type.String)
            _base = new CastExpr(_base, Type.String);
   
  +     // The second argument must also be a String, or cast to a String
        _token = argument(1);
        Type tokenType = _token.typeCheck(stable);      
        if (tokenType != Type.String)
  @@ -107,12 +115,17 @@
        return _type = Type.Boolean;
       }
   
  -
  +    /**
  +     * Compile the expression - leave boolean expression on stack
  +     */
       public void translate(ClassGenerator classGen, MethodGenerator 
methodGen) {
        translateDesynthesized(classGen, methodGen);
        synthesize(classGen, methodGen);
       }
   
  +    /**
  +     * Compile expression and update true/false-lists
  +     */
       public void translateDesynthesized(ClassGenerator classGen,
                                       MethodGenerator methodGen) {
        final ConstantPoolGen cpg = classGen.getConstantPool();
  
  
  
  1.6       +28 -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.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- FunctionCall.java 2001/06/17 12:23:29     1.5
  +++ FunctionCall.java 2001/06/19 10:44:09     1.6
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: FunctionCall.java,v 1.5 2001/06/17 12:23:29 curcuru Exp $
  + * @(#)$Id: FunctionCall.java,v 1.6 2001/06/19 10:44:09 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -164,6 +164,10 @@
        this(fname, EmptyArgs);
       }
   
  +    public String getName() {
  +     return(_fname.toString());
  +    }
  +
       public void setParser(Parser parser) {
        super.setParser(parser);
        if (_arguments != null) {
  @@ -175,7 +179,7 @@
            }
        }
       }
  -    
  +
       /**
        * Type check a function call. Since different type conversions apply,
        * type checking is different for standard and external (Java) functions.
  @@ -313,8 +317,29 @@
        _arguments.setElementAt(exp, i);
       }
   
  +    /**
  +     * Compile the function call and treat as an expression
  +     * Update true/false-lists.
  +     */
  +    public void translateDesynthesized(ClassGenerator classGen,
  +                                    MethodGenerator methodGen) {
  +
  +     Type type = Type.Boolean;
  +     if (_chosenMethodType != null)
  +         type = _chosenMethodType.resultType();
  +
  +     final InstructionList il = methodGen.getInstructionList();
  +     translate(classGen, methodGen);
  +
  +     if ((type instanceof BooleanType) || (type instanceof IntType)) {
  +         _falseList.add(il.append(new IFEQ(null)));
  +     }
  +    }
  +
  +
       /**
  -     * Translate a function call.
  +     * Translate a function call. The compiled code will leave the function's
  +     * return value on the JVM's stack.
        */
       public void translate(ClassGenerator classGen, MethodGenerator 
methodGen) {
        final int n = argumentCount();
  
  
  
  1.5       +2 -1      
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/If.java
  
  Index: If.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/If.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- If.java   2001/06/11 12:03:32     1.4
  +++ If.java   2001/06/19 10:44:10     1.5
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: If.java,v 1.4 2001/06/11 12:03:32 morten Exp $
  + * @(#)$Id: If.java,v 1.5 2001/06/19 10:44:10 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -134,6 +134,7 @@
        * The contents will be ignored if we know the test will always fail.
        */
       public void translate(ClassGenerator classGen, MethodGenerator 
methodGen) {
  +
        final InstructionList il = methodGen.getInstructionList();
        _test.translateDesynthesized(classGen, methodGen);
        // remember end of condition
  
  
  
  1.6       +11 -18    
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/LogicalExpr.java
  
  Index: LogicalExpr.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/LogicalExpr.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- LogicalExpr.java  2001/06/15 09:57:12     1.5
  +++ LogicalExpr.java  2001/06/19 10:44:10     1.6
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: LogicalExpr.java,v 1.5 2001/06/15 09:57:12 morten Exp $
  + * @(#)$Id: LogicalExpr.java,v 1.6 2001/06/19 10:44:10 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -73,8 +73,9 @@
       public static final int OR  = 0;
       public static final int AND = 1;
        
  -    private final int _op;
  -    private Expression _left, _right;
  +    private final int  _op;     // operator
  +    private Expression _left;   // first operand
  +    private Expression _right;  // second operand
   
       private static final String[] Ops = { "or", "and" };
   
  @@ -131,10 +132,12 @@
        if (haveType != null) {
            // Check if left-hand side operand must be type casted
            Type arg1 = (Type)haveType.argsType().elementAt(0);
  -         if (!arg1.identicalTo(tleft)) _left = new CastExpr(_left, arg1);
  +         if (!arg1.identicalTo(tleft))
  +             _left = new CastExpr(_left, arg1);
            // Check if right-hand side operand must be type casted
            Type arg2 = (Type) haveType.argsType().elementAt(1);
  -         if (!arg2.identicalTo(tright)) _right = new CastExpr(_right, arg1);
  +         if (!arg2.identicalTo(tright))
  +             _right = new CastExpr(_right, arg1);
            // Return the result type for the operator we will use
            return _type = haveType.resultType();
        }
  @@ -163,18 +166,12 @@
   
            // Translate left hand side - must be true
            _left.translateDesynthesized(classGen, methodGen);
  -         if ((_left instanceof FunctionCall) &&
  -             (!(_left instanceof ContainsCall)))
  -             _falseList.add(il.append(new IFEQ(null)));
   
            // Need this for chaining any OR-expression children
            InstructionHandle middle = il.append(NOP);
   
            // Translate left right side - must be true
            _right.translateDesynthesized(classGen, methodGen);
  -         if ((_right instanceof FunctionCall) &&
  -             (!(_right instanceof ContainsCall)))
  -             _falseList.add(il.append(new IFEQ(null)));
   
            // Need this for chaining any OR-expression children
            InstructionHandle after = il.append(NOP);
  @@ -182,7 +179,8 @@
            // Append child expression false-lists to our false-list
            _falseList.append(_right._falseList.append(_left._falseList));
   
  -         // Special case for OR-expression as a left child of AND
  +         // Special case for OR-expression as a left child of AND.
  +         // The true-list of OR must point to second clause of AND.
            if ((_left instanceof LogicalExpr) &&
                (((LogicalExpr)_left).getOp() == OR)) {
                ((LogicalExpr)_left).backPatchTrueList(middle);
  @@ -192,6 +190,7 @@
            }
   
            // Special case for OR-expression as a right child of AND
  +         // The true-list of OR must point to true-list of AND.
            if ((_right instanceof LogicalExpr) &&
                (((LogicalExpr)_right).getOp() == OR)) {
                ((LogicalExpr)_right).backPatchTrueList(after);
  @@ -205,9 +204,6 @@
        else {
            // Translate left-hand side expression and produce true/false list
            _left.translateDesynthesized(classGen, methodGen);
  -         if ((_left instanceof FunctionCall) &&
  -             (!(_left instanceof ContainsCall)))
  -             _falseList.add(il.append(new IFEQ(null)));
   
            // This GOTO is used to skip over the code for the last test
            // in the case where the the first test succeeds
  @@ -215,9 +211,6 @@
   
            // Translate right-hand side expression and produce true/false list
            _right.translateDesynthesized(classGen, methodGen);
  -         if ((_right instanceof FunctionCall) &&
  -             (!(_right instanceof ContainsCall)))
  -             _falseList.add(il.append(new IFEQ(null)));
   
            _left._trueList.backPatch(ih);
            _left._falseList.backPatch(ih.getNext());
  
  
  
  1.5       +4 -3      
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/Param.java
  
  Index: Param.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/Param.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- Param.java        2001/06/07 15:15:56     1.4
  +++ Param.java        2001/06/19 10:44:10     1.5
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: Param.java,v 1.4 2001/06/07 15:15:56 morten Exp $
  + * @(#)$Id: Param.java,v 1.5 2001/06/19 10:44:10 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -145,6 +145,7 @@
   
        if (name.length() > 0) {
            _name = parser.getQName(name);
  +         _name.clearDefaultNamespace();
        }
           else {
            reportError(this, parser, ErrorMsg.NREQATTR_ERR, "name");
  @@ -172,9 +173,9 @@
            //!! check for redef
            parser.getSymbolTable().addParam(this);
        }
  -     else {
  +     else if (parent instanceof Template) {
            _isLocal = true;
  -         parent.addParam(this);
  +         ((Template)parent).hasParams(true);
        }
       }
   
  
  
  
  1.3       +2 -2      
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/QName.java
  
  Index: QName.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/QName.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- QName.java        2001/06/06 10:45:25     1.2
  +++ QName.java        2001/06/19 10:44:11     1.3
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: QName.java,v 1.2 2001/06/06 10:45:25 morten Exp $
  + * @(#)$Id: QName.java,v 1.3 2001/06/19 10:44:11 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -86,7 +86,7 @@
       }
   
       public void clearDefaultNamespace() {
  -     if ((_prefix == null) || (_prefix.equals(""))) {
  +     if ((_prefix == null) || (_prefix.equals(Constants.EMPTYSTRING))) {
            _namespace = null;
            _stringRep = _localname;
            _hashCode  = _stringRep.hashCode() + 19; // cached for speed
  
  
  
  1.2       +41 -3     
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/StartsWithCall.java
  
  Index: StartsWithCall.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/StartsWithCall.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- StartsWithCall.java       2001/04/17 18:51:47     1.1
  +++ StartsWithCall.java       2001/06/19 10:44:11     1.2
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: StartsWithCall.java,v 1.1 2001/04/17 18:51:47 sboag Exp $
  + * @(#)$Id: StartsWithCall.java,v 1.2 2001/06/19 10:44:11 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -58,25 +58,63 @@
    *
    * @author Jacek Ambroziak
    * @author Santiago Pericas-Geertsen
  + * @author Morten Jorgensen
    *
    */
   
   package org.apache.xalan.xsltc.compiler;
   
   import java.util.Vector;
  +
  +import org.apache.xalan.xsltc.compiler.util.Type;
   import de.fub.bytecode.generic.*;
   import org.apache.xalan.xsltc.compiler.util.*;
   
   final class StartsWithCall extends FunctionCall {
  +
  +    private Expression _base = null;
  +    private Expression _token = null;
  +
  +    /**
  +     * Create a starts-with() call - two arguments, both strings
  +     */
       public StartsWithCall(QName fname, Vector arguments) {
        super(fname, arguments);
       }
   
  +    /**
  +     * Type check the two parameters for this function
  +     */
  +    public Type typeCheck(SymbolTable stable) throws TypeCheckError {
  +
  +     // Check that the function was passed exactly two arguments
  +     if (argumentCount() != 2) {
  +         throw new TypeCheckError(ErrorMsg.FUNRESOL_ERR, getName());
  +     }
  +
  +     // The first argument must be a String, or cast to a String
  +     _base = argument(0);
  +     Type baseType = _base.typeCheck(stable);        
  +     if (baseType != Type.String)
  +         _base = new CastExpr(_base, Type.String);
  +
  +     // The second argument must also be a String, or cast to a String
  +     _token = argument(1);
  +     Type tokenType = _token.typeCheck(stable);      
  +     if (tokenType != Type.String)
  +         _token = new CastExpr(_token, Type.String);
  +
  +     return _type = Type.Boolean;
  +    }
  +
  +    /**
  +     * Compile the expression - leave boolean expression on stack
  +     */
       public void translate(ClassGenerator classGen, MethodGenerator 
methodGen) {
        final ConstantPoolGen cpg = classGen.getConstantPool();
        final InstructionList il = methodGen.getInstructionList();
  -     argument(0).translate(classGen, methodGen);
  -     argument(1).translate(classGen, methodGen);
  +     _base.translate(classGen, methodGen);
  +     _token.translate(classGen, methodGen);
        il.append(new INVOKEVIRTUAL(cpg.addMethodref(STRING_CLASS,
                                                     "startsWith", 
                                                     "("+STRING_SIG+")Z")));
  
  
  
  1.4       +5 -2      
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/SymbolTable.java
  
  Index: SymbolTable.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/SymbolTable.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- SymbolTable.java  2001/06/06 10:45:30     1.3
  +++ SymbolTable.java  2001/06/19 10:44:11     1.4
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: SymbolTable.java,v 1.3 2001/06/06 10:45:30 morten Exp $
  + * @(#)$Id: SymbolTable.java,v 1.4 2001/06/19 10:44:11 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -92,10 +92,13 @@
       }
   
       public Template addTemplate(Template template) {
  -     return (Template)_templates.put(template.getName(), template);
  +     final QName name = template.getName();
  +     name.clearDefaultNamespace();
  +     return (Template)_templates.put(name, template);
       }
        
       public Template lookupTemplate(QName name) {
  +     name.clearDefaultNamespace();
        return (Template)_templates.get(name);
       }
   
  
  
  
  1.6       +1 -20     
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/SyntaxTreeNode.java
  
  Index: SyntaxTreeNode.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/SyntaxTreeNode.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- SyntaxTreeNode.java       2001/06/08 15:28:13     1.5
  +++ SyntaxTreeNode.java       2001/06/19 10:44:11     1.6
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: SyntaxTreeNode.java,v 1.5 2001/06/08 15:28:13 morten Exp $
  + * @(#)$Id: SyntaxTreeNode.java,v 1.6 2001/06/19 10:44:11 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -88,11 +88,6 @@
       // Contains all child nodes of this node
       private final Vector   _contents = new Vector(2);
   
  -    // All parameters defined in this AST node
  -    private Vector _params;
  -    // All variables defined in this AST node
  -    private Vector _vars;
  -
       // The QName of this element (contains uri, prefix and localname)
       protected QName      _qname;
       // The attributes (if any) of this element
  @@ -251,20 +246,6 @@
   
       public final XSLTC getXSLTC() {
        return _parser.getXSLTC();
  -    }
  -
  -    //!! are these needed?
  -
  -    public int addParam(Param param) {
  -     if (_params == null) {
  -         _params = new Vector(4);
  -     }
  -     _params.addElement(param);
  -     return _params.size() - 1;
  -    }
  -
  -    public final boolean hasParams() {
  -     return _params != null;
       }
   
       /**
  
  
  
  1.8       +10 -2     
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/Template.java
  
  Index: Template.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/Template.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- Template.java     2001/06/06 17:48:58     1.7
  +++ Template.java     2001/06/19 10:44:12     1.8
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: Template.java,v 1.7 2001/06/06 17:48:58 tmiller Exp $
  + * @(#)$Id: Template.java,v 1.8 2001/06/19 10:44:12 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -92,8 +92,16 @@
        * classes (e.g., predicates, xsl:number, xsl:sort).
        */
       private boolean _hasVariableFrame;
  -
  +    private boolean _hasParams = false;
       private boolean _simplified = false;
  +
  +    public boolean hasParams() {
  +     return _hasParams;
  +    }
  +
  +    public void hasParams(boolean hasParams) {
  +     _hasParams = hasParams;
  +    }
   
       public boolean isSimplified() {
        return(_simplified);
  
  
  
  1.6       +2 -1      
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/Variable.java
  
  Index: Variable.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/Variable.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- Variable.java     2001/06/07 15:16:04     1.5
  +++ Variable.java     2001/06/19 10:44:13     1.6
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: Variable.java,v 1.5 2001/06/07 15:16:04 morten Exp $
  + * @(#)$Id: Variable.java,v 1.6 2001/06/19 10:44:13 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -184,6 +184,7 @@
        final String name = getAttribute("name");
        if (name.length() > 0) {
            _name = parser.getQName(name);
  +         _name.clearDefaultNamespace();
        }
           else {
            reportError(this, parser, ErrorMsg.NREQATTR_ERR, "name");
  
  
  
  1.4       +19 -11    
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/xpath.cup
  
  Index: xpath.cup
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/xpath.cup,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- xpath.cup 2001/06/06 17:48:59     1.3
  +++ xpath.cup 2001/06/19 10:44:13     1.4
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: xpath.cup,v 1.3 2001/06/06 17:48:59 tmiller Exp $
  + * @(#)$Id: xpath.cup,v 1.4 2001/06/19 10:44:13 morten Exp $
    *
    * Copyright 2000 Sun Microsystems, Inc. All Rights Reserved.
    * 
  @@ -181,7 +181,7 @@
   non terminal Object NodeTestPattern, NameTestPattern;
   
   non terminal Vector Predicates, NonemptyArgumentList;
  -non terminal QName QName, FunctionName;
  +non terminal QName QName, FunctionName, VariableName;
   non terminal Integer AxisName, AxisSpecifier;
   non terminal Integer ChildOrAttributeAxisSpecifier;
   
  @@ -579,7 +579,7 @@
        * namespace info in the literal expression. This is used for
        * element-available and function-available functions.
        */
  -     final int index = string.indexOf(':');
  +     final int index = string.lastIndexOf(':');
        final String prefix = index >= 0
                                        ? string.substring(0, index)
                                        : Constants.EMPTYSTRING;
  @@ -607,9 +607,12 @@
           | FunctionCall:fc
           {: RESULT = fc; :};
   
  -VariableReference ::= DOLLAR QName:varName
  +VariableReference ::= DOLLAR VariableName:varName
           {: 
  +            // An empty qname prefix for a variable or parameter reference
  +            // should map to the null namespace and not the default URI.
               SyntaxTreeNode node = parser.lookupName(varName);
  +
               if (node != null) {
                   if (node instanceof Variable) {
                       RESULT = new VariableRef((Variable)node);
  @@ -618,18 +621,17 @@
                       RESULT = new ParameterRef((Param)node);
                   } 
                   else {
  -                    //node.getParser().addFatalError("Cannot resolve 
variable or parameter feference to "+varName);
  -                    node.getParser().reportError(Constants.FATAL,
  -                     new ErrorMsg(
  -                     "Cannot resolve variable or parameter feference to "+
  -                     varName));
  +                    node = null;
                   }
               }
  -            else {
  +
  +            if (node == null) {
  +             System.err.println("looking for var "+varName);
                   RESULT = parser.DummyVarRef;
  -                parser.addError(new ErrorMsg(ErrorMsg.VARUNDEF_ERR, 
  +                parser.addError(new ErrorMsg(ErrorMsg.VARUNDEF_ERR,
                    parser.getLineNumber(), varName));
               }
  +
           :};
   
   FunctionCall ::= FunctionName:fname LPAREN RPAREN
  @@ -770,6 +772,12 @@
           {:
               fname.clearDefaultNamespace();
               RESULT = fname; 
  +        :};
  +
  +VariableName ::= QName:vname
  +        {:
  +            vname.clearDefaultNamespace();
  +            RESULT = vname; 
           :};
   
   Argument ::=    Expr:ex
  
  
  
  1.6       +1 -4      
xml-xalan/java/src/org/apache/xalan/xsltc/runtime/BasisLibrary.java
  
  Index: BasisLibrary.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/runtime/BasisLibrary.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- BasisLibrary.java 2001/06/17 12:23:36     1.5
  +++ BasisLibrary.java 2001/06/19 10:44:18     1.6
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: BasisLibrary.java,v 1.5 2001/06/17 12:23:36 curcuru Exp $
  + * @(#)$Id: BasisLibrary.java,v 1.6 2001/06/19 10:44:18 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -438,14 +438,11 @@
        left.reset();
        
        while ((lnode = left.next()) != NodeIterator.END) {
  -         //System.out.println("lnode = " + lnode);
            final String lvalue = dom.getNodeValue(lnode);
  -         //System.out.println("lvalue = " + lvalue);
            
            int rnode;
            right.reset();
            while ((rnode = right.next()) != NodeIterator.END) {
  -             
                if (compareStrings(lvalue, dom.getNodeValue(rnode), op, dom)) {
                    return true;
                }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to