mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 09:52:44 +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()); | ||||
|         for (auto& statement : switch_case.children()) { | ||||
|             TRY(statement.generate_bytecode(generator)); | ||||
|             if (generator.is_current_block_terminated()) | ||||
|                 break; | ||||
|         } | ||||
|         if (!generator.is_current_block_terminated()) { | ||||
|             auto next_block = current_block; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Luke Wilde
						Luke Wilde