From 295e3d222ca5da4d2f8faf080265bac175c6f6d1 Mon Sep 17 00:00:00 2001 From: Steven Watanabe Date: Wed, 14 Dec 2011 21:49:34 +0000 Subject: [PATCH] Fix the result of while. [SVN r75945] --- src/engine/function.c | 2 ++ test/core-language/test.jam | 17 +++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/src/engine/function.c b/src/engine/function.c index b871f2c37..e5b4dd4c0 100644 --- a/src/engine/function.c +++ b/src/engine/function.c @@ -2192,6 +2192,8 @@ static void compile_parse( PARSE * parse, compiler * c, int result_location ) int nested_result = result_location == RESULT_NONE? RESULT_NONE : RESULT_RETURN; int test = compile_new_label( c ); int top = compile_new_label( c ); + /* Make sure that we return an empty list if the loop runs zero times. */ + adjust_result( c, RESULT_NONE, nested_result ); /* Jump to the loop test */ compile_emit_branch( c, INSTR_JUMP, test ); compile_set_label( c, top ); diff --git a/test/core-language/test.jam b/test/core-language/test.jam index 6b8b307bb..852d5d98a 100644 --- a/test/core-language/test.jam +++ b/test/core-language/test.jam @@ -1166,6 +1166,23 @@ rule test-rule check-equal while-result : [ test-rule ] : x ; +rule test-rule +{ + local value = 1 2 ; + while $(value) + { + value = $(value[2-]) ; + local inner = $(value) ; + while $(inner) + { + inner = $(inner[2-]) ; + return x ; + } + } +} + +check-equal while-result-2 : [ test-rule ] : ; + } #