diff options
author | Armin Rigo <arigo@tunes.org> | 2015-04-27 17:26:22 +0200 |
---|---|---|
committer | Armin Rigo <arigo@tunes.org> | 2015-04-27 17:26:22 +0200 |
commit | 7d128f3eff9c7e25c6de0e5a948adc51fd5d86fd (patch) | |
tree | d414ee6be0ef711f798fa40f4b45a09108f85bc0 /cffi/model.py | |
parent | c1e6f9d84eb73ca530c6a91ba324045d4fc39aa5 (diff) | |
download | cffi-7d128f3eff9c7e25c6de0e5a948adc51fd5d86fd.tar.gz |
Check sizeof(global variables) when possible
Diffstat (limited to 'cffi/model.py')
-rw-r--r-- | cffi/model.py | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/cffi/model.py b/cffi/model.py index 7da9d85..5ec9931 100644 --- a/cffi/model.py +++ b/cffi/model.py @@ -31,6 +31,9 @@ class BaseTypeByIdentity(object): def has_c_name(self): return '$' not in self._get_c_name() + + def sizeof_enabled(self): + return False def get_cached_btype(self, ffi, finishlist, can_delay=False): try: @@ -121,6 +124,9 @@ class PrimitiveType(BaseType): def is_float_type(self): return self.ALL_PRIMITIVE_TYPES[self.name] == 'f' + def sizeof_enabled(self): + return True + def build_backend_type(self, ffi, finishlist): return global_cache(self, ffi, 'new_primitive_type', self.name) @@ -161,6 +167,9 @@ class RawFunctionType(BaseFunctionType): class FunctionPtrType(BaseFunctionType): _base_pattern = '(*&)(%s)' + def sizeof_enabled(self): + return True + def build_backend_type(self, ffi, finishlist): result = self.result.get_cached_btype(ffi, finishlist) args = [] @@ -186,6 +195,9 @@ class PointerType(BaseType): extra = self._base_pattern self.c_name_with_marker = totype.c_name_with_marker.replace('&', extra) + def sizeof_enabled(self): + return True + def build_backend_type(self, ffi, finishlist): BItem = self.totype.get_cached_btype(ffi, finishlist, can_delay=True) return global_cache(self, ffi, 'new_pointer_type', BItem) @@ -226,6 +238,9 @@ class ArrayType(BaseType): self.c_name_with_marker = ( self.item.c_name_with_marker.replace('&', brackets)) + def sizeof_enabled(self): + return self.item.sizeof_enabled() and self.length is not None + def resolve_length(self, newlength): return ArrayType(self.item, newlength) @@ -379,6 +394,9 @@ class StructOrUnion(StructOrUnionOrEnum): from . import ffiplatform raise ffiplatform.VerificationMissing(self._get_c_name()) + def sizeof_enabled(self): + return self.fldtypes is not None + def build_backend_type(self, ffi, finishlist): self.check_not_partial() finishlist.append(self) @@ -407,6 +425,9 @@ class EnumType(StructOrUnionOrEnum): self.baseinttype = baseinttype self.build_c_name_with_marker() + def sizeof_enabled(self): + return True # not strictly true, but external enums are obscure + def force_the_name(self, forcename): StructOrUnionOrEnum.force_the_name(self, forcename) if self.forcename is None: |