Я хочу определить функцию в сборке LLVM, которая принимает в качестве аргумента:
Эта функция должна выполнить некоторую предварительную обработку, найти правильную функцию для идентификатора, вызвать ее с помощью vararg и вернуть ее результат.
Что-то вроде:
define ??? @1 (i32 %identifier, ...vararg...)
{
switch i32 %identifier, label %def, i32 1, label %a
a:
%1 = tail call @function_for_a, ...vararg...
ret ??? %1
def:
ret void
}
Кажется, это невозможно. Есть ли еще способ сделать это? Я думаю, что это должно быть возможно с использованием простого ассемблера.
Это функция диспетчеризации для объектно-ориентированного языка. Я бы предпочел, чтобы это было быстро.
Я бы хотел способ:
Вторая функция будет затем выполняться вместо первой (это хвостовой вызов), но со списком аргументов, который не известен точно первой функции (vararg первой функции).