Don't generate code for empty `else` blocks.
Chris Pressey
9 years ago
177 | 177 |
context1 = context.clone()
|
178 | 178 |
context2 = context.clone()
|
179 | 179 |
analyze_block(instr.block1, context1, routines)
|
180 | |
analyze_block(instr.block2, context2, routines)
|
|
180 |
if instr.block2 is not None:
|
|
181 |
analyze_block(instr.block2, context2, routines)
|
181 | 182 |
for ref in context1.each_initialized():
|
182 | 183 |
context2.assert_initialized(ref, exception_class=InconsistentInitializationError)
|
183 | 184 |
for ref in context2.each_initialized():
|
175 | 175 |
else_label = Label('else_label')
|
176 | 176 |
self.emitter.emit(cls(Relative(else_label)))
|
177 | 177 |
self.compile_block(instr.block1)
|
178 | |
if instr.block2:
|
|
178 |
if instr.block2 is not None:
|
179 | 179 |
end_label = Label('end_label')
|
180 | 180 |
self.emitter.emit(JMP(Absolute(end_label)))
|
181 | 181 |
self.emitter.resolve_label(else_label)
|
171 | 171 |
block2 = None
|
172 | 172 |
if self.scanner.consume('else'):
|
173 | 173 |
block2 = self.block()
|
174 | |
else:
|
175 | |
block2 = Block(instrs=[])
|
176 | 174 |
return Instr(opcode='if', dest=None, src=src, block1=block1, block2=block2)
|
177 | 175 |
elif self.scanner.token in ("ld", "add", "sub", "cmp", "and", "or", "xor"):
|
178 | 176 |
opcode = self.scanner.token
|