IfElse builds an if-else statement.
(cond *Value, onTrue, onFalse func())
| 168 | |
| 169 | // IfElse builds an if-else statement. |
| 170 | func (b *Builder) IfElse(cond *Value, onTrue, onFalse func()) { |
| 171 | trueBlock := b.m.ctx.AddBasicBlock(b.function.llvm, "if_true") |
| 172 | var falseBlock llvm.BasicBlock |
| 173 | if onFalse != nil { |
| 174 | falseBlock = b.m.ctx.AddBasicBlock(b.function.llvm, "if_false") |
| 175 | } |
| 176 | endBlock := b.m.ctx.AddBasicBlock(b.function.llvm, "end_if") |
| 177 | if onFalse == nil { |
| 178 | falseBlock = endBlock |
| 179 | } |
| 180 | |
| 181 | b.llvm.CreateCondBr(cond.llvm, trueBlock, falseBlock) |
| 182 | |
| 183 | b.block(trueBlock, endBlock, onTrue) |
| 184 | |
| 185 | if onFalse != nil { |
| 186 | b.block(falseBlock, endBlock, onFalse) |
| 187 | } |
| 188 | |
| 189 | b.setInsertPointAtEnd(endBlock) |
| 190 | } |
| 191 | |
| 192 | // While builds a logic block with the following psuedocode: |
| 193 | // |
no test coverage detected