diff --git a/src/lib/eolian/eo_lexer.h b/src/lib/eolian/eo_lexer.h index 876f1c70bc..0746e79bae 100644 --- a/src/lib/eolian/eo_lexer.h +++ b/src/lib/eolian/eo_lexer.h @@ -27,7 +27,7 @@ enum Tokens */ #define KEYWORDS KW(class), KW(const), KW(enum), KW(return), KW(struct), \ \ - KW(abstract), KW(c_prefix), KW(composite), KW(constructor), KW(constructors), \ + KW(abstract), KW(c_prefix), KW(composite), KW(composites), KW(constructor), KW(constructors), \ KW(data), KW(destructor), KW(error), KW(event_prefix), KW(events), KW(extends), \ KW(free), KW(get), KW(implements), KW(import), KW(interface), \ KW(keys), KW(legacy), KW(methods), KW(mixin), KW(params), \ diff --git a/src/lib/eolian/eo_parser.c b/src/lib/eolian/eo_parser.c index 1f5a678215..c403305a2f 100644 --- a/src/lib/eolian/eo_parser.c +++ b/src/lib/eolian/eo_parser.c @@ -2210,8 +2210,8 @@ _composite_add(Eo_Lexer *ls, Eina_Strbuf *buf) eo_lexer_syntax_error(ls, ebuf); return; } - /* do not introduce a dependency */ - database_defer(ls->state, fnm, EINA_FALSE); + /* composite == definitely a dependency */ + database_defer(ls->state, fnm, EINA_TRUE); free(fnm); ls->klass->composite = eina_list_append(ls->klass->composite, nm); eo_lexer_context_pop(ls); @@ -2306,7 +2306,7 @@ tags_done: /* regular class can have a parent, but just one */ _inherit_dep(ls, ibuf, EINA_TRUE); /* if not followed by implements, we're done */ - if (ls->t.kw != KW_implements) + if ((ls->t.kw != KW_implements) && (ls->t.kw != KW_composites)) { eo_lexer_dtor_pop(ls); goto inherit_done; @@ -2318,10 +2318,10 @@ tags_done: while (test_next(ls, ',')); } - if (ls->t.kw == KW_composite) + if (ls->t.kw == KW_composite || ls->t.kw == KW_composites) { if (type == EOLIAN_CLASS_INTERFACE) - eo_lexer_syntax_error(ls, "composite not allowed in interfaces"); + eo_lexer_syntax_error(ls, "interfaces cannot composite"); eo_lexer_get(ls); do _composite_add(ls, ibuf);