Я пишу компилятор на Python, используя llvmlite
для создания промежуточного LLVM IR. Лексер и парсер закончены, теперь занимаюсь генерацией кода. Компилятор будет динамическим и слабо типизированным, поэтому мне нужно будет что-то делать во время выполнения, например, выделение. Для этого я уже реализовал некоторые функции на C, и теперь я хочу вызывать эти функции с помощью builder.call
из llvmlite.
Я не нашел документации или примеров того, как это сделать.
Эта функция - всего лишь простой пример, реальные функции намного больше.
С:
int some_function(int a)
{
return a + 4;
}
Питон:
...
main_ty = ir.FunctionType(ir.IntType(32), [])
func = ir.Function(module, main_ty, 'main')
block = func.append_basic_block('entry')
builder = ir.IRBuilder(block)
# I want to do something like this...
ret = builder.call(some_function, [ir.Constant(ir.IntType(32), 34)]);
...
Я мог бы написать функции напрямую, используя компоновщики llvmlite, но будет гораздо быстрее, чище и проще сделать это на C. Любая помощь приветствуется!