summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Kolesa <d.kolesa@samsung.com>2018-05-09 15:44:36 +0200
committerDaniel Kolesa <d.kolesa@samsung.com>2018-05-09 15:44:36 +0200
commit3685bcd61d97056ff0b17ab0586715ce552c2d1b (patch)
tree51de97269421a3b448e624e68c812e424e902e6c
parent6c252fc16cd5e6b23bb1dd9030e420c2d679da6e (diff)
downloadefl-3685bcd61d97056ff0b17ab0586715ce552c2d1b.tar.gz
eolian: add optional warnings about events missing a type
Set the EOLIAN_EVENT_NO_TYPE_WARN environment variable to enable those warnings during Eolian usage. They will be considered a part of the validation then. Use the void type for events to suppress the warning.
-rw-r--r--src/lib/eolian/database_event_api.c2
-rw-r--r--src/lib/eolian/database_validate.c17
-rw-r--r--src/lib/eolian/eo_parser.c2
3 files changed, 18 insertions, 3 deletions
diff --git a/src/lib/eolian/database_event_api.c b/src/lib/eolian/database_event_api.c
index 4b4f460616..32306009e3 100644
--- a/src/lib/eolian/database_event_api.c
+++ b/src/lib/eolian/database_event_api.c
@@ -9,6 +9,8 @@ EAPI const Eolian_Type *
eolian_event_type_get(const Eolian_Event *event)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(event, NULL);
+ if (event->type && (event->type->type == EOLIAN_TYPE_VOID))
+ return NULL;
return event->type;
}
diff --git a/src/lib/eolian/database_validate.c b/src/lib/eolian/database_validate.c
index 15ac5756b5..b41404b444 100644
--- a/src/lib/eolian/database_validate.c
+++ b/src/lib/eolian/database_validate.c
@@ -12,6 +12,7 @@ typedef struct _Validate_State
{
Eina_Bool warned;
Eina_Bool event_redef;
+ Eina_Bool event_notype;
} Validate_State;
static Eina_Bool
@@ -456,13 +457,14 @@ _validate_part(Eolian_Part *part, Eina_Hash *nhash)
static Eina_Bool
_validate_event(Validate_State *vals, Eolian_Event *event, Eina_Hash *nhash)
{
+ char buf[512];
const Eolian_Object *oobj = NULL;
+
if (vals->event_redef)
{
oobj = eina_hash_find(nhash, &event->base.name);
if (EINA_UNLIKELY(!!oobj))
{
- char buf[512];
snprintf(buf, sizeof(buf),
"event '%s' conflicts with another symbol (at %s:%d:%d)",
event->base.name, oobj->file, oobj->line, oobj->column);
@@ -478,6 +480,13 @@ _validate_event(Validate_State *vals, Eolian_Event *event, Eina_Hash *nhash)
return EINA_TRUE;
}
+ if (vals->event_notype && !event->type)
+ {
+ snprintf(buf, sizeof(buf), "event '%s' has no type", event->base.name);
+ _obj_error(&event->base, buf);
+ vals->warned = EINA_TRUE;
+ }
+
if (event->type && !_validate_type(vals, event->type))
return EINA_FALSE;
@@ -904,7 +913,11 @@ database_validate(const Eolian_Unit *src)
{
Eolian_Class *cl;
- Validate_State vals = { EINA_FALSE, !!getenv("EOLIAN_EVENT_REDEF_WARN") };
+ Validate_State vals = {
+ EINA_FALSE,
+ !!getenv("EOLIAN_EVENT_REDEF_WARN"),
+ !!getenv("EOLIAN_EVENT_NO_TYPE_WARN")
+ };
/* do an initial pass to refill inherits */
Eina_Iterator *iter = eolian_unit_classes_get(src);
diff --git a/src/lib/eolian/eo_parser.c b/src/lib/eolian/eo_parser.c
index 096a883b85..bec55860a9 100644
--- a/src/lib/eolian/eo_parser.c
+++ b/src/lib/eolian/eo_parser.c
@@ -1751,7 +1751,7 @@ end:
if (ls->t.token == ':')
{
eo_lexer_get(ls);
- ev->type = eo_lexer_type_release(ls, parse_type(ls));
+ ev->type = eo_lexer_type_release(ls, parse_type_void(ls));
ev->type->owned = has_owned;
}
check(ls, ';');