You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by mo...@apache.org on 2001/11/01 11:53:25 UTC

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

morten      01/11/01 02:53:25

  Modified:    java/src/org/apache/xalan/xsltc/compiler Parser.java
  Log:
  Fix for re-definitions of variables inside templates (in different scopes).
  PR:		bugzilla 3406
  Obtained from:	n/a
  Submitted by:	morten@xml.apache.org
  Reviewed by:	morten@xml.apache.org
  
  Revision  Changes    Path
  1.32      +37 -4     xml-xalan/java/src/org/apache/xalan/xsltc/compiler/Parser.java
  
  Index: Parser.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/Parser.java,v
  retrieving revision 1.31
  retrieving revision 1.32
  diff -u -r1.31 -r1.32
  --- Parser.java	2001/10/31 08:31:56	1.31
  +++ Parser.java	2001/11/01 10:53:25	1.32
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: Parser.java,v 1.31 2001/10/31 08:31:56 morten Exp $
  + * @(#)$Id: Parser.java,v 1.32 2001/11/01 10:53:25 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -167,19 +167,52 @@
       }
   
       public void addVariable(Variable var) {
  -	_variableScope.put(var.getName(), var);
  +	addVariableOrParam(var);
       }
   
       public void addParameter(Param param) {
  -	_variableScope.put(param.getName(), param);
  +	addVariableOrParam(param);
       }
   
  +    private void addVariableOrParam(VariableBase var) {
  +	Object existing = _variableScope.get(var.getName());
  +	if (existing != null) {
  +	    if (existing instanceof Stack) {
  +		Stack stack = (Stack)existing;
  +		stack.push(var);
  +	    }
  +	    else if (existing instanceof VariableBase) {
  +		Stack stack = new Stack();
  +		stack.push(existing);
  +		stack.push(var);
  +		_variableScope.put(var.getName(), stack);
  +	    }
  +	}
  +	else {
  +	    _variableScope.put(var.getName(), var);
  +	}
  +    }
  +
       public void removeVariable(QName name) {
  +	Object existing = _variableScope.get(name);
  +	if (existing instanceof Stack) {
  +	    Stack stack = (Stack)existing;
  +	    if (!stack.isEmpty()) stack.pop();
  +	    if (!stack.isEmpty()) return;
  +	}
   	_variableScope.remove(name);
       }
   
       public VariableBase lookupVariable(QName name) {
  -	return((VariableBase)_variableScope.get(name));
  +	Object existing = _variableScope.get(name);
  +	if (existing instanceof VariableBase) {
  +	    return((VariableBase)existing);
  +	}
  +	else if (existing instanceof Stack) {
  +	    Stack stack = (Stack)existing;
  +	    return((VariableBase)stack.peek());
  +	}
  +	return(null);
       }
   
       public void setXSLTC(XSLTC xsltc) {
  
  
  

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