You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by au...@locus.apache.org on 2000/11/08 15:21:28 UTC
cvs commit: xml-xalan/c/src/XPath XPath.cpp
auriemma 00/11/08 06:21:22
Modified: c/src/XPath XPath.cpp
Log:
Changed the way variable arguments are handled.
Revision Changes Path
1.33 +25 -26 xml-xalan/c/src/XPath/XPath.cpp
Index: XPath.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XPath/XPath.cpp,v
retrieving revision 1.32
retrieving revision 1.33
diff -u -r1.32 -r1.33
--- XPath.cpp 2000/11/06 19:33:42 1.32
+++ XPath.cpp 2000/11/08 14:21:05 1.33
@@ -1335,12 +1335,9 @@
opPos++;
typedef XPathExecutionContext::XObjectArgVectorType XObjectArgVectorType;
- typedef XPathExecutionContext::PushPopArgVector PushPopArgVector;
- PushPopArgVector thePushPop(executionContext);
+ XObjectArgVectorType args;
- XObjectArgVectorType& args = thePushPop.getVector();
-
while(opPos < endExtFunc)
{
const int nextOpPos = m_expression.getNextOpCodePosition(opPos);
@@ -1391,6 +1388,8 @@
int opPos,
XPathExecutionContext& executionContext) const
{
+ const XObject* theResult = 0;
+
const int endFunc = opPos + m_expression.m_opMap[opPos + 1] - 1;
opPos += 2;
@@ -1412,7 +1411,7 @@
{
assert(opPos == endFunc);
- return s_functions[funcID].execute(executionContext, context);
+ theResult = s_functions[funcID].execute(executionContext, context);
}
else if (argCount == 1)
{
@@ -1424,7 +1423,7 @@
assert(opPos == endFunc);
- return s_functions[funcID].execute(executionContext, context, theArg.get());
+ theResult = s_functions[funcID].execute(executionContext, context, theArg.get());
}
else if (argCount == 2)
{
@@ -1442,7 +1441,7 @@
assert(opPos == endFunc);
- return s_functions[funcID].execute(executionContext, context, theArg1.get(), theArg2.get());
+ theResult = s_functions[funcID].execute(executionContext, context, theArg1.get(), theArg2.get());
}
else if (argCount == 3)
{
@@ -1467,34 +1466,34 @@
assert(opPos == endFunc);
- return s_functions[funcID].execute(executionContext, context, theArg1.get(), theArg2.get(), theArg3.get());
+ theResult = s_functions[funcID].execute(executionContext, context, theArg1.get(), theArg2.get(), theArg3.get());
}
+ else
+ {
+ typedef XPathExecutionContext::XObjectArgVectorType XObjectArgVectorType;
- typedef XPathExecutionContext::XObjectArgVectorType XObjectArgVectorType;
- typedef XPathExecutionContext::PushPopArgVector PushPopArgVector;
+ XObjectArgVectorType args;
- PushPopArgVector thePushPop(executionContext);
+ args.reserve(argCount);
- XObjectArgVectorType& args = thePushPop.getVector();
+ while(opPos < endFunc)
+ {
+ const int nextOpPos = m_expression.getNextOpCodePosition(opPos);
- while(opPos < endFunc)
- {
- const int nextOpPos = m_expression.getNextOpCodePosition(opPos);
+ args.push_back(executeMore(context, opPos, executionContext));
- args.push_back(executeMore(context, opPos, executionContext));
+ opPos = nextOpPos;
+ }
- opPos = nextOpPos;
- }
+ theResult = function(context, opPos, funcID, args, executionContext);
- const XObject* const theResult =
- function(context, opPos, funcID, args, executionContext);
+ // Return the args...
+ while(args.size() > 0)
+ {
+ theFactory.returnObject(args.back());
- // Return the args...
- while(args.size() > 0)
- {
- theFactory.returnObject(args.back());
-
- args.pop_back();
+ args.pop_back();
+ }
}
return theResult;