You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by db...@apache.org on 2003/08/04 08:35:34 UTC

cvs commit: xml-xalan/c/src/xalanc/XSLT ElemApplyTemplates.cpp ElemCallTemplate.cpp StylesheetExecutionContext.cpp StylesheetExecutionContext.hpp StylesheetExecutionContextDefault.cpp StylesheetExecutionContextDefault.hpp VariablesStack.cpp VariablesStack.hpp

dbertoni    2003/08/03 23:35:34

  Modified:    c/src/xalanc/XSLT ElemApplyTemplates.cpp
                        ElemCallTemplate.cpp StylesheetExecutionContext.cpp
                        StylesheetExecutionContext.hpp
                        StylesheetExecutionContextDefault.cpp
                        StylesheetExecutionContextDefault.hpp
                        VariablesStack.cpp VariablesStack.hpp
  Log:
  More params cleanup.
  
  Revision  Changes    Path
  1.3       +1 -2      xml-xalan/c/src/xalanc/XSLT/ElemApplyTemplates.cpp
  
  Index: ElemApplyTemplates.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/xalanc/XSLT/ElemApplyTemplates.cpp,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ElemApplyTemplates.cpp	2 Aug 2003 01:07:48 -0000	1.2
  +++ ElemApplyTemplates.cpp	4 Aug 2003 06:35:33 -0000	1.3
  @@ -219,10 +219,9 @@
   	// Push the params & stack frame, but then execute the select
   	// expression inside transformSelectedChildren, which must be
   	// executed in the stack frame before the new stack frame.
  -	StylesheetExecutionContext::ParamsPushPop	thePushPop(
  +	const StylesheetExecutionContext::ParamsPushPop		thePushPop(
   			executionContext,
   			*this,
  -			this,
   			savedStackFrameIndex);
   
   	const XalanQName* const		currentMode = executionContext.getCurrentMode();
  
  
  
  1.3       +2 -3      xml-xalan/c/src/xalanc/XSLT/ElemCallTemplate.cpp
  
  Index: ElemCallTemplate.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/xalanc/XSLT/ElemCallTemplate.cpp,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ElemCallTemplate.cpp	2 Aug 2003 01:07:48 -0000	1.2
  +++ ElemCallTemplate.cpp	4 Aug 2003 06:35:33 -0000	1.3
  @@ -155,10 +155,9 @@
   
   	assert(m_template != 0);
   
  -	StylesheetExecutionContext::ParamsPushPop	thePushPop(
  +	const StylesheetExecutionContext::ParamsPushPop		thePushPop(
   				executionContext,
  -				*this,			
  -				m_template);
  +				*this);
   
   	m_template->execute(executionContext);
   }
  
  
  
  1.3       +3 -10     xml-xalan/c/src/xalanc/XSLT/StylesheetExecutionContext.cpp
  
  Index: StylesheetExecutionContext.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/xalanc/XSLT/StylesheetExecutionContext.cpp,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- StylesheetExecutionContext.cpp	2 Aug 2003 01:07:48 -0000	1.2
  +++ StylesheetExecutionContext.cpp	4 Aug 2003 06:35:33 -0000	1.3
  @@ -86,30 +86,23 @@
   
   StylesheetExecutionContext::ParamsPushPop::doPush(
   			const ElemTemplateElement&		xslCallTemplateElement,
  -			const ElemTemplateElement*		targetTemplate,
   			int								savedStackFrameIndex)
   {
   	if (xslCallTemplateElement.hasParams() == true)
   	{
   		getExecutionContext().setCurrentStackFrameIndex(savedStackFrameIndex);
   
  -		getExecutionContext().pushParams(
  -					xslCallTemplateElement,
  -					targetTemplate);
  +		getExecutionContext().pushParams(xslCallTemplateElement);
   	}
   }
   
   
   
  -StylesheetExecutionContext::ParamsPushPop::doPush(
  -			const ElemTemplateElement&		xslCallTemplateElement,
  -			const ElemTemplateElement*		targetTemplate)
  +StylesheetExecutionContext::ParamsPushPop::doPush(const ElemTemplateElement&	xslCallTemplateElement)
   {
   	if (xslCallTemplateElement.hasParams() == true)
   	{
  -		getExecutionContext().pushParams(
  -					xslCallTemplateElement,
  -					targetTemplate);
  +		getExecutionContext().pushParams(xslCallTemplateElement);
   	}
   }
   
  
  
  
  1.6       +4 -15     xml-xalan/c/src/xalanc/XSLT/StylesheetExecutionContext.hpp
  
  Index: StylesheetExecutionContext.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/xalanc/XSLT/StylesheetExecutionContext.hpp,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- StylesheetExecutionContext.hpp	2 Aug 2003 01:07:48 -0000	1.5
  +++ StylesheetExecutionContext.hpp	4 Aug 2003 06:35:33 -0000	1.6
  @@ -892,12 +892,9 @@
   	 * Also, push default arguments on the stack.
   	 *
   	 * @param xslCallTemplateElement "call-template" element
  -	 * @param targetTemplate         target template
   	 */
   	virtual	void
  -	pushParams(
  -			const ElemTemplateElement&	xslCallTemplateElement,
  -			const ElemTemplateElement*	targetTemplate) = 0;
  +	pushParams(const ElemTemplateElement&	xslCallTemplateElement) = 0;
   
   	/**
   	 * Given a name, return a string representing the value, but don't look in
  @@ -1014,25 +1011,20 @@
   
   		ParamsPushPop(
   				StylesheetExecutionContext&		executionContext,
  -				const ElemTemplateElement&		xslCallTemplateElement,
  -				const ElemTemplateElement*		targetTemplate) :
  +				const ElemTemplateElement&		xslCallTemplateElement) :
   			PushAndPopContextMarker(executionContext)
   		{
  -			doPush(
  -				xslCallTemplateElement,
  -				targetTemplate);
  +			doPush(xslCallTemplateElement);
   		}
   
   		ParamsPushPop(
   				StylesheetExecutionContext&		executionContext,
   				const ElemTemplateElement&		xslCallTemplateElement,
  -				const ElemTemplateElement*		targetTemplate,
   				int&							savedStackFrameIndex) :
   			PushAndPopContextMarker(executionContext, savedStackFrameIndex)
   		{
   			doPush(
   				xslCallTemplateElement,
  -				targetTemplate,
   				savedStackFrameIndex);
   		}
   
  @@ -1044,12 +1036,9 @@
   
   		doPush(
   			const ElemTemplateElement&		xslCallTemplateElement,
  -			const ElemTemplateElement*		targetTemplate,
   			int								stackFrameIndex);
   
  -		doPush(
  -			const ElemTemplateElement&		xslCallTemplateElement,
  -			const ElemTemplateElement*		targetTemplate);
  +		doPush(const ElemTemplateElement&	xslCallTemplateElement);
   	};
   
   	/**
  
  
  
  1.7       +3 -9      xml-xalan/c/src/xalanc/XSLT/StylesheetExecutionContextDefault.cpp
  
  Index: StylesheetExecutionContextDefault.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/xalanc/XSLT/StylesheetExecutionContextDefault.cpp,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- StylesheetExecutionContextDefault.cpp	2 Aug 2003 01:07:48 -0000	1.6
  +++ StylesheetExecutionContextDefault.cpp	4 Aug 2003 06:35:33 -0000	1.7
  @@ -785,9 +785,7 @@
   
   
   void
  -StylesheetExecutionContextDefault::pushParams(
  -			const ElemTemplateElement&	xslCallTemplateElement,
  -			const ElemTemplateElement*	targetTemplate)
  +StylesheetExecutionContextDefault::pushParams(const ElemTemplateElement&	xslCallTemplateElement)
   {
   	// We have a params vector that we reuse, but occasionally, a
   	// param will result in recursive execution, so we'll use a
  @@ -807,9 +805,7 @@
   
   		getParams(xslCallTemplateElement, m_paramsVector);
   
  -		m_variablesStack.pushParams(
  -					m_paramsVector,
  -					targetTemplate);
  +		m_variablesStack.pushParams(m_paramsVector);
   	}
   	else
   	{
  @@ -817,9 +813,7 @@
   
   		getParams(xslCallTemplateElement, tempParams);
   
  -		m_variablesStack.pushParams(
  -					tempParams,
  -					targetTemplate);
  +		m_variablesStack.pushParams(tempParams);
   	}
   }
   
  
  
  
  1.6       +1 -3      xml-xalan/c/src/xalanc/XSLT/StylesheetExecutionContextDefault.hpp
  
  Index: StylesheetExecutionContextDefault.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/xalanc/XSLT/StylesheetExecutionContextDefault.hpp,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- StylesheetExecutionContextDefault.hpp	2 Aug 2003 01:07:48 -0000	1.5
  +++ StylesheetExecutionContextDefault.hpp	4 Aug 2003 06:35:33 -0000	1.6
  @@ -497,9 +497,7 @@
   	clearTopLevelParams();
   
   	virtual	void
  -	pushParams(
  -			const ElemTemplateElement&	xslCallTemplateElement,
  -			const ElemTemplateElement*	targetTemplate);
  +	pushParams(const ElemTemplateElement&	xslCallTemplateElement);
   
   	virtual const XObjectPtr
   	getParamVariable(const XalanQName&	theName);
  
  
  
  1.3       +30 -76    xml-xalan/c/src/xalanc/XSLT/VariablesStack.cpp
  
  Index: VariablesStack.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/xalanc/XSLT/VariablesStack.cpp,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- VariablesStack.cpp	2 Aug 2003 01:07:48 -0000	1.2
  +++ VariablesStack.cpp	4 Aug 2003 06:35:33 -0000	1.3
  @@ -150,92 +150,31 @@
   void
   VariablesStack::popContextMarker()
   {
  -	const VariableStackStackType::size_type		nElems = m_stack.size();
  +	VariableStackStackType::iterator	i = m_stack.end();
   
  -	VariableStackStackType::size_type i = nElems;
  -
  -	for(; i > 0; --i)
  +	for(; ;)
   	{
  -		assert(i >= m_stack.size());
  +		assert(i != m_stack.begin());
   
  -		const StackEntry&			theEntry = m_stack[i - 1];
  +		const StackEntry&			theEntry = *--i;
   		assert(theEntry == back());
   
   		const StackEntry::eType		type = theEntry.getType();
   		assert(type < StackEntry::eNextValue && type >= 0);
   
  -#if !defined(NDEBUG)
  -		const ElemTemplateElement* const	theElement =
  -			theEntry.getElement();
  -#endif
  -
   		pop();
   
   		if (type == StackEntry::eContextMarker)
   		{
   			break;
   		}
  -#if !defined(NDEBUG)
  -		else if (type == StackEntry::eElementFrameMarker)
  -		{
  -			if (m_elementFrameStack.empty() == true)
  -			{
  -				throw InvalidStackContextException();
  -			}
  -
  -			const ElemTemplateElement* const	theStackBack =
  -				m_elementFrameStack.back();
  -
  -			m_elementFrameStack.pop_back();
  -
  -			if (theElement != theStackBack)
  -			{
  -				throw InvalidStackContextException();
  -			}
  -		}
  -#endif
   	}
   
  -	assert(m_stack.size() == i - 1);
  -
  -	m_currentStackFrameIndex = i - 1;
  +	m_currentStackFrameIndex = m_stack.size();
   }
   
   
   
  -class CommitPushElementFrame
  -{
  -public:
  -
  -	CommitPushElementFrame(
  -			VariablesStack&								theVariableStack,
  -			const ElemTemplateElement*					targetTemplate) :
  -		m_variableStack(&theVariableStack)
  -	{
  -		theVariableStack.pushElementFrame(targetTemplate);
  -	}
  -
  -	~CommitPushElementFrame()
  -	{
  -		if (m_variableStack != 0)
  -		{
  -			m_variableStack->popElementFrame();
  -		}
  -	}
  -
  -	void
  -	commit()
  -	{
  -		m_variableStack = 0;
  -	}
  -
  -private:
  -
  -	VariablesStack*						m_variableStack;
  -};
  -
  -
  -
   void
   VariablesStack::push(const StackEntry&	theEntry)
   {
  @@ -294,20 +233,35 @@
   
   
   
  +VariablesStack::CommitPushParams::CommitPushParams(VariablesStack&	theVariablesStack) :
  +	m_variablesStack(&theVariablesStack),
  +	m_stackSize(theVariablesStack.getStackSize())
  +{
  +}
  +
  +
  +
  +VariablesStack::CommitPushParams::~CommitPushParams()
  +{
  +	if (m_variablesStack != 0)
  +	{
  +		while(m_variablesStack->getStackSize() > m_stackSize)
  +		{
  +			m_variablesStack->pop();
  +		}
  +	}
  +}
  +
  +
  +
   void
  -VariablesStack::pushParams(
  -			const ParamsVectorType&		theParams,
  -			const ElemTemplateElement*	targetTemplate)
  +VariablesStack::pushParams(const ParamsVectorType&	theParams)
   {
  -	// This object will push an element marker, and pop it
  +	// This object will push the params and pop them
   	// if we don't call it's commit() member function.  So
   	// if an exception is thrown while transferring the
  -	// parameters, the element marker will be popped.
  -	// This keeps the stack in a consistent state.
  -	// It will also delete things left in the temp stack
  -	// as well.
  -	CommitPushElementFrame		thePusher(*this,
  -										  targetTemplate);
  +	// parameters, the stack stays in a consistent state.
  +	CommitPushParams	thePusher(*this);
   
   	XALAN_USING_STD(for_each)
   
  
  
  
  1.3       +32 -4     xml-xalan/c/src/xalanc/XSLT/VariablesStack.hpp
  
  Index: VariablesStack.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/xalanc/XSLT/VariablesStack.hpp,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- VariablesStack.hpp	2 Aug 2003 01:07:48 -0000	1.2
  +++ VariablesStack.hpp	4 Aug 2003 06:35:33 -0000	1.3
  @@ -193,12 +193,9 @@
   	 * popContextMarker() when you are done with the arguments.
   	 *
   	 * @param theParam The vector containing the parameters.
  -	 * @param targetTemplate target template for the parameters
   	 */
   	void
  -	pushParams(
  -			const ParamsVectorType&		theParams,
  -			const ElemTemplateElement*	targetTemplate);
  +	pushParams(const ParamsVectorType&	theParams);
   
   	/**
   	 * Given a name, return a string representing the value, but don't look
  @@ -513,9 +510,40 @@
   	typedef std::vector<StackEntry>		VariableStackStackType;
   #endif
   
  +	typedef VariableStackStackType::size_type	size_type;
  +
  +	size_type
  +	getStackSize() const
  +	{
  +		return m_stack.size();
  +	}
  +
   	enum { eDefaultStackSize = 100 };
   
   private:
  +
  +	class CommitPushParams
  +	{
  +	public:
  +
  +		CommitPushParams(VariablesStack&	theVariablesStack);
  +
  +		~CommitPushParams();
  +
  +		void
  +		commit()
  +		{
  +			m_variablesStack = 0;
  +		}
  +
  +	private:
  +
  +		VariablesStack*		m_variablesStack;
  +
  +		size_type			m_stackSize;
  +	};
  +
  +	friend class CommitPushParams;
   
   	/**
   	 * Check to see if an element frame for the particular element has already
  
  
  

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