set *find_helper.result if a child object was found

This commit is contained in:
Tomasz Sowa 2021-11-09 00:23:43 +01:00
parent ac66a6649d
commit 7caddeedbf
1 changed files with 21 additions and 10 deletions

View File

@ -1881,6 +1881,9 @@ void Generator<StreamType, is_pikotools_stream, is_autoescape_stream>::EvaluateV
find_helper.current_var = find_helper.previous_var->find_child(name); find_helper.current_var = find_helper.previous_var->find_child(name);
find_helper.found = (find_helper.current_var != nullptr); find_helper.found = (find_helper.current_var != nullptr);
was_child_found = (find_helper.current_var != nullptr); was_child_found = (find_helper.current_var != nullptr);
if( find_helper.current_var )
*find_helper.result = *find_helper.current_var;
} }
if( !find_helper.found && find_helper.previous_name && find_helper.previous_result && if( !find_helper.found && find_helper.previous_name && find_helper.previous_result &&
@ -1904,22 +1907,15 @@ void Generator<StreamType, is_pikotools_stream, is_autoescape_stream>::EvaluateV
EvaluateFunction(find_helper.current_var->user_function, find_helper); EvaluateFunction(find_helper.current_var->user_function, find_helper);
} }
else else
if( find_helper.current_var->type == Var<StreamType>::TYPE_MODEL_CONTAINER_WRAPPER && find_helper.current_var->model_container_wrapper )
{
if( find_helper.is_last_field() && is_generating_for )
{
find_helper.current_var->model_container_wrapper->increment_iterator();
find_helper.current_var->clear_childs();
}
}
else
if( find_helper.current_var->type == Var<StreamType>::TYPE_SPACE_WRAPPER && find_helper.current_var->space_wrapper ) if( find_helper.current_var->type == Var<StreamType>::TYPE_SPACE_WRAPPER && find_helper.current_var->space_wrapper )
{ {
// move me below (where TYPE_MODEL_CONTAINER_WRAPPER is used)
find_helper.found = CallSpace(*find_helper.current_var->space_wrapper, find_helper); find_helper.found = CallSpace(*find_helper.current_var->space_wrapper, find_helper);
} }
else else
if( find_helper.current_var->type == Var<StreamType>::TYPE_DATE && find_helper.current_var->date ) if( find_helper.current_var->type == Var<StreamType>::TYPE_DATE && find_helper.current_var->date )
{ {
// move me below (where TYPE_MODEL_CONTAINER_WRAPPER is used)
if( find_helper.is_last_field() ) if( find_helper.is_last_field() )
PrintDate(*find_helper.current_var->date, find_helper); PrintDate(*find_helper.current_var->date, find_helper);
} }
@ -1933,6 +1929,17 @@ void Generator<StreamType, is_pikotools_stream, is_autoescape_stream>::EvaluateV
find_helper.result->type = Var<StreamType>::Type::TYPE_STREAM; find_helper.result->type = Var<StreamType>::Type::TYPE_STREAM;
} }
if( find_helper.result->type == Var<StreamType>::TYPE_MODEL_CONTAINER_WRAPPER && find_helper.result->model_container_wrapper )
{
if( find_helper.is_last_field() && is_generating_for )
{
find_helper.result->model_container_wrapper->increment_iterator();
find_helper.result->clear_childs();
// but it only clears child in the first level, is it correct?
// childs from different vars will not be cleared
}
}
if( find_helper.previous_var && !was_child_found ) if( find_helper.previous_var && !was_child_found )
{ {
// may only model_container_wrapper and space_wrapper here? // may only model_container_wrapper and space_wrapper here?
@ -2690,12 +2697,16 @@ void Generator<StreamType, is_pikotools_stream, is_autoescape_stream>::MakeTextF
if( result.type == Var<StreamType>::Type::TYPE_MODEL_CONTAINER_WRAPPER ) if( result.type == Var<StreamType>::Type::TYPE_MODEL_CONTAINER_WRAPPER )
{ {
result.model_container_wrapper->increment_iterator(); //result.model_container_wrapper->increment_iterator();
// what about clear_childs() ? // what about clear_childs() ?
if( !result.model_container_wrapper->is_iterator_correct() ) if( !result.model_container_wrapper->is_iterator_correct() )
break; break;
} }
else
{
break;
}
// if( !result.to_bool() ) // if( !result.to_bool() )
// break; // break;