mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 20:22:45 +00:00 
			
		
		
		
	LibRegex: Correct the alternative matching order when one is empty
Previously we were compiling `/a|/` into what effectively would be `/|a`, which is clearly incorrect.
This commit is contained in:
		
							parent
							
								
									76e99fa6c8
								
							
						
					
					
						commit
						3b0943d24c
					
				
					 2 changed files with 22 additions and 7 deletions
				
			
		|  | @ -450,17 +450,17 @@ void Optimizer::append_alternation(ByteCode& target, ByteCode&& left, ByteCode&& | |||
|         if (left_is_empty && right_is_empty) | ||||
|             return; | ||||
| 
 | ||||
|         // ForkJump right (+ left.size() + 2 + right.size())
 | ||||
|         // (left)
 | ||||
|         // Jump end (+ right.size())
 | ||||
|         // ForkJump left (+ 2 + right.size())
 | ||||
|         // (right)
 | ||||
|         // Jump end (+ left.size())
 | ||||
|         // (left)
 | ||||
|         // LABEL end
 | ||||
|         target.append(static_cast<ByteCodeValueType>(OpCodeId::ForkJump)); | ||||
|         target.append(left.size() + 2 + right.size()); | ||||
|         target.extend(move(left)); | ||||
|         target.append(static_cast<ByteCodeValueType>(OpCodeId::Jump)); | ||||
|         target.append(right.size()); | ||||
|         target.append(2 + right.size()); | ||||
|         target.extend(move(right)); | ||||
|         target.append(static_cast<ByteCodeValueType>(OpCodeId::Jump)); | ||||
|         target.append(left.size()); | ||||
|         target.extend(move(left)); | ||||
|         return; | ||||
|     } | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Ali Mohammad Pur
						Ali Mohammad Pur