Ich schreibe einen Compiler in Python mit llvmlite
, um Zwischen LLVM IR zu generieren. Lexer und Parser sind fertig, jetzt mache ich Code-Generierung. Der Compiler wird dynamisch und schwach typisiert sein, also muss ich etwas zur Laufzeit machen, wie die Zuweisung. Dafür habe ich bereits einige Funktionen in C implementiert, und jetzt möchte ich diese Funktionen mit builder.call
von llvmlite aufrufen.Link C in llvmlite
Ich habe keine Dokumentation oder Beispiele gefunden, wie dies zu tun ist.
Diese Funktion ist nur ein einfaches Beispiel, die echten sind viel größer.
C:
int some_function(int a)
{
return a + 4;
}
Python:
...
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)]);
...
ich die Funktionen direkt llvmlite Builder verwenden schreiben könnte, werden aber viel schnell sein, sauberer und einfach tun es in C. Jede Hilfe ist willkommen!
Mit welchen Tools haben Sie Lexer & Parser entwickelt? –