def str_type(ctype, defined_types): if ctype in defined_types: return defined_types[ctype] elif ctype in type_map: return type_map[ctype] elif isroutine(ctype): return None elif isinstance(ctype, cl.contextual_memory): base_str = str_type(ctype.ctype, defined_types) return '%s %s*' % (ctype.qualifier, base_str) elif isinstance(ctype, cltype): return ctype.ctype_string() elif isinstance(ctype, str): return ctype else: format = type_format(ctype) return cdefn(format)
def mutatePrint(self, node): str_formats = [] for val in node.values: if val.ctype == str: str_formats.append('%s') else: cfmt = type_format(val.ctype) fmt = STR_FORMAT_MAP[cfmt] str_formats.append(fmt) if node.nl: str_formats.append('\\n') cstr = cast.CStr(" ".join(str_formats), str) arg = cast.CTypeCast(cstr, 'const char*') vlaue = cast.CCall(cast.CName('printf', ast.Load(), None), [arg] + node.values, [], None) return ast.Expr(vlaue)
def is_vetor_type(ctype): return vector_len.match(type_format(ctype)) is not None