summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Kolesa <d.kolesa@osg.samsung.com>2017-08-30 16:02:30 +0200
committerDaniel Kolesa <d.kolesa@osg.samsung.com>2017-08-30 16:02:30 +0200
commit4a16e1d86253ce336464f26ee9244f25511cb8bb (patch)
tree6a1a612ae16b45df381e017701756eee98d0ee83
parent2071bbe8fb6efedef6cfa3ec1ad3df398c42727f (diff)
downloadefl-4a16e1d86253ce336464f26ee9244f25511cb8bb.tar.gz
eolian: @extern for function pointers
-rw-r--r--src/lib/eolian/eo_parser.c21
1 files changed, 12 insertions, 9 deletions
diff --git a/src/lib/eolian/eo_parser.c b/src/lib/eolian/eo_parser.c
index 7e40cb7d47..24585977c0 100644
--- a/src/lib/eolian/eo_parser.c
+++ b/src/lib/eolian/eo_parser.c
@@ -1383,7 +1383,9 @@ end:
static Eolian_Typedecl*
parse_function_pointer(Eo_Lexer *ls)
{
- int line, col;
+ int bline, bcol;
+ int line = ls->line_number, col = ls->column;
+
Eolian_Typedecl *def = push_typedecl(ls);
Eina_Strbuf *buf = push_strbuf(ls);
Eolian_Function *meth = NULL;
@@ -1394,13 +1396,13 @@ parse_function_pointer(Eo_Lexer *ls)
has_beta = EINA_FALSE;
eo_lexer_get(ls);
- parse_name(ls, buf);
def->type = EOLIAN_TYPEDECL_FUNCTION_POINTER;
- def->is_extern = EINA_FALSE;
-
- FILL_BASE(def->base, ls, ls->line_number, ls->column);
+ def->is_extern = (ls->t.kw == KW_at_extern);
+ if (def->is_extern)
+ eo_lexer_get(ls);
+ parse_name(ls, buf);
_fill_name(eina_stringshare_add(eina_strbuf_string_get(buf)),
&def->full_name, &def->name, &def->namespaces);
@@ -1411,7 +1413,6 @@ parse_function_pointer(Eo_Lexer *ls)
meth->type = EOLIAN_FUNCTION_POINTER;
meth->get_scope = meth->set_scope = EOLIAN_SCOPE_PUBLIC;
meth->name = eina_stringshare_ref(def->name);
- FILL_BASE(meth->base, ls, ls->line_number, ls->column);
def->function_pointer = meth;
@@ -1431,8 +1432,8 @@ parse_function_pointer(Eo_Lexer *ls)
goto body;
}
body:
- line = ls->line_number;
- col = ls->column;
+ bline = ls->line_number;
+ bcol = ls->column;
check_next(ls, '{');
FILL_DOC(ls, def, doc);
for (;;) switch (ls->t.kw)
@@ -1455,8 +1456,10 @@ body:
goto end;
}
end:
- check_match(ls, '}', '{', line, col);
+ check_match(ls, '}', '{', bline, bcol);
check_next(ls, ';');
+ FILL_BASE(def->base, ls, line, col);
+ FILL_BASE(meth->base, ls, line, col);
return def;
}