mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 17:02:45 +00:00 
			
		
		
		
	LibJS: Stop generating switch case statements on block termination
After we terminate a block (e.g. break, continue), we cannot generate
anymore bytecode for the block. This caused us to crash with this
example code:
```
a = 0;
switch (a) {
    case 0:
        break;
        console.log("hello world");
}
```
Anything after a block terminating instruction is considered
unreachable code, so we can safely skip any statements after it.
			
			
This commit is contained in:
		
							parent
							
								
									6f29ccaa5a
								
							
						
					
					
						commit
						1fc6bbcdc3
					
				
					 1 changed files with 2 additions and 0 deletions
				
			
		|  | @ -1627,6 +1627,8 @@ Bytecode::CodeGenerationErrorOr<void> SwitchStatement::generate_bytecode(Bytecod | ||||||
|         generator.emit<Bytecode::Op::LoadImmediate>(js_undefined()); |         generator.emit<Bytecode::Op::LoadImmediate>(js_undefined()); | ||||||
|         for (auto& statement : switch_case.children()) { |         for (auto& statement : switch_case.children()) { | ||||||
|             TRY(statement.generate_bytecode(generator)); |             TRY(statement.generate_bytecode(generator)); | ||||||
|  |             if (generator.is_current_block_terminated()) | ||||||
|  |                 break; | ||||||
|         } |         } | ||||||
|         if (!generator.is_current_block_terminated()) { |         if (!generator.is_current_block_terminated()) { | ||||||
|             auto next_block = current_block; |             auto next_block = current_block; | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Luke Wilde
						Luke Wilde