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);
-- Mailing list: https://launchpad.net/~zorba-coders Post to : zorba-coders@lists.launchpad.net Unsubscribe : https://launchpad.net/~zorba-coders More help : https://help.launchpad.net/ListHelp