aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDave Andreoli <dave@gurumeditation.it>2018-01-16 20:53:20 +0100
committerDave Andreoli <dave@gurumeditation.it>2018-01-16 20:53:20 +0100
commit9160bfe901c5ec18e18f25998b1dcad1f77a3902 (patch)
treef4524adc00eee75aa3209b1cc2ab403d91e99986 /src
parenteina: make updating rectangle cache thread safe. (diff)
downloadefl-9160bfe901c5ec18e18f25998b1dcad1f77a3902.tar.gz
Pyolian: fix and tests for recent changes
q66: please leave the pyolian updating work to me, it's harder for me to fix wrong stuff instead of just implement myself ;)
Diffstat (limited to 'src')
-rw-r--r--src/scripts/pyolian/eolian.py25
-rw-r--r--src/scripts/pyolian/eolian_lib.py4
-rwxr-xr-xsrc/scripts/pyolian/test_eolian.py15
3 files changed, 38 insertions, 6 deletions
diff --git a/src/scripts/pyolian/eolian.py b/src/scripts/pyolian/eolian.py
index 9ac479807f..291865bdf4 100644
--- a/src/scripts/pyolian/eolian.py
+++ b/src/scripts/pyolian/eolian.py
@@ -283,7 +283,7 @@ class EolianBaseObject(object):
if c_obj_pointer is None:
return super().__new__(cls)
- # cache based on the c pointer value (assume the eolian db is stabe)
+ # cache based on the c pointer value (assume the eolian db is stable)
if isinstance(c_obj_pointer, c_void_p):
key = c_obj_pointer.value
elif isinstance(c_obj_pointer, int):
@@ -1059,9 +1059,23 @@ class Type(EolianBaseObject):
def builtin_type(self):
return Eolian_Type_Builtin_Type(lib.eolian_type_builtin_type_get(self._obj))
+ def c_type_get(self, ctype):
+ s = lib.eolian_type_c_type_get(self._obj, ctype)
+ ret = _str_to_py(s)
+ lib.eina_stringshare_del(c_void_p(s))
+ return ret
+
@cached_property
- def c_type(self):
- return _str_to_py(lib.eolian_type_c_type_get(self._obj))
+ def c_type_default(self):
+ return self.c_type_get(Eolian_C_Type_Type.DEFAULT)
+
+ @cached_property
+ def c_type_param(self):
+ return self.c_type_get(Eolian_C_Type_Type.PARAM)
+
+ @cached_property
+ def c_type_return(self):
+ return self.c_type_get(Eolian_C_Type_Type.RETURN)
@cached_property
def typedecl(self):
@@ -1127,7 +1141,10 @@ class Typedecl(EolianBaseObject):
@cached_property
def c_type(self):
- return _str_to_py(lib.eolian_typedecl_c_type_get(self._obj))
+ s = lib.eolian_typedecl_c_type_get(self._obj)
+ ret = _str_to_py(s)
+ lib.eina_stringshare_del(c_void_p(s))
+ return ret
@property
def namespaces(self):
diff --git a/src/scripts/pyolian/eolian_lib.py b/src/scripts/pyolian/eolian_lib.py
index 42bea97c56..78b3a70d94 100644
--- a/src/scripts/pyolian/eolian_lib.py
+++ b/src/scripts/pyolian/eolian_lib.py
@@ -506,7 +506,7 @@ lib.eolian_typedecl_is_extern.restype = c_bool
# EAPI Eina_Stringshare *eolian_typedecl_c_type_get(const Eolian_Typedecl *tp);
lib.eolian_typedecl_c_type_get.argtypes = [c_void_p,]
-lib.eolian_typedecl_c_type_get.restype = None
+lib.eolian_typedecl_c_type_get.restype = c_void_p # Stringshare TO BE FREED
# EAPI Eina_Stringshare *eolian_typedecl_name_get(const Eolian_Typedecl *tp);
lib.eolian_typedecl_name_get.argtypes = [c_void_p,]
@@ -573,7 +573,7 @@ lib.eolian_type_is_ptr.argtypes = [c_void_p,]
lib.eolian_type_is_ptr.restype = c_bool
# EAPI Eina_Stringshare *eolian_type_c_type_get(const Eolian_Type *tp, Eolian_C_Type_Type ctype);
-lib.eolian_type_c_type_get.argtypes = [c_void_p,]
+lib.eolian_type_c_type_get.argtypes = [c_void_p, c_int]
lib.eolian_type_c_type_get.restype = c_void_p # Stringshare TO BE FREED
# EAPI Eina_Stringshare *eolian_type_name_get(const Eolian_Type *tp);
diff --git a/src/scripts/pyolian/test_eolian.py b/src/scripts/pyolian/test_eolian.py
index a73fe5ac16..56a12967de 100755
--- a/src/scripts/pyolian/test_eolian.py
+++ b/src/scripts/pyolian/test_eolian.py
@@ -410,6 +410,7 @@ class TestEolianTypedecl(unittest.TestCase):
self.assertIsNone(td.function_pointer) # TODO find a better test
self.assertFalse(td.is_extern)
self.assertEqual(len(list(td.enum_fields)), 3)
+ self.assertEqual(td.c_type, 'enum Efl_Net_Http_Version { v1_0 = 100, v1_1 = 101, v2_0 = 200 }')
def test_typedecl_enum_field(self):
td = state.typedecl_enum_get_by_name('Efl.Net.Http.Version')
@@ -433,6 +434,7 @@ class TestEolianTypedecl(unittest.TestCase):
self.assertIsNone(td.function_pointer) # TODO find a better test
self.assertFalse(td.is_extern)
self.assertEqual(len(list(td.struct_fields)), 4)
+ self.assertEqual(td.c_type, 'struct Efl_Gfx_Color32 { uint8_t r; uint8_t g; uint8_t b; uint8_t a; }')
def test_typedecl_struct_field(self):
td = state.typedecl_struct_get_by_name('Efl.Gfx.Color32')
@@ -450,6 +452,7 @@ class TestEolianTypedecl(unittest.TestCase):
self.assertEqual(alias.full_name, 'Eina.Error')
self.assertIsInstance(alias.aliased_base, eolian.Type)
self.assertEqual(alias.aliased_base.name, 'int')
+ self.assertEqual(alias.c_type, 'typedef int Eina_Error')
class TestEolianType(unittest.TestCase):
@@ -474,6 +477,10 @@ class TestEolianType(unittest.TestCase):
self.assertIsNone(t.class_)
self.assertEqual(t, t.aliased_base) # TODO find a better test
+ self.assertEqual(t.c_type_default, 'double') # TODO find a better test
+ self.assertEqual(t.c_type_param, 'double')
+ self.assertEqual(t.c_type_return, 'double')
+
def test_type_regular(self):
cls = state.class_get_by_name('Efl.Gfx')
func = cls.function_get_by_name('geometry')
@@ -490,6 +497,10 @@ class TestEolianType(unittest.TestCase):
self.assertIsNone(t.class_)
self.assertEqual(t, t.aliased_base)
+ self.assertEqual(t.c_type_default, 'Eina_Rect') # TODO find a better test
+ self.assertEqual(t.c_type_param, 'Eina_Rect')
+ self.assertEqual(t.c_type_return, 'Eina_Rect')
+
td = t.typedecl
self.assertIsInstance(td, eolian.Typedecl)
self.assertEqual(td.full_name, 'Eina.Rect')
@@ -509,6 +520,10 @@ class TestEolianType(unittest.TestCase):
self.assertEqual(t.free_func, 'efl_del')
self.assertEqual(t, t.aliased_base)
+ self.assertEqual(t.c_type_default, 'Efl_Gfx *') # TODO find a better test
+ self.assertEqual(t.c_type_param, 'Efl_Gfx *')
+ self.assertEqual(t.c_type_return, 'Efl_Gfx *')
+
cls = t.class_
self.assertIsInstance(cls, eolian.Class)
self.assertEqual(cls.full_name, 'Efl.Gfx')