Например, у меня есть эта функция:
def max(a,b) {
if(a < b) return b;
if(a > b) return a;
}
Мне любопытно, как разобрать это в AST.
Если я это хорошо понимаю, то узел его тела должен возвращать ReturnInst *.
Но в моем AST это тело содержит два узла (как выражения), один для первого if и другой для другого.
Есть какой-то трюк, или дизайн с самого начала неправильный?
Редактировать: я только что нашел решение:
- CreateAlloca в начале тела.
- CreateStore и переходить к метке конца при каждом возврате.
- В конце метки вернуть переменную.
Это хорошая идея? А как прыгать / переходить с llvm?