def new_values(self, fields={}): args = [] for v in fields.values(): if type(v) is int: args.append(libcoreir_c.COREValueInt(self.context, ct.c_int(v))) elif type(v) is str: args.append( libcoreir_c.COREValueString(self.context, ct.c_char_p(str.encode(v)))) elif type(v) is bool: args.append( libcoreir_c.COREValueBool(self.context, ct.c_bool(v))) elif isinstance(v, BitVector): hex_string = "{0:d}'h{1:x}".format(len(v), v.as_uint()) args.append( libcoreir_c.COREValueBitVectorString( self.context, hex_string.encode())) elif isinstance(v, coreir.Module): args.append(libcoreir_c.COREValueModule(self.context, v.ptr)) elif isinstance(v, coreir.Type): args.append( libcoreir_c.COREValueCoreIRType(self.context, v.ptr)) else: raise NotImplementedError(v, type(v)) keys = (ct.c_char_p * len(fields))(*(str.encode(key) for key in fields.keys())) values = (COREValue_p * len(fields))(*(arg for arg in args)) gen_args = libcoreir_c.CORENewMap(self.context, ct.cast(keys, ct.c_void_p), ct.cast(values, ct.c_void_p), len(fields), COREMapKind_STR2VALUE_MAP) return Values(gen_args, self)
def newParams(self, fields={}): keys = (ct.c_char_p * len(fields))(*(str.encode(key) for key in fields.keys())) values = (COREType_p * len(fields))(*(value for value in fields.values())) gen_params = libcoreir_c.CORENewMap(self.context, ct.cast(keys, ct.c_void_p), ct.cast(values, ct.c_void_p), len(fields), COREMapKind_STR2PARAM_MAP) return Params(gen_params, self)
def Record(self, fields): keys = [] values = [] for key, value in fields.items(): keys.append(str.encode(key)) values.append(value.ptr) keys = (ct.c_char_p * len(fields))(*keys) values = (COREType_p * len(fields))(*values) record_params = libcoreir_c.CORENewMap( self.context, ct.cast(keys, ct.c_void_p), ct.cast(values, ct.c_void_p), len(fields), COREMapKind_STR2TYPE_ORDEREDMAP) return Type(libcoreir_c.CORERecord(self.context, record_params), self)
def newArgs(self, fields={}): args = [] for v in fields.values(): if type(v) is int: args.append(libcoreir_c.COREArgInt(self.context, ct.c_int(v))) elif type(v) is str: args.append( libcoreir_c.COREArgString(self.context, ct.c_char_p(str.encode(v)))) else: raise NotImplementedError() keys = (ct.c_char_p * len(fields))(*(str.encode(key) for key in fields.keys())) values = (COREArg_p * len(fields))(*(arg for arg in args)) gen_args = libcoreir_c.CORENewMap(self.context, ct.cast(keys, ct.c_void_p), ct.cast(values, ct.c_void_p), len(fields), COREMapKind_STR2ARG_MAP) return Args(gen_args, self)