zorba-coders team mailing list archive
-
zorba-coders team
-
Mailing list archive
-
Message #03621
[Merge] lp:~zorba-coders/zorba/markos-scratch into lp:zorba
Markos Zaharioudakis has proposed merging lp:~zorba-coders/zorba/markos-scratch into lp:zorba.
Requested reviews:
Markos Zaharioudakis (markos-za)
For more details, see:
https://code.launchpad.net/~zorba-coders/zorba/markos-scratch/+merge/88588
fixed bug in detecting mutually recursive functions
--
https://code.launchpad.net/~zorba-coders/zorba/markos-scratch/+merge/88588
Your team Zorba Coders is subscribed to branch lp:zorba.
=== modified file 'src/compiler/rewriter/tools/udf_graph.cpp'
--- src/compiler/rewriter/tools/udf_graph.cpp 2011-10-03 09:18:49 +0000
+++ src/compiler/rewriter/tools/udf_graph.cpp 2012-01-14 22:06:25 +0000
@@ -114,7 +114,9 @@
if (udf != NULL)
{
- if (std::find(callChain.begin(), callChain.end(), udf) == callChain.end())
+ std::vector<user_function*>::const_iterator cycle;
+
+ if ((cycle = std::find(callChain.begin(), callChain.end(), udf)) == callChain.end())
{
bool found = theNodes.exists(udf);
@@ -134,11 +136,11 @@
else
{
// A recursive function call.
- std::vector<user_function*>::const_iterator ite = callChain.begin();
+ std::vector<user_function*>::const_iterator ite = cycle;
std::vector<user_function*>::const_iterator end = callChain.end();
- for (++ite; ite != end; ++ite)
+ for (; ite != end; ++ite)
{
- (*ite)->addMutuallyRecursiveUDFs(callChain);
+ (*ite)->addMutuallyRecursiveUDFs(callChain, cycle);
}
}
}
=== modified file 'src/functions/udf.cpp'
--- src/functions/udf.cpp 2012-01-11 17:30:25 +0000
+++ src/functions/udf.cpp 2012-01-14 22:06:25 +0000
@@ -240,10 +240,12 @@
/*******************************************************************************
********************************************************************************/
-void user_function::addMutuallyRecursiveUDFs(const std::vector<user_function*>& udfs)
+void user_function::addMutuallyRecursiveUDFs(
+ const std::vector<user_function*>& udfs,
+ const std::vector<user_function*>::const_iterator& cycle)
{
theMutuallyRecursiveUDFs.insert(theMutuallyRecursiveUDFs.end(),
- udfs.begin() + 1,
+ cycle,
udfs.end());
}
=== modified file 'src/functions/udf.h'
--- src/functions/udf.h 2012-01-11 17:30:25 +0000
+++ src/functions/udf.h 2012-01-14 22:06:25 +0000
@@ -173,7 +173,9 @@
bool isOptimized() const { return theIsOptimized; }
- void addMutuallyRecursiveUDFs(const std::vector<user_function*>& udfs);
+ void addMutuallyRecursiveUDFs(
+ const std::vector<user_function*>& udfs,
+ const std::vector<user_function*>::const_iterator& cycle);
bool isMutuallyRecursiveWith(const user_function* udf);
Follow ups