mirror of
				https://github.com/ytdl-org/youtube-dl.git
				synced 2025-10-29 09:26:20 -07:00 
			
		
		
		
	[swfinterp] Interpret yet more opcodes
This commit is contained in:
		
							
								
								
									
										24
									
								
								test/swftests/NeOperator.as
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								test/swftests/NeOperator.as
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,24 @@ | ||||
| // input: [] | ||||
| // output: 123 | ||||
|  | ||||
| package { | ||||
| public class NeOperator { | ||||
|     public static function main(): int { | ||||
|         var res:int = 0; | ||||
|         if (1 != 2) { | ||||
|             res += 3; | ||||
|         } else { | ||||
|             res += 4; | ||||
|         } | ||||
|         if (2 != 2) { | ||||
|             res += 10; | ||||
|         } else { | ||||
|             res += 20; | ||||
|         } | ||||
|         if (9 == 9) { | ||||
|             res += 100; | ||||
|         } | ||||
|         return res; | ||||
|     } | ||||
| } | ||||
| } | ||||
| @@ -393,7 +393,10 @@ class SWFInterpreter(object): | ||||
|                 self._classes_by_name, avm_class.variables]) | ||||
|             while True: | ||||
|                 opcode = _read_byte(coder) | ||||
|                 if opcode == 17:  # iftrue | ||||
|                 if opcode == 16:  # jump | ||||
|                     offset = s24() | ||||
|                     coder.seek(coder.tell() + offset) | ||||
|                 elif opcode == 17:  # iftrue | ||||
|                     offset = s24() | ||||
|                     value = stack.pop() | ||||
|                     if value: | ||||
| @@ -403,6 +406,20 @@ class SWFInterpreter(object): | ||||
|                     value = stack.pop() | ||||
|                     if not value: | ||||
|                         coder.seek(coder.tell() + offset) | ||||
|                 elif opcode == 19:  # ifeq | ||||
|                     offset = s24() | ||||
|                     value2 = stack.pop() | ||||
|                     value1 = stack.pop() | ||||
|                     if value2 == value1: | ||||
|                         coder.seek(coder.tell() + offset) | ||||
|                 elif opcode == 20:  # ifne | ||||
|                     offset = s24() | ||||
|                     value2 = stack.pop() | ||||
|                     value1 = stack.pop() | ||||
|                     if value2 != value1: | ||||
|                         coder.seek(coder.tell() + offset) | ||||
|                 elif opcode == 32:  # pushnull | ||||
|                     stack.append(None) | ||||
|                 elif opcode == 36:  # pushbyte | ||||
|                     v = _read_byte(coder) | ||||
|                     stack.append(v) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user