q66 pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=653cf6bac37f6d74bd18d1088a7fb2ce6d661bc2
commit 653cf6bac37f6d74bd18d1088a7fb2ce6d661bc2 Author: Daniel Kolesa <d.kol...@osg.samsung.com> Date: Thu May 18 16:31:03 2017 +0200 eolian: make by-name variable lookups take unit --- src/bindings/luajit/eolian.lua | 12 ++++++------ src/lib/eolian/Eolian.h | 6 ++++-- src/lib/eolian/database_expr.c | 3 ++- src/lib/eolian/database_var_api.c | 6 ++++-- src/tests/eolian/eolian_parsing.c | 23 +++++++++++++---------- 5 files changed, 29 insertions(+), 21 deletions(-) diff --git a/src/bindings/luajit/eolian.lua b/src/bindings/luajit/eolian.lua index d98e047c19..8177aa5f78 100644 --- a/src/bindings/luajit/eolian.lua +++ b/src/bindings/luajit/eolian.lua @@ -367,8 +367,8 @@ ffi.cdef [[ Eolian_Unary_Operator eolian_expression_unary_operator_get(const Eolian_Expression *expr); const Eolian_Expression *eolian_expression_unary_expression_get(const Eolian_Expression *expr); Eolian_Value_t eolian_expression_value_get(const Eolian_Expression *expr); - const Eolian_Variable *eolian_variable_global_get_by_name(const char *name); - const Eolian_Variable *eolian_variable_constant_get_by_name(const char *name); + const Eolian_Variable *eolian_variable_global_get_by_name(const Eolian_Unit *unit, const char *name); + const Eolian_Variable *eolian_variable_constant_get_by_name(const Eolian_Unit *unit, const char *name); Eina_Iterator *eolian_variable_globals_get_by_file(const char *fname); Eina_Iterator *eolian_variable_constants_get_by_file(const char *fname); Eina_Iterator *eolian_variable_all_constants_get(void); @@ -1362,14 +1362,14 @@ M.Expression = ffi.metatype("Eolian_Expression", { } }) -M.variable_global_get_by_name = function(name) - local v = eolian.eolian_variable_global_get_by_name(name) +M.variable_global_get_by_name = function(unit, name) + local v = eolian.eolian_variable_global_get_by_name(unit, name) if v == nil then return nil end return v end -M.variable_constant_get_by_name = function(name) - local v = eolian.eolian_variable_constant_get_by_name(name) +M.variable_constant_get_by_name = function(unit, name) + local v = eolian.eolian_variable_constant_get_by_name(unit, name) if v == nil then return nil end return v end diff --git a/src/lib/eolian/Eolian.h b/src/lib/eolian/Eolian.h index 630b0b487f..08592a8b39 100644 --- a/src/lib/eolian/Eolian.h +++ b/src/lib/eolian/Eolian.h @@ -2055,22 +2055,24 @@ EAPI Eolian_Value eolian_expression_value_get(const Eolian_Expression *expr); /* * @brief Get a global variable by name. Supports namespaces. * + * @param[in] unit the unit to look in * @param[in] name the name of the variable * @return the variable handle or NULL * * @ingroup Eolian */ -EAPI const Eolian_Variable *eolian_variable_global_get_by_name(const char *name); +EAPI const Eolian_Variable *eolian_variable_global_get_by_name(const Eolian_Unit *unit, const char *name); /* * @brief Get a constant variable by name. Supports namespaces. * + * @param[in] unit the unit to look in * @param[in] name the name of the variable * @return the variable handle or NULL * * @ingroup Eolian */ -EAPI const Eolian_Variable *eolian_variable_constant_get_by_name(const char *name); +EAPI const Eolian_Variable *eolian_variable_constant_get_by_name(const Eolian_Unit *unit, const char *name); /* * @brief Get an iterator to all global variables contained in a file. diff --git a/src/lib/eolian/database_expr.c b/src/lib/eolian/database_expr.c index 45f89a9530..5717f8bffd 100644 --- a/src/lib/eolian/database_expr.c +++ b/src/lib/eolian/database_expr.c @@ -493,8 +493,9 @@ eval_exp(const Eolian_Expression *expr, Eolian_Expression_Mask mask, } case EOLIAN_EXPR_NAME: { + /* FIXME: pass unit properly */ const Eolian_Variable *var = eolian_variable_constant_get_by_name - (expr->value.s); + (NULL, expr->value.s); const Eolian_Expression *exp = NULL; if (!var) diff --git a/src/lib/eolian/database_var_api.c b/src/lib/eolian/database_var_api.c index 0e1af2dbe1..4842ec5959 100644 --- a/src/lib/eolian/database_var_api.c +++ b/src/lib/eolian/database_var_api.c @@ -6,7 +6,8 @@ #include "eolian_database.h" EAPI const Eolian_Variable * -eolian_variable_global_get_by_name(const char *name) +eolian_variable_global_get_by_name(const Eolian_Unit *unit EINA_UNUSED, + const char *name) { if (!_globals) return NULL; Eina_Stringshare *shr = eina_stringshare_add(name); @@ -16,7 +17,8 @@ eolian_variable_global_get_by_name(const char *name) } EAPI const Eolian_Variable * -eolian_variable_constant_get_by_name(const char *name) +eolian_variable_constant_get_by_name(const Eolian_Unit *unit EINA_UNUSED, + const char *name) { if (!_constants) return NULL; Eina_Stringshare *shr = eina_stringshare_add(name); diff --git a/src/tests/eolian/eolian_parsing.c b/src/tests/eolian/eolian_parsing.c index 9c9ac54ab7..4d80a0ba4e 100644 --- a/src/tests/eolian/eolian_parsing.c +++ b/src/tests/eolian/eolian_parsing.c @@ -756,20 +756,21 @@ START_TEST(eolian_var) const Eolian_Expression *exp = NULL; const Eolian_Type *type = NULL; const Eolian_Class *class; + const Eolian_Unit *unit; Eolian_Value v; const char *name; eolian_init(); /* Parsing */ - fail_if(!eolian_file_parse(PACKAGE_DATA_DIR"/data/var.eo")); + fail_if(!(unit = eolian_file_parse(PACKAGE_DATA_DIR"/data/var.eo"))); /* Check that the class Dummy is still readable */ fail_if(!(class = eolian_class_get_by_name("Var"))); fail_if(!eolian_class_function_get_by_name(class, "foo", EOLIAN_METHOD)); /* regular constant */ - fail_if(!(var = eolian_variable_constant_get_by_name("Foo"))); + fail_if(!(var = eolian_variable_constant_get_by_name(unit, "Foo"))); fail_if(eolian_variable_type_get(var) != EOLIAN_VAR_CONSTANT); fail_if(eolian_variable_is_extern(var)); fail_if(!(type = eolian_variable_base_type_get(var))); @@ -781,7 +782,7 @@ START_TEST(eolian_var) fail_if(v.value.i != 5); /* regular global */ - fail_if(!(var = eolian_variable_global_get_by_name("Bar"))); + fail_if(!(var = eolian_variable_global_get_by_name(unit, "Bar"))); fail_if(eolian_variable_type_get(var) != EOLIAN_VAR_GLOBAL); fail_if(eolian_variable_is_extern(var)); fail_if(!(type = eolian_variable_base_type_get(var))); @@ -793,7 +794,7 @@ START_TEST(eolian_var) fail_if(((int)v.value.f) != 10); /* no-value global */ - fail_if(!(var = eolian_variable_global_get_by_name("Baz"))); + fail_if(!(var = eolian_variable_global_get_by_name(unit, "Baz"))); fail_if(eolian_variable_type_get(var) != EOLIAN_VAR_GLOBAL); fail_if(eolian_variable_is_extern(var)); fail_if(!(type = eolian_variable_base_type_get(var))); @@ -802,7 +803,7 @@ START_TEST(eolian_var) fail_if(eolian_variable_value_get(var)); /* extern global */ - fail_if(!(var = eolian_variable_global_get_by_name("Bah"))); + fail_if(!(var = eolian_variable_global_get_by_name(unit, "Bah"))); fail_if(eolian_variable_type_get(var) != EOLIAN_VAR_GLOBAL); fail_if(!eolian_variable_is_extern(var)); fail_if(!(type = eolian_variable_base_type_get(var))); @@ -822,6 +823,7 @@ START_TEST(eolian_enum) const Eolian_Type *type = NULL; const Eolian_Class *class; const Eolian_Expression *exp; + const Eolian_Unit *unit; Eina_Stringshare *cname; const char *name; Eolian_Value v; @@ -829,7 +831,7 @@ START_TEST(eolian_enum) eolian_init(); /* Parsing */ - fail_if(!eolian_file_parse(PACKAGE_DATA_DIR"/data/enum.eo")); + fail_if(!(unit = eolian_file_parse(PACKAGE_DATA_DIR"/data/enum.eo"))); /* Check that the class Dummy is still readable */ fail_if(!(class = eolian_class_get_by_name("Enum"))); @@ -892,7 +894,7 @@ START_TEST(eolian_enum) fail_if(strcmp(cname, "NAME_SPACED_PANTS")); eina_stringshare_del(cname); - fail_if(!(var = eolian_variable_constant_get_by_name("Bah"))); + fail_if(!(var = eolian_variable_constant_get_by_name(unit, "Bah"))); fail_if(eolian_variable_type_get(var) != EOLIAN_VAR_CONSTANT); fail_if(eolian_variable_is_extern(var)); fail_if(!(type = eolian_variable_base_type_get(var))); @@ -903,7 +905,7 @@ START_TEST(eolian_enum) fail_if(v.type != EOLIAN_EXPR_INT); fail_if(v.value.i != (1 << 0)); - fail_if(!(var = eolian_variable_constant_get_by_name("Pants"))); + fail_if(!(var = eolian_variable_constant_get_by_name(unit, "Pants"))); fail_if(eolian_variable_type_get(var) != EOLIAN_VAR_CONSTANT); fail_if(!(exp = eolian_variable_value_get(var))); v = eolian_expression_eval(exp, EOLIAN_MASK_ALL); @@ -1136,13 +1138,14 @@ START_TEST(eolian_docs) const Eolian_Function_Parameter *par; const Eolian_Struct_Type_Field *sfl; const Eolian_Enum_Type_Field *efl; + const Eolian_Unit *unit; Eina_Iterator *itr; eolian_init(); fail_if(!eolian_directory_scan(PACKAGE_DATA_DIR"/data")); - fail_if(!eolian_file_parse(PACKAGE_DATA_DIR"/data/docs.eo")); + fail_if(!(unit = eolian_file_parse(PACKAGE_DATA_DIR"/data/docs.eo"))); fail_if(!(tdl = eolian_typedecl_struct_get_by_name("Foo"))); fail_if(!(doc = eolian_typedecl_documentation_get(tdl))); @@ -1277,7 +1280,7 @@ START_TEST(eolian_docs) fail_if(strcmp(eolian_documentation_since_get(doc), "2.0")); - fail_if(!(var = eolian_variable_global_get_by_name("pants"))); + fail_if(!(var = eolian_variable_global_get_by_name(unit, "pants"))); fail_if(!(doc = eolian_variable_documentation_get(var))); fail_if(strcmp(eolian_documentation_summary_get(doc), "Docs for var.")); --