WIP: add a Val struct as an input/output when calling a function

This commit is contained in:
2025-01-31 17:10:40 +01:00
parent b646287c9b
commit 62a094f2c6

View File

@@ -2103,7 +2103,39 @@ bool Generator::FindLastModelWrapper(FindHelper & find_helper, bool is_for_alias
std::wstring & field = find_helper.fields[find_helper.field_index];
ValWrapper * child_valwrapper = find_helper.valwrapper->find_child(field);
if( !child_valwrapper )
if( child_valwrapper )
{
// evaluate fun or method in a case they have set a non_cache attr
if( child_valwrapper->has_evaluated_val )
{
if( child_valwrapper->evaluated_str )
{
find_helper.out_stream.escape_input(false);
find_helper.out_stream << *child_valwrapper->evaluated_str;
}
}
else
{
// the same as below
if( child_valwrapper->val.has_function() || child_valwrapper->val.has_method() )
{
if( (find_helper.field_index + 1 < find_helper.fields.size()) || !is_for_alias )
{
bool use_parameters = (find_helper.field_index + 1 == find_helper.fields.size());
if( !EvaluateFunctions(find_helper, use_parameters, *child_valwrapper) )
{
return false;
}
}
}
}
find_helper.set_valwrapper(child_valwrapper);
find_helper.currentval->set_output_stream(find_helper.out_stream);
}
else
{
morm::Model * model = nullptr;
@@ -2127,6 +2159,7 @@ bool Generator::FindLastModelWrapper(FindHelper & find_helper, bool is_for_alias
ValWrapper valwrapper;
valwrapper.val = model->get_ezc_val(nullptr, field.c_str()); // may it would be better to provide a pointer to get_ezc_val() method?
// the same block as above
if( valwrapper.val.has_function() || valwrapper.val.has_method() )
{
if( (find_helper.field_index + 1 < find_helper.fields.size()) || !is_for_alias )
@@ -2144,26 +2177,23 @@ bool Generator::FindLastModelWrapper(FindHelper & find_helper, bool is_for_alias
(!valwrapper.has_evaluated_val && valwrapper.val.has_object()) )
{
child_valwrapper = find_helper.valwrapper->add_child(field, valwrapper);
}
}
}
else
find_helper.set_valwrapper(child_valwrapper);
find_helper.currentval->set_output_stream(find_helper.out_stream);
if( child_valwrapper->has_evaluated_val && !child_valwrapper->evaluated_val.is_allowed_to_cache() )
{
if( child_valwrapper->has_evaluated_val )
{
if( child_valwrapper->evaluated_str )
{
find_helper.out_stream.escape_input(false);
find_helper.out_stream << *child_valwrapper->evaluated_str;
child_valwrapper->has_evaluated_val = false;
/*
* but find_helper.currentval let point to the evaluated_val (it is set by set_valwrapper() method)
*/
}
}
}
if( !child_valwrapper )
return false;
find_helper.set_valwrapper(child_valwrapper);
find_helper.currentval->set_output_stream(find_helper.out_stream);
}
find_helper.field_index += 1;
}
@@ -2394,13 +2424,13 @@ bool Generator::CallValue(FindHelper & find_helper)
return CallDate(find_helper);
}
else
#endif
if( find_helper.currentval->type == Val::TYPE_SPACE )
{
return CallSpace(find_helper);
//return CallSpace(find_helper);
//return CallWrapper(find_helper);
}
else
#endif
// if( find_helper.base_obj ) // OBJECTS WILL BE REMOVED
// CallObject(*find_helper.base_obj, find_helper.method_index, parameters, result, out_stream, in_stream);
//else