'Parse the C type given as a string and return the
corresponding <ctype> object.
It can also be used on \'cdata\' instance to get its C type.'

def typeof(self, cdecl):

    if isinstance(cdecl, basestring):
        return self._typeof(cdecl)
    if isinstance(cdecl, self.CData):
        return self._backend.typeof(cdecl)
    if isinstance(cdecl, types.BuiltinFunctionType):
        res = _builtin_function_type(cdecl)
        if (res is not None):
            return res
    if (isinstance(cdecl, types.FunctionType) and hasattr(cdecl, '_cffi_base_type')):
        with self._lock:
            return self._get_cached_btype(cdecl._cffi_base_type)
    raise TypeError(type(cdecl))
