From 08091f76b015a5ec04de273672fc619a6fa9b99d Mon Sep 17 00:00:00 2001 From: Vladimir Prus Date: Wed, 22 Jun 2005 13:17:20 +0000 Subject: [PATCH] Fix 'break' emulation. Inside "for local x in $(list)", changing 'list' does not terminate the loop. [SVN r29732] --- src/build/generators.jam | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/build/generators.jam b/src/build/generators.jam index 90d3d6a94..fc478bfcf 100644 --- a/src/build/generators.jam +++ b/src/build/generators.jam @@ -688,7 +688,7 @@ rule override ( overrider-id : overridee-id ) local rule viable-source-types-real ( target-type ) { local generators ; - + local t = [ type.all-bases $(target-type) ] ; local result ; @@ -700,13 +700,20 @@ local rule viable-source-types-real ( target-type ) local generators = $(.generators.$(t[1])) ; t = $(t[2-]) ; - for local g in $(generators) + + + while $(generators) { + local g = $(generators[1]) ; + generators = $(generators[2-]) ; + if ! [ $(g).source-types ] { # Empty source types -- everything can be accepted result = * ; - generator = ; + # This will terminate this loop. + generators = ; + # This will terminate outer loop. t = ; } @@ -720,7 +727,7 @@ local rule viable-source-types-real ( target-type ) for local n in $(all) { if ! $(n) in $(result) - { + { t += $(n) ; result += $(n) ; }