forked from enlightenment/efl
eolian: make by-name variable lookups take unit
This commit is contained in:
parent
6d453bc694
commit
653cf6bac3
|
@ -367,8 +367,8 @@ ffi.cdef [[
|
||||||
Eolian_Unary_Operator eolian_expression_unary_operator_get(const Eolian_Expression *expr);
|
Eolian_Unary_Operator eolian_expression_unary_operator_get(const Eolian_Expression *expr);
|
||||||
const Eolian_Expression *eolian_expression_unary_expression_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);
|
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_global_get_by_name(const Eolian_Unit *unit, const char *name);
|
||||||
const Eolian_Variable *eolian_variable_constant_get_by_name(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_globals_get_by_file(const char *fname);
|
||||||
Eina_Iterator *eolian_variable_constants_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);
|
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)
|
M.variable_global_get_by_name = function(unit, name)
|
||||||
local v = eolian.eolian_variable_global_get_by_name(name)
|
local v = eolian.eolian_variable_global_get_by_name(unit, name)
|
||||||
if v == nil then return nil end
|
if v == nil then return nil end
|
||||||
return v
|
return v
|
||||||
end
|
end
|
||||||
|
|
||||||
M.variable_constant_get_by_name = function(name)
|
M.variable_constant_get_by_name = function(unit, name)
|
||||||
local v = eolian.eolian_variable_constant_get_by_name(name)
|
local v = eolian.eolian_variable_constant_get_by_name(unit, name)
|
||||||
if v == nil then return nil end
|
if v == nil then return nil end
|
||||||
return v
|
return v
|
||||||
end
|
end
|
||||||
|
|
|
@ -2055,22 +2055,24 @@ EAPI Eolian_Value eolian_expression_value_get(const Eolian_Expression *expr);
|
||||||
/*
|
/*
|
||||||
* @brief Get a global variable by name. Supports namespaces.
|
* @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
|
* @param[in] name the name of the variable
|
||||||
* @return the variable handle or NULL
|
* @return the variable handle or NULL
|
||||||
*
|
*
|
||||||
* @ingroup Eolian
|
* @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.
|
* @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
|
* @param[in] name the name of the variable
|
||||||
* @return the variable handle or NULL
|
* @return the variable handle or NULL
|
||||||
*
|
*
|
||||||
* @ingroup Eolian
|
* @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.
|
* @brief Get an iterator to all global variables contained in a file.
|
||||||
|
|
|
@ -493,8 +493,9 @@ eval_exp(const Eolian_Expression *expr, Eolian_Expression_Mask mask,
|
||||||
}
|
}
|
||||||
case EOLIAN_EXPR_NAME:
|
case EOLIAN_EXPR_NAME:
|
||||||
{
|
{
|
||||||
|
/* FIXME: pass unit properly */
|
||||||
const Eolian_Variable *var = eolian_variable_constant_get_by_name
|
const Eolian_Variable *var = eolian_variable_constant_get_by_name
|
||||||
(expr->value.s);
|
(NULL, expr->value.s);
|
||||||
const Eolian_Expression *exp = NULL;
|
const Eolian_Expression *exp = NULL;
|
||||||
|
|
||||||
if (!var)
|
if (!var)
|
||||||
|
|
|
@ -6,7 +6,8 @@
|
||||||
#include "eolian_database.h"
|
#include "eolian_database.h"
|
||||||
|
|
||||||
EAPI const Eolian_Variable *
|
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;
|
if (!_globals) return NULL;
|
||||||
Eina_Stringshare *shr = eina_stringshare_add(name);
|
Eina_Stringshare *shr = eina_stringshare_add(name);
|
||||||
|
@ -16,7 +17,8 @@ eolian_variable_global_get_by_name(const char *name)
|
||||||
}
|
}
|
||||||
|
|
||||||
EAPI const Eolian_Variable *
|
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;
|
if (!_constants) return NULL;
|
||||||
Eina_Stringshare *shr = eina_stringshare_add(name);
|
Eina_Stringshare *shr = eina_stringshare_add(name);
|
||||||
|
|
|
@ -756,20 +756,21 @@ START_TEST(eolian_var)
|
||||||
const Eolian_Expression *exp = NULL;
|
const Eolian_Expression *exp = NULL;
|
||||||
const Eolian_Type *type = NULL;
|
const Eolian_Type *type = NULL;
|
||||||
const Eolian_Class *class;
|
const Eolian_Class *class;
|
||||||
|
const Eolian_Unit *unit;
|
||||||
Eolian_Value v;
|
Eolian_Value v;
|
||||||
const char *name;
|
const char *name;
|
||||||
|
|
||||||
eolian_init();
|
eolian_init();
|
||||||
|
|
||||||
/* Parsing */
|
/* 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 */
|
/* Check that the class Dummy is still readable */
|
||||||
fail_if(!(class = eolian_class_get_by_name("Var")));
|
fail_if(!(class = eolian_class_get_by_name("Var")));
|
||||||
fail_if(!eolian_class_function_get_by_name(class, "foo", EOLIAN_METHOD));
|
fail_if(!eolian_class_function_get_by_name(class, "foo", EOLIAN_METHOD));
|
||||||
|
|
||||||
/* regular constant */
|
/* 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_type_get(var) != EOLIAN_VAR_CONSTANT);
|
||||||
fail_if(eolian_variable_is_extern(var));
|
fail_if(eolian_variable_is_extern(var));
|
||||||
fail_if(!(type = eolian_variable_base_type_get(var)));
|
fail_if(!(type = eolian_variable_base_type_get(var)));
|
||||||
|
@ -781,7 +782,7 @@ START_TEST(eolian_var)
|
||||||
fail_if(v.value.i != 5);
|
fail_if(v.value.i != 5);
|
||||||
|
|
||||||
/* regular global */
|
/* 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_type_get(var) != EOLIAN_VAR_GLOBAL);
|
||||||
fail_if(eolian_variable_is_extern(var));
|
fail_if(eolian_variable_is_extern(var));
|
||||||
fail_if(!(type = eolian_variable_base_type_get(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);
|
fail_if(((int)v.value.f) != 10);
|
||||||
|
|
||||||
/* no-value global */
|
/* 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_type_get(var) != EOLIAN_VAR_GLOBAL);
|
||||||
fail_if(eolian_variable_is_extern(var));
|
fail_if(eolian_variable_is_extern(var));
|
||||||
fail_if(!(type = eolian_variable_base_type_get(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));
|
fail_if(eolian_variable_value_get(var));
|
||||||
|
|
||||||
/* extern global */
|
/* 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_type_get(var) != EOLIAN_VAR_GLOBAL);
|
||||||
fail_if(!eolian_variable_is_extern(var));
|
fail_if(!eolian_variable_is_extern(var));
|
||||||
fail_if(!(type = eolian_variable_base_type_get(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_Type *type = NULL;
|
||||||
const Eolian_Class *class;
|
const Eolian_Class *class;
|
||||||
const Eolian_Expression *exp;
|
const Eolian_Expression *exp;
|
||||||
|
const Eolian_Unit *unit;
|
||||||
Eina_Stringshare *cname;
|
Eina_Stringshare *cname;
|
||||||
const char *name;
|
const char *name;
|
||||||
Eolian_Value v;
|
Eolian_Value v;
|
||||||
|
@ -829,7 +831,7 @@ START_TEST(eolian_enum)
|
||||||
eolian_init();
|
eolian_init();
|
||||||
|
|
||||||
/* Parsing */
|
/* 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 */
|
/* Check that the class Dummy is still readable */
|
||||||
fail_if(!(class = eolian_class_get_by_name("Enum")));
|
fail_if(!(class = eolian_class_get_by_name("Enum")));
|
||||||
|
@ -892,7 +894,7 @@ START_TEST(eolian_enum)
|
||||||
fail_if(strcmp(cname, "NAME_SPACED_PANTS"));
|
fail_if(strcmp(cname, "NAME_SPACED_PANTS"));
|
||||||
eina_stringshare_del(cname);
|
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_type_get(var) != EOLIAN_VAR_CONSTANT);
|
||||||
fail_if(eolian_variable_is_extern(var));
|
fail_if(eolian_variable_is_extern(var));
|
||||||
fail_if(!(type = eolian_variable_base_type_get(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.type != EOLIAN_EXPR_INT);
|
||||||
fail_if(v.value.i != (1 << 0));
|
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(eolian_variable_type_get(var) != EOLIAN_VAR_CONSTANT);
|
||||||
fail_if(!(exp = eolian_variable_value_get(var)));
|
fail_if(!(exp = eolian_variable_value_get(var)));
|
||||||
v = eolian_expression_eval(exp, EOLIAN_MASK_ALL);
|
v = eolian_expression_eval(exp, EOLIAN_MASK_ALL);
|
||||||
|
@ -1136,13 +1138,14 @@ START_TEST(eolian_docs)
|
||||||
const Eolian_Function_Parameter *par;
|
const Eolian_Function_Parameter *par;
|
||||||
const Eolian_Struct_Type_Field *sfl;
|
const Eolian_Struct_Type_Field *sfl;
|
||||||
const Eolian_Enum_Type_Field *efl;
|
const Eolian_Enum_Type_Field *efl;
|
||||||
|
const Eolian_Unit *unit;
|
||||||
Eina_Iterator *itr;
|
Eina_Iterator *itr;
|
||||||
|
|
||||||
eolian_init();
|
eolian_init();
|
||||||
|
|
||||||
fail_if(!eolian_directory_scan(PACKAGE_DATA_DIR"/data"));
|
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(!(tdl = eolian_typedecl_struct_get_by_name("Foo")));
|
||||||
fail_if(!(doc = eolian_typedecl_documentation_get(tdl)));
|
fail_if(!(doc = eolian_typedecl_documentation_get(tdl)));
|
||||||
|
@ -1277,7 +1280,7 @@ START_TEST(eolian_docs)
|
||||||
fail_if(strcmp(eolian_documentation_since_get(doc),
|
fail_if(strcmp(eolian_documentation_since_get(doc),
|
||||||
"2.0"));
|
"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(!(doc = eolian_variable_documentation_get(var)));
|
||||||
fail_if(strcmp(eolian_documentation_summary_get(doc),
|
fail_if(strcmp(eolian_documentation_summary_get(doc),
|
||||||
"Docs for var."));
|
"Docs for var."));
|
||||||
|
|
Loading…
Reference in New Issue