Почему я сталкиваюсь с ошибкой: AttributeError: у объекта 'int' нет атрибута 'type'

Я использую llvmlite для своего проекта в сочетании с Pyvex. Я определил некоторые функции в llvmlite, как показано ниже:

def int32(val): 
    return ir.Constant(ir.IntType(32), val)


def put64(putoffset, val):
    llvmtmp = builder.gep(regtag, (int32(0), int32(putoffset)), True)
    return builder.store(val, llvmtmp)

Однако, когда я хочу вызвать эту функцию, используя следующий код:

for stmt in irsb.statements:
   if isinstance(stmt, pyvex.IRStmt.Put):
      putoffset = stmt.offset
      put64("t3", putoffset)

Я сталкиваюсь с ошибкой: AttributeError: у объекта 'int' нет атрибута 'type'

Кто-нибудь знает, как я могу решить эту проблему?

2 ответа

Я немного покопался. Проблема происходит на этой линии

return ir.Constant(ir.IntType(32), val) в вашем int32() функция.

Константа определяется как таковая в llvmlite:

 Constant(typ, constant)

тип это тип представленного значения (a:class:~llvmlite.ir.Type пример). константа - это значение Python, которое будет представлено. Какие типы Python разрешены для константы Какие типы Python разрешены для константы, зависит от типа.

Вместо того, чтобы передавать типы Python, вы просто передаете int а также string как val, попробуй поставить type() вокруг него.

return ir.Constant(ir.IntType(32), type(val))

Надеюсь это поможет

Я понимаю проблему. На самом деле проблема в том, что мы передаем строку функции, но она должна быть объектом llvmlite. Следовательно, python жалуется, что строки не имеют типа атрибута. Передав объект llvmlite, проблема будет решена.

Другие вопросы по тегам