[swfinterp] Interpret yet more opcodes
This commit is contained in:
		
							parent
							
								
									0ab1ca5501
								
							
						
					
					
						commit
						e983cf5277
					
				
					 2 changed files with 42 additions and 1 deletions
				
			
		
							
								
								
									
										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])
 | 
					                self._classes_by_name, avm_class.variables])
 | 
				
			||||||
            while True:
 | 
					            while True:
 | 
				
			||||||
                opcode = _read_byte(coder)
 | 
					                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()
 | 
					                    offset = s24()
 | 
				
			||||||
                    value = stack.pop()
 | 
					                    value = stack.pop()
 | 
				
			||||||
                    if value:
 | 
					                    if value:
 | 
				
			||||||
| 
						 | 
					@ -403,6 +406,20 @@ class SWFInterpreter(object):
 | 
				
			||||||
                    value = stack.pop()
 | 
					                    value = stack.pop()
 | 
				
			||||||
                    if not value:
 | 
					                    if not value:
 | 
				
			||||||
                        coder.seek(coder.tell() + offset)
 | 
					                        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
 | 
					                elif opcode == 36:  # pushbyte
 | 
				
			||||||
                    v = _read_byte(coder)
 | 
					                    v = _read_byte(coder)
 | 
				
			||||||
                    stack.append(v)
 | 
					                    stack.append(v)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue