WIP: add a Val struct as an input/output when calling a function
This commit is contained in:
@@ -372,6 +372,7 @@ private:
|
|||||||
void CallMethod(morm::Model * model, Val::ModelMethod1 method, Env & env);
|
void CallMethod(morm::Model * model, Val::ModelMethod1 method, Env & env);
|
||||||
void CallMethod(morm::Model * model, Val::ModelMethod2 method, Val & res);
|
void CallMethod(morm::Model * model, Val::ModelMethod2 method, Val & res);
|
||||||
bool CallMethod(morm::Model * model, Val::ModelMethod3 method);
|
bool CallMethod(morm::Model * model, Val::ModelMethod3 method);
|
||||||
|
bool CallMethod(morm::Model * model, Val::ModelMethod4 method);
|
||||||
|
|
||||||
bool CallBlock(FindHelper & find_helper);
|
bool CallBlock(FindHelper & find_helper);
|
||||||
bool CallPodType(FindHelper & find_helper);
|
bool CallPodType(FindHelper & find_helper);
|
||||||
@@ -1326,6 +1327,12 @@ bool Generator::CallMethod(morm::Model * model, Val::ModelMethod3 method)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool Generator::CallMethod(morm::Model * model, Val::ModelMethod4 method)
|
||||||
|
{
|
||||||
|
return (model->*method)();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void Generator::CallObject(BaseObj & base_obj, int method_index, Env & info)
|
void Generator::CallObject(BaseObj & base_obj, int method_index, Env & info)
|
||||||
{
|
{
|
||||||
PrepareEnvStruct(info);
|
PrepareEnvStruct(info);
|
||||||
@@ -2037,7 +2044,7 @@ bool Generator::FindLastModelWrapper(FindHelper & find_helper, bool is_for_alias
|
|||||||
{
|
{
|
||||||
if( EvaluateFunctionOrMethod(find_helper.out_stream, *find_helper.currentval, res) )
|
if( EvaluateFunctionOrMethod(find_helper.out_stream, *find_helper.currentval, res) )
|
||||||
{
|
{
|
||||||
find_helper.currentval = &res;
|
child_val = find_helper.currentval->add_child(field, res);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -2292,19 +2299,25 @@ bool Generator::CallValue(FindHelper & find_helper)
|
|||||||
if( find_helper.currentval->type == Val::TYPE_MODEL )
|
if( find_helper.currentval->type == Val::TYPE_MODEL )
|
||||||
{
|
{
|
||||||
//return CallWrapper(find_helper);
|
//return CallWrapper(find_helper);
|
||||||
return CallModel(find_helper);
|
//return CallModel(find_helper);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
if( find_helper.currentval->type == Val::TYPE_MODEL_CONTAINER_WRAPPER )
|
if( find_helper.currentval->type == Val::TYPE_MODEL_CONTAINER_WRAPPER )
|
||||||
return CallModelContainerWrapper(find_helper);
|
{
|
||||||
|
//return CallModelContainerWrapper(find_helper);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
if( find_helper.currentval->type == Val::TYPE_DATE )
|
if( find_helper.currentval->type == Val::TYPE_DATE )
|
||||||
|
{
|
||||||
//return CallWrapper(find_helper);
|
//return CallWrapper(find_helper);
|
||||||
return CallDate(find_helper);
|
return CallDate(find_helper);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
if( find_helper.currentval->type == Val::TYPE_SPACE )
|
if( find_helper.currentval->type == Val::TYPE_SPACE )
|
||||||
|
{
|
||||||
return CallSpace(find_helper);
|
return CallSpace(find_helper);
|
||||||
//return CallWrapper(find_helper);
|
//return CallWrapper(find_helper);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
// if( find_helper.base_obj ) // OBJECTS WILL BE REMOVED
|
// if( find_helper.base_obj ) // OBJECTS WILL BE REMOVED
|
||||||
@@ -2312,12 +2325,14 @@ bool Generator::CallValue(FindHelper & find_helper)
|
|||||||
//else
|
//else
|
||||||
if( find_helper.currentval->type == Val::TYPE_FUNCTION )
|
if( find_helper.currentval->type == Val::TYPE_FUNCTION )
|
||||||
{
|
{
|
||||||
CallFunction(find_helper);
|
//CallFunction(find_helper);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
if( find_helper.currentval->type == Val::TYPE_ITEM_BLOCK )
|
if( find_helper.currentval->type == Val::TYPE_ITEM_BLOCK )
|
||||||
|
{
|
||||||
return CallBlock(find_helper);
|
return CallBlock(find_helper);
|
||||||
|
}
|
||||||
// else
|
// else
|
||||||
// if( find_helper.variable )
|
// if( find_helper.variable )
|
||||||
// return CallVariable(item_fun, *find_helper.variable, parameters, result, out_stream, in_stream);
|
// return CallVariable(item_fun, *find_helper.variable, parameters, result, out_stream, in_stream);
|
||||||
@@ -2326,13 +2341,8 @@ bool Generator::CallValue(FindHelper & find_helper)
|
|||||||
// if( find_helper.currentval->has_pod_type() )
|
// if( find_helper.currentval->has_pod_type() )
|
||||||
// return CallPodType(find_helper);
|
// return CallPodType(find_helper);
|
||||||
|
|
||||||
if( find_helper.currentval->type == Val::TYPE_SPACE_LOCAL || find_helper.currentval->type == Val::TYPE_INT )
|
find_helper.result = *find_helper.currentval; // IMPROVEME this makes a copy
|
||||||
{
|
return true;
|
||||||
find_helper.result = *find_helper.currentval; // IMPROVEME this makes a copy
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
19
src/val.cpp
19
src/val.cpp
@@ -90,6 +90,14 @@ void Val::copy(const Val & val)
|
|||||||
space_local = val.space_local;
|
space_local = val.space_local;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if( type == Type::TYPE_MODEL_METHOD )
|
||||||
|
{
|
||||||
|
model_method1 = val.model_method1;
|
||||||
|
model_method2 = val.model_method2;
|
||||||
|
model_method3 = val.model_method3;
|
||||||
|
model_method4 = val.model_method4;
|
||||||
|
}
|
||||||
|
|
||||||
// user_function = val.user_function;
|
// user_function = val.user_function;
|
||||||
// model = val.model;
|
// model = val.model;
|
||||||
// model_container_wrapper = val.model_container_wrapper;
|
// model_container_wrapper = val.model_container_wrapper;
|
||||||
@@ -154,6 +162,8 @@ void Val::initialize_empty()
|
|||||||
pointer = nullptr;
|
pointer = nullptr;
|
||||||
model_method1 = nullptr;
|
model_method1 = nullptr;
|
||||||
model_method2 = nullptr;
|
model_method2 = nullptr;
|
||||||
|
model_method3 = nullptr;
|
||||||
|
model_method4 = nullptr;
|
||||||
space_wrapper = nullptr;
|
space_wrapper = nullptr;
|
||||||
space_table_index = 0;
|
space_table_index = 0;
|
||||||
}
|
}
|
||||||
@@ -500,6 +510,15 @@ void Val::set_pointer_to(morm::Model * model, ModelMethod3 model_method3)
|
|||||||
this->pointer = model;
|
this->pointer = model;
|
||||||
this->model_method3 = model_method3;
|
this->model_method3 = model_method3;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Val::set_pointer_to(morm::Model * model, ModelMethod4 model_method4)
|
||||||
|
{
|
||||||
|
clear();
|
||||||
|
type = TYPE_MODEL_METHOD;
|
||||||
|
this->pointer = model;
|
||||||
|
this->model_method4 = model_method4;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
@@ -70,6 +70,7 @@ public:
|
|||||||
using ModelMethod1 = void (morm::Model::*)(Env &);
|
using ModelMethod1 = void (morm::Model::*)(Env &);
|
||||||
using ModelMethod2 = void (morm::Model::*)(Val &);
|
using ModelMethod2 = void (morm::Model::*)(Val &);
|
||||||
using ModelMethod3 = bool (morm::Model::*)();
|
using ModelMethod3 = bool (morm::Model::*)();
|
||||||
|
using ModelMethod4 = bool (morm::Model::*)() const;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
@@ -159,6 +160,7 @@ public:
|
|||||||
void set_pointer_to(morm::Model * model, ModelMethod1 model_method1);
|
void set_pointer_to(morm::Model * model, ModelMethod1 model_method1);
|
||||||
void set_pointer_to(morm::Model * model, ModelMethod2 model_method2);
|
void set_pointer_to(morm::Model * model, ModelMethod2 model_method2);
|
||||||
void set_pointer_to(morm::Model * model, ModelMethod3 model_method3);
|
void set_pointer_to(morm::Model * model, ModelMethod3 model_method3);
|
||||||
|
void set_pointer_to(morm::Model * model, ModelMethod4 model_method4);
|
||||||
#endif
|
#endif
|
||||||
void set_pointer_to(pt::Date * date);
|
void set_pointer_to(pt::Date * date);
|
||||||
void set_pointer_to(morm::Model * model);
|
void set_pointer_to(morm::Model * model);
|
||||||
@@ -247,6 +249,7 @@ public:
|
|||||||
ModelMethod1 model_method1;
|
ModelMethod1 model_method1;
|
||||||
ModelMethod2 model_method2;
|
ModelMethod2 model_method2;
|
||||||
ModelMethod3 model_method3;
|
ModelMethod3 model_method3;
|
||||||
|
ModelMethod4 model_method4;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user