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)
Exemple #2
0
 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)
Exemple #3
0
 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)
Exemple #4
0
    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)