From 8002b3b24e6e238c1453dfe4dc863fa6cf14593b Mon Sep 17 00:00:00 2001 From: Daniel Kolesa Date: Thu, 10 Nov 2016 16:20:19 +0100 Subject: eolian: remove parsing of pointers and the corresponding APIs Everything should be done via the new ptr() system now. --- src/bindings/luajit/eolian.lua | 10 ++++------ src/lib/eolian/Eolian.h | 1 - src/lib/eolian/database_expr_api.c | 9 --------- src/lib/eolian/database_validate.c | 1 - src/lib/eolian/eo_parser.c | 30 ++++-------------------------- src/scripts/elua/apps/docgen/doctree.lua | 8 -------- src/tests/eolian/data/class_simple.eo | 2 +- src/tests/eolian/data/complex_type.eo | 4 ++-- src/tests/eolian/data/consts.eo | 2 +- src/tests/eolian/data/decl.eo | 2 +- src/tests/eolian/data/enum.eo | 2 +- src/tests/eolian/data/extern.eo | 2 +- src/tests/eolian/data/free_func.eo | 6 +++--- src/tests/eolian/data/null.eo | 8 ++++---- src/tests/eolian/data/object_impl.eo | 2 +- src/tests/eolian/data/override.eo | 2 +- src/tests/eolian/data/struct.eo | 4 ++-- src/tests/eolian/data/typedef.eo | 4 ++-- src/tests/eolian/data/var.eo | 2 +- src/tests/eolian/eolian_parsing.c | 7 +++---- 20 files changed, 32 insertions(+), 76 deletions(-) diff --git a/src/bindings/luajit/eolian.lua b/src/bindings/luajit/eolian.lua index ad9508cdea..851115264f 100644 --- a/src/bindings/luajit/eolian.lua +++ b/src/bindings/luajit/eolian.lua @@ -74,7 +74,6 @@ ffi.cdef [[ EOLIAN_TYPE_VOID, EOLIAN_TYPE_REGULAR, EOLIAN_TYPE_COMPLEX, - EOLIAN_TYPE_POINTER, EOLIAN_TYPE_CLASS, EOLIAN_TYPE_STATIC_ARRAY, EOLIAN_TYPE_TERMINATED_ARRAY, @@ -456,11 +455,10 @@ M.type_type = { VOID = 1, REGULAR = 2, COMPLEX = 3, - POINTER = 4, - CLASS = 5, - STATIC_ARRAY = 6, - TERMINATED_ARRAY = 7, - UNDEFINED = 8 + CLASS = 4, + STATIC_ARRAY = 5, + TERMINATED_ARRAY = 6, + UNDEFINED = 7 } M.typedecl_type = { diff --git a/src/lib/eolian/Eolian.h b/src/lib/eolian/Eolian.h index 90f64d8606..ef171028f2 100644 --- a/src/lib/eolian/Eolian.h +++ b/src/lib/eolian/Eolian.h @@ -218,7 +218,6 @@ typedef enum EOLIAN_TYPE_VOID, EOLIAN_TYPE_REGULAR, EOLIAN_TYPE_COMPLEX, - EOLIAN_TYPE_POINTER, EOLIAN_TYPE_CLASS, EOLIAN_TYPE_STATIC_ARRAY, EOLIAN_TYPE_TERMINATED_ARRAY, diff --git a/src/lib/eolian/database_expr_api.c b/src/lib/eolian/database_expr_api.c index 28056b663b..db38c045c6 100644 --- a/src/lib/eolian/database_expr_api.c +++ b/src/lib/eolian/database_expr_api.c @@ -23,15 +23,6 @@ _eval_type(const Eolian_Expression *expr, const Eolian_Type *type) return err; switch (type->type) { - case EOLIAN_TYPE_POINTER: - { - int mask = EOLIAN_MASK_NULL; - const Eolian_Type *base = eolian_type_base_type_get(type); - int kw = base->name ? eo_lexer_keyword_str_to_id(base->name) : 0; - if (kw == KW_char) - mask |= EOLIAN_MASK_STRING; - return database_expr_eval(expr, mask); - } case EOLIAN_TYPE_CLASS: case EOLIAN_TYPE_COMPLEX: return database_expr_eval(expr, EOLIAN_MASK_NULL); diff --git a/src/lib/eolian/database_validate.c b/src/lib/eolian/database_validate.c index 4e93b4e07f..bc93a57c30 100644 --- a/src/lib/eolian/database_validate.c +++ b/src/lib/eolian/database_validate.c @@ -223,7 +223,6 @@ _validate_type(const Eolian_Type *tp) } return _validate_typedecl(tpp); } - case EOLIAN_TYPE_POINTER: case EOLIAN_TYPE_STATIC_ARRAY: case EOLIAN_TYPE_TERMINATED_ARRAY: return _validate_type(tp->base_type); diff --git a/src/lib/eolian/eo_parser.c b/src/lib/eolian/eo_parser.c index 4fd22e16d9..592f2142f8 100644 --- a/src/lib/eolian/eo_parser.c +++ b/src/lib/eolian/eo_parser.c @@ -755,7 +755,7 @@ parse_type_void(Eo_Lexer *ls, Eina_Bool allow_ref, Eina_Bool allow_sarray) FILL_BASE(def->base, ls, line, col); def->is_const = EINA_TRUE; check_match(ls, ')', '(', pline, pcol); - goto parse_ptr; + return def; } case KW_ptr: { @@ -768,7 +768,7 @@ parse_type_void(Eo_Lexer *ls, Eina_Bool allow_ref, Eina_Bool allow_sarray) FILL_BASE(def->base, ls, line, col); def->is_ptr = EINA_TRUE; check_match(ls, ')', '(', pline, pcol); - goto parse_ptr; + return def; } case KW_own: { @@ -788,7 +788,7 @@ parse_type_void(Eo_Lexer *ls, Eina_Bool allow_ref, Eina_Bool allow_sarray) FILL_BASE(def->base, ls, line, col); def->is_own = EINA_TRUE; check_match(ls, ')', '(', pline, pcolumn); - goto parse_ptr; + return def; } case KW_free: { @@ -811,7 +811,7 @@ parse_type_void(Eo_Lexer *ls, Eina_Bool allow_ref, Eina_Bool allow_sarray) eo_lexer_get(ls); FILL_BASE(def->base, ls, line, col); check_match(ls, ')', '(', pline, pcolumn); - goto parse_ptr; + return def; } default: break; @@ -941,28 +941,6 @@ parse_type_void(Eo_Lexer *ls, Eina_Bool allow_ref, Eina_Bool allow_sarray) pop_strbuf(ls); } } -parse_ptr: - if ((def->type == EOLIAN_TYPE_CLASS) || (def->type == EOLIAN_TYPE_COMPLEX)) - { - if (ls->t.token == '*') - eo_lexer_syntax_error(ls, "pointer to complex/class type"); - } - if (getenv("EOLIAN_WARN_PTR") && ls->t.token == '*') - { - fprintf(stderr, "eolian:%s:%d:%d: found pointer type\n", - def->base.file, line, col); - } - while (ls->t.token == '*') - { - Eolian_Type *pdef; - pop_type(ls); - pdef = push_type(ls); - FILL_BASE(pdef->base, ls, ls->line_number, ls->column); - pdef->base_type = def; - pdef->type = EOLIAN_TYPE_POINTER; - def = pdef; - eo_lexer_get(ls); - } return def; } diff --git a/src/scripts/elua/apps/docgen/doctree.lua b/src/scripts/elua/apps/docgen/doctree.lua index 0f835c5185..da1fd8827f 100644 --- a/src/scripts/elua/apps/docgen/doctree.lua +++ b/src/scripts/elua/apps/docgen/doctree.lua @@ -596,7 +596,6 @@ M.Type = Node:clone { VOID = eolian.type_type.VOID, REGULAR = eolian.type_type.REGULAR, COMPLEX = eolian.type_type.COMPLEX, - POINTER = eolian.type_type.POINTER, CLASS = eolian.type_type.CLASS, STATIC_ARRAY = eolian.type_type.STATIC_ARRAY, TERMINATED_ARRAY = eolian.type_type.TERMINATED_ARRAY, @@ -708,13 +707,6 @@ M.Type = Node:clone { end return wrap_type_attrs(self, self:full_name_get() .. "<" .. table.concat(stypes, ", ") .. ">") - elseif tpt == self.POINTER then - local btp = self:base_type_get() - local suffix = " *" - if btp:type_get() == self.POINTER then - suffix = "*" - end - return wrap_type_attrs(self, btp:serialize() .. suffix) elseif tpt == self.STATIC_ARRAY then return wrap_type_attrs(self, "static_array<" .. self:base_type_get():serialize() .. ", " diff --git a/src/tests/eolian/data/class_simple.eo b/src/tests/eolian/data/class_simple.eo index 1cb75c95d4..c08ec9fa2d 100644 --- a/src/tests/eolian/data/class_simple.eo +++ b/src/tests/eolian/data/class_simple.eo @@ -37,7 +37,7 @@ class Class_Simple { @out c: double (1337.6); @in d: ptr(int); } - return: char * (null); [[comment for method return]] + return: ptr(char) (null); [[comment for method return]] } bar @c_only { eo: null; diff --git a/src/tests/eolian/data/complex_type.eo b/src/tests/eolian/data/complex_type.eo index 30429b52b8..8aac1163fc 100644 --- a/src/tests/eolian/data/complex_type.eo +++ b/src/tests/eolian/data/complex_type.eo @@ -2,7 +2,7 @@ class Complex_Type { methods { @property a { set { - return: own(list >); + return: own(list >); } get { } @@ -12,7 +12,7 @@ class Complex_Type { } foo { params { - buf: own(char*); + buf: own(ptr(char)); } return: own(list); [[comment for method return]] } diff --git a/src/tests/eolian/data/consts.eo b/src/tests/eolian/data/consts.eo index 8f8422a68a..2b2f9bf08e 100644 --- a/src/tests/eolian/data/consts.eo +++ b/src/tests/eolian/data/consts.eo @@ -7,7 +7,7 @@ class Consts { @inout b: char; @out c: double; } - return: char * (null); [[comment for method return]] + return: ptr(char) (null); [[comment for method return]] } } } diff --git a/src/tests/eolian/data/decl.eo b/src/tests/eolian/data/decl.eo index c43bf28988..001494b95c 100644 --- a/src/tests/eolian/data/decl.eo +++ b/src/tests/eolian/data/decl.eo @@ -16,7 +16,7 @@ class Decl { params { idx: int; } - return: own(char*); + return: own(ptr(char)); } } } diff --git a/src/tests/eolian/data/enum.eo b/src/tests/eolian/data/enum.eo index dc410e457e..3b426e3a06 100644 --- a/src/tests/eolian/data/enum.eo +++ b/src/tests/eolian/data/enum.eo @@ -39,7 +39,7 @@ class Enum { params { idx: int; } - return: own(char*); + return: own(ptr(char)); } } } diff --git a/src/tests/eolian/data/extern.eo b/src/tests/eolian/data/extern.eo index d0b741d67a..e8ee00673e 100644 --- a/src/tests/eolian/data/extern.eo +++ b/src/tests/eolian/data/extern.eo @@ -22,7 +22,7 @@ class Extern { params { idx: int; } - return: own(char*); + return: own(ptr(char)); } } } diff --git a/src/tests/eolian/data/free_func.eo b/src/tests/eolian/data/free_func.eo index 156676d0af..5c10b24d87 100644 --- a/src/tests/eolian/data/free_func.eo +++ b/src/tests/eolian/data/free_func.eo @@ -15,8 +15,8 @@ struct Opaque1; struct @free(opaque_free) Opaque2; /* pointers */ -type Pointer1: char *; -type Pointer2: free(char *, ptr_free); +type Pointer1: ptr(char); +type Pointer2: free(ptr(char), ptr_free); class Free_Func { methods { @@ -24,7 +24,7 @@ class Free_Func { params { idx: int; } - return: own(char*); + return: own(ptr(char)); } } } diff --git a/src/tests/eolian/data/null.eo b/src/tests/eolian/data/null.eo index 749248d89e..ad872e0ace 100644 --- a/src/tests/eolian/data/null.eo +++ b/src/tests/eolian/data/null.eo @@ -2,10 +2,10 @@ class Null { methods { foo { params { - x: char *; - y: char * @nullable; - z: char * @optional; - w: char * @optional @nullable; + x: ptr(char); + y: ptr(char) @nullable; + z: ptr(char) @optional; + w: ptr(char) @optional @nullable; } } } diff --git a/src/tests/eolian/data/object_impl.eo b/src/tests/eolian/data/object_impl.eo index 47cc95ba89..abf1820d43 100644 --- a/src/tests/eolian/data/object_impl.eo +++ b/src/tests/eolian/data/object_impl.eo @@ -41,7 +41,7 @@ class Object_Impl (Base) { @inout b: char; @out c: double; } - return: char * (null); [[comment for method return]] + return: ptr(char) (null); [[comment for method return]] } foo2 @const { [[comment foo]] diff --git a/src/tests/eolian/data/override.eo b/src/tests/eolian/data/override.eo index 7ab1f7124c..01fa1108c1 100644 --- a/src/tests/eolian/data/override.eo +++ b/src/tests/eolian/data/override.eo @@ -38,7 +38,7 @@ class Override (Base) { params { @in idx: int; @out a: int (250); - @out str: char * (null); + @out str: ptr(char) (null); } } } diff --git a/src/tests/eolian/data/struct.eo b/src/tests/eolian/data/struct.eo index c701d26857..679ff5f220 100644 --- a/src/tests/eolian/data/struct.eo +++ b/src/tests/eolian/data/struct.eo @@ -23,10 +23,10 @@ class Struct { params { idx: int; } - return: own(char*); + return: own(ptr(char)); } bar { - return: Named *; + return: ptr(Named); } } } diff --git a/src/tests/eolian/data/typedef.eo b/src/tests/eolian/data/typedef.eo index 15ebbf7cc4..258595ae7b 100644 --- a/src/tests/eolian/data/typedef.eo +++ b/src/tests/eolian/data/typedef.eo @@ -1,5 +1,5 @@ type Evas.Coord: int; /* Simple type definition */ -type List_Objects: own(list); /* A little more complex */ +type List_Objects: own(list); /* A little more complex */ type Evas.Coord2: Evas.Coord; type Evas.Coord3: Evas.Coord2; @@ -35,7 +35,7 @@ class Typedef { params { idx: int; } - return: own(char*); + return: own(ptr(char)); } } } diff --git a/src/tests/eolian/data/var.eo b/src/tests/eolian/data/var.eo index 3b246a3e7d..93fcacc882 100644 --- a/src/tests/eolian/data/var.eo +++ b/src/tests/eolian/data/var.eo @@ -16,7 +16,7 @@ class Var { params { idx: int; } - return: own(char*); + return: own(ptr(char)); } } } diff --git a/src/tests/eolian/eolian_parsing.c b/src/tests/eolian/eolian_parsing.c index 328bb8a04d..1c61e9f2f7 100644 --- a/src/tests/eolian/eolian_parsing.c +++ b/src/tests/eolian/eolian_parsing.c @@ -451,7 +451,7 @@ START_TEST(eolian_complex_type) fail_if(!!eolian_type_next_type_get(type)); fail_if(!(type_name = eolian_type_c_type_get(type))); fail_if(!eolian_type_is_own(type)); - fail_if(strcmp(type_name, "Eo **")); + fail_if(strcmp(type_name, "Eo *")); eina_stringshare_del(type_name); /* Properties parameter type */ fail_if(!(iter = eolian_property_values_get(fid, EOLIAN_PROP_GET))); @@ -611,7 +611,7 @@ START_TEST(eolian_simple_parsing) /* Method */ fail_if(!(fid = eolian_class_function_get_by_name(class, "foo", EOLIAN_METHOD))); fail_if(!eolian_function_is_beta(fid)); - fail_if(eolian_type_is_ptr(eolian_function_return_type_get(fid, EOLIAN_METHOD))); + fail_if(!eolian_type_is_ptr(eolian_function_return_type_get(fid, EOLIAN_METHOD))); /* Function return */ tp = eolian_function_return_type_get(fid, EOLIAN_METHOD); fail_if(!tp); @@ -739,9 +739,8 @@ START_TEST(eolian_struct) /* use in function */ fail_if(!(func = eolian_class_function_get_by_name(class, "bar", EOLIAN_METHOD))); fail_if(!(type = eolian_function_return_type_get(func, EOLIAN_METHOD))); - fail_if(eolian_type_type_get(type) != EOLIAN_TYPE_POINTER); - fail_if(!(type = eolian_type_base_type_get(type))); fail_if(eolian_type_type_get(type) != EOLIAN_TYPE_REGULAR); + fail_if(!eolian_type_is_ptr(type)); fail_if(!(tdl = eolian_type_typedecl_get(type))); fail_if(eolian_typedecl_type_get(tdl) != EOLIAN_TYPEDECL_STRUCT); -- cgit v1.2.1