[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…
Reference in a new issue