[Swfdec] 4 commits - libswfdec/swfdec_as_interpret.c test/trace

Benjamin Otte company at kemper.freedesktop.org
Wed Nov 14 09:02:57 PST 2007


 libswfdec/swfdec_as_interpret.c        |    3 
 test/trace/Makefile.am                 |   18 ++++
 test/trace/callmethod-this-5.swf       |binary
 test/trace/callmethod-this-5.swf.trace |  136 +++++++++++++++++++++++++++++++++
 test/trace/callmethod-this-6.swf       |binary
 test/trace/callmethod-this-6.swf.trace |  134 ++++++++++++++++++++++++++++++++
 test/trace/callmethod-this-7.swf       |binary
 test/trace/callmethod-this-7.swf.trace |  134 ++++++++++++++++++++++++++++++++
 test/trace/callmethod-this-8.swf       |binary
 test/trace/callmethod-this-8.swf.trace |  134 ++++++++++++++++++++++++++++++++
 test/trace/callmethod-this.as          |   26 ++++++
 test/trace/super-existance-5.swf       |binary
 test/trace/super-existance-5.swf.trace |   19 ++++
 test/trace/super-existance-6.swf       |binary
 test/trace/super-existance-6.swf.trace |   47 +++++++++++
 test/trace/super-existance-7.swf       |binary
 test/trace/super-existance-7.swf.trace |   47 +++++++++++
 test/trace/super-existance-8.swf       |binary
 test/trace/super-existance-8.swf.trace |   47 +++++++++++
 test/trace/super-existance.as          |   63 +++++++++++++++
 20 files changed, 808 insertions(+)

New commits:
commit 58ffc9e42093a14fec09430f5d309745389ca634
Author: Benjamin Otte <otte at gnome.org>
Date:   Wed Nov 14 17:49:55 2007 +0100

    add a test checking the existance of a super object
    
    This test was responsible for redoing the super object handling. :)

diff --git a/test/trace/Makefile.am b/test/trace/Makefile.am
index 94e03bb..11ea231 100644
--- a/test/trace/Makefile.am
+++ b/test/trace/Makefile.am
@@ -2045,6 +2045,15 @@ EXTRA_DIST = \
 	super-equals-this-7.swf.trace \
 	super-equals-this-8.swf \
 	super-equals-this-8.swf.trace \
+	super-existance.as \
+	super-existance-5.swf \
+	super-existance-5.swf.trace \
+	super-existance-6.swf \
+	super-existance-6.swf.trace \
+	super-existance-7.swf \
+	super-existance-7.swf.trace \
+	super-existance-8.swf \
+	super-existance-8.swf.trace \
 	super-missing.as \
 	super-missing-5.swf \
 	super-missing-5.swf.trace \
diff --git a/test/trace/super-existance-5.swf b/test/trace/super-existance-5.swf
new file mode 100644
index 0000000..50eae55
Binary files /dev/null and b/test/trace/super-existance-5.swf differ
diff --git a/test/trace/super-existance-5.swf.trace b/test/trace/super-existance-5.swf.trace
new file mode 100644
index 0000000..57f41ab
--- /dev/null
+++ b/test/trace/super-existance-5.swf.trace
@@ -0,0 +1,19 @@
+undefined
+>>> CallFunction bar ()
+bar
+undefined
+calling last function's super object: 
+>>> CallMethod bar ()
+calling last function's super object: 
+>>> this.bar ()
+bar
+undefined
+calling last function's super object: 
+>>> new bar ()
+bar
+undefined
+calling last function's super object: 
+>>> new this.bar ()
+bar
+undefined
+calling last function's super object: 
diff --git a/test/trace/super-existance-6.swf b/test/trace/super-existance-6.swf
new file mode 100644
index 0000000..6ceeb52
Binary files /dev/null and b/test/trace/super-existance-6.swf differ
diff --git a/test/trace/super-existance-6.swf.trace b/test/trace/super-existance-6.swf.trace
new file mode 100644
index 0000000..921bf5e
--- /dev/null
+++ b/test/trace/super-existance-6.swf.trace
@@ -0,0 +1,47 @@
+undefined
+>>> CallFunction bar ()
+bar
+undefined
+calling last function's super object: 
+>>> CallMethod bar ()
+calling last function's super object: 
+>>> this.bar ()
+bar
+[object Object]
+calling last function's super object: _level0
+>>> new bar ()
+bar
+[object Object]
+foo
+[object Object]
+[type Function]
+fuz
+foo
+[object Object]
+[type Function]
+fuz
+calling last function's super object: [object Object]
+foo
+[object Object]
+[type Function]
+fuz
+>>> new this.bar ()
+bar
+[object Object]
+foo
+[object Object]
+[type Function]
+fuz
+foo
+[object Object]
+[type Function]
+fuz
+foo
+[object Object]
+[type Function]
+fuz
+calling last function's super object: [object Object]
+foo
+[object Object]
+[type Function]
+fuz
diff --git a/test/trace/super-existance-7.swf b/test/trace/super-existance-7.swf
new file mode 100644
index 0000000..e907c3f
Binary files /dev/null and b/test/trace/super-existance-7.swf differ
diff --git a/test/trace/super-existance-7.swf.trace b/test/trace/super-existance-7.swf.trace
new file mode 100644
index 0000000..17dc3dd
--- /dev/null
+++ b/test/trace/super-existance-7.swf.trace
@@ -0,0 +1,47 @@
+undefined
+>>> CallFunction bar ()
+bar
+undefined
+calling last function's super object: undefined
+>>> CallMethod bar ()
+calling last function's super object: undefined
+>>> this.bar ()
+bar
+[object Object]
+calling last function's super object: _level0
+>>> new bar ()
+bar
+[object Object]
+foo
+[object Object]
+[type Function]
+fuz
+foo
+[object Object]
+[type Function]
+fuz
+calling last function's super object: [object Object]
+foo
+[object Object]
+[type Function]
+fuz
+>>> new this.bar ()
+bar
+[object Object]
+foo
+[object Object]
+[type Function]
+fuz
+foo
+[object Object]
+[type Function]
+fuz
+foo
+[object Object]
+[type Function]
+fuz
+calling last function's super object: [object Object]
+foo
+[object Object]
+[type Function]
+fuz
diff --git a/test/trace/super-existance-8.swf b/test/trace/super-existance-8.swf
new file mode 100644
index 0000000..b46bb16
Binary files /dev/null and b/test/trace/super-existance-8.swf differ
diff --git a/test/trace/super-existance-8.swf.trace b/test/trace/super-existance-8.swf.trace
new file mode 100644
index 0000000..17dc3dd
--- /dev/null
+++ b/test/trace/super-existance-8.swf.trace
@@ -0,0 +1,47 @@
+undefined
+>>> CallFunction bar ()
+bar
+undefined
+calling last function's super object: undefined
+>>> CallMethod bar ()
+calling last function's super object: undefined
+>>> this.bar ()
+bar
+[object Object]
+calling last function's super object: _level0
+>>> new bar ()
+bar
+[object Object]
+foo
+[object Object]
+[type Function]
+fuz
+foo
+[object Object]
+[type Function]
+fuz
+calling last function's super object: [object Object]
+foo
+[object Object]
+[type Function]
+fuz
+>>> new this.bar ()
+bar
+[object Object]
+foo
+[object Object]
+[type Function]
+fuz
+foo
+[object Object]
+[type Function]
+fuz
+foo
+[object Object]
+[type Function]
+fuz
+calling last function's super object: [object Object]
+foo
+[object Object]
+[type Function]
+fuz
diff --git a/test/trace/super-existance.as b/test/trace/super-existance.as
new file mode 100644
index 0000000..3ef47c8
--- /dev/null
+++ b/test/trace/super-existance.as
@@ -0,0 +1,63 @@
+// makeswf -v 7 -s 200x150 -r 1 -o movie23.swf movie23.as
+
+trace (super);
+fuz = function () {
+  trace ("fuz");
+};
+foo = function () extends fuz {
+  trace ("foo");
+  trace (super);
+  trace (super.toString);
+  super ();
+};
+bar = function () extends foo {
+  trace ("bar");
+  trace (super);
+  if (huh) {
+    asm {
+      push 0, "huh"
+      getvariable
+      push undefined
+      callmethod
+    };
+  }
+  huh = super;
+  asm {
+    push 0, "super"
+    callfunction
+    pop
+    push 0, "super"
+    getvariable
+    push undefined
+    callmethod
+    pop
+  };
+};
+function call_huh () {
+  trace ("calling last function's super object: " + huh);
+  huh ();
+};
+
+trace (">>> CallFunction bar ()");
+bar ();
+call_huh ();
+trace (">>> CallMethod bar ()");
+asm {
+  push 0, "super"
+  getvariable
+  push undefined
+  callmethod
+  pop
+};
+call_huh ();
+trace (">>> this.bar ()");
+this.bar ();
+call_huh ();
+trace (">>> new bar ()");
+x = new bar ();
+call_huh ();
+trace (">>> new this.bar ()");
+x = new this.bar ();
+call_huh ();
+
+loadMovie ("fscommand:quit", "");
commit a33dd105506e04f554e1188d93e2de3c19c53327
Author: Benjamin Otte <otte at gnome.org>
Date:   Wed Nov 14 17:47:19 2007 +0100

    add a test for CallMethod and which objects are allowe as this object

diff --git a/test/trace/Makefile.am b/test/trace/Makefile.am
index 4650b7b..94e03bb 100644
--- a/test/trace/Makefile.am
+++ b/test/trace/Makefile.am
@@ -228,6 +228,15 @@ EXTRA_DIST = \
 	callfunction-stack.as \
 	callfunction-stack.swf \
 	callfunction-stack.swf.trace \
+	callmethod-this.as \
+	callmethod-this-5.swf \
+	callmethod-this-5.swf.trace \
+	callmethod-this-6.swf \
+	callmethod-this-6.swf.trace \
+	callmethod-this-7.swf \
+	callmethod-this-7.swf.trace \
+	callmethod-this-8.swf \
+	callmethod-this-8.swf.trace \
 	callmethod-undefined-this-5.swf \
 	callmethod-undefined-this-5.swf.trace \
 	callmethod-undefined-this-6.swf \
diff --git a/test/trace/callmethod-this-5.swf b/test/trace/callmethod-this-5.swf
new file mode 100644
index 0000000..4766808
Binary files /dev/null and b/test/trace/callmethod-this-5.swf differ
diff --git a/test/trace/callmethod-this-5.swf.trace b/test/trace/callmethod-this-5.swf.trace
new file mode 100644
index 0000000..d930251
--- /dev/null
+++ b/test/trace/callmethod-this-5.swf.trace
@@ -0,0 +1,136 @@
+Check which objects work as this property for a CallMethod action
+valueOf called
+toString called
+toString called with 
+valueOf called with 
+0: valueOf!
+1: valueOf!
+2: valueOf!
+3: valueOf!
+4: valueOf!
+5: valueOf!
+6: valueOf!
+7: valueOf!
+8: valueOf!
+9: valueOf!
+10: valueOf!
+11: valueOf!
+12: valueOf!
+13: valueOf!
+14: valueOf!
+15: valueOf!
+16: valueOf!
+17: valueOf!
+18: valueOf!
+19: valueOf!
+20: valueOf!
+21: valueOf!
+22: valueOf!
+22: toString!
+23: valueOf!
+24: valueOf!
+24: toString!
+25: valueOf!
+25: toString!
+26: valueOf!
+26: toString!
+27: valueOf!
+27: toString!
+Calling with (0)  (undefined)
+undefined
+undefined
+undefined
+Calling with (1) null (null)
+Calling with (2) true (boolean)
+Calling with (3) false (boolean)
+Calling with (4) 0 (number)
+Calling with (5) 1 (number)
+Calling with (6) 0.5 (number)
+Calling with (7) -1 (number)
+Calling with (8) -0.5 (number)
+Calling with (9) Infinity (number)
+Calling with (10) -Infinity (number)
+Calling with (11) NaN (number)
+Calling with (12)  (string)
+undefined
+undefined
+undefined
+Calling with (13) 0 (string)
+Calling with (14) -0 (string)
+Calling with (15) 0.0 (string)
+Calling with (16) 1 (string)
+Calling with (17) Hello World! (string)
+Calling with (18) true (string)
+Calling with (19) _level0 (string)
+Calling with (20) äöü (string)
+Calling with (21) _level0 (movieclip)
+Calling with (22) [object Object] (object)
+Calling with (23)  (undefined)
+undefined
+undefined
+undefined
+Calling with (24) [type Object] (object)
+toString called
+Calling with (25) [type Object] (object)
+toString called with 
+Calling with (26) [object Object] (object)
+Calling with (27)  (object)
+Calling with (28)  (object)
+0: toString!
+Calling with (29) null (object)
+1: toString!
+Calling with (30) true (object)
+2: toString!
+Calling with (31) false (object)
+3: toString!
+Calling with (32) 0 (object)
+4: toString!
+Calling with (33) 1 (object)
+5: toString!
+Calling with (34) 0.5 (object)
+6: toString!
+Calling with (35) -1 (object)
+7: toString!
+Calling with (36) -0.5 (object)
+8: toString!
+Calling with (37) Infinity (object)
+9: toString!
+Calling with (38) -Infinity (object)
+10: toString!
+Calling with (39) NaN (object)
+11: toString!
+Calling with (40)  (object)
+12: toString!
+undefined
+undefined
+undefined
+Calling with (41) 0 (object)
+13: toString!
+Calling with (42) -0 (object)
+14: toString!
+Calling with (43) 0.0 (object)
+15: toString!
+Calling with (44) 1 (object)
+16: toString!
+Calling with (45) Hello World! (object)
+17: toString!
+Calling with (46) true (object)
+18: toString!
+Calling with (47) _level0 (object)
+19: toString!
+Calling with (48) äöü (object)
+20: toString!
+Calling with (49) _level0 (object)
+21: toString!
+Calling with (50) [type Object] (object)
+22: toString!
+Calling with (51)  (object)
+23: toString!
+Calling with (52) [type Object] (object)
+24: toString!
+Calling with (53) [type Object] (object)
+25: toString!
+Calling with (54) [type Object] (object)
+26: toString!
+Calling with (55) [type Object] (object)
+27: toString!
diff --git a/test/trace/callmethod-this-6.swf b/test/trace/callmethod-this-6.swf
new file mode 100644
index 0000000..b7424a4
Binary files /dev/null and b/test/trace/callmethod-this-6.swf differ
diff --git a/test/trace/callmethod-this-6.swf.trace b/test/trace/callmethod-this-6.swf.trace
new file mode 100644
index 0000000..c36cb4a
--- /dev/null
+++ b/test/trace/callmethod-this-6.swf.trace
@@ -0,0 +1,134 @@
+Check which objects work as this property for a CallMethod action
+valueOf called
+toString called
+toString called with 
+valueOf called with 
+0: valueOf!
+1: valueOf!
+2: valueOf!
+3: valueOf!
+4: valueOf!
+5: valueOf!
+6: valueOf!
+7: valueOf!
+8: valueOf!
+9: valueOf!
+10: valueOf!
+11: valueOf!
+12: valueOf!
+13: valueOf!
+14: valueOf!
+15: valueOf!
+16: valueOf!
+17: valueOf!
+18: valueOf!
+19: valueOf!
+20: valueOf!
+21: valueOf!
+22: valueOf!
+22: toString!
+23: valueOf!
+23: toString!
+24: valueOf!
+24: toString!
+25: valueOf!
+25: toString!
+26: valueOf!
+26: toString!
+27: valueOf!
+27: toString!
+Calling with (0)  (undefined)
+undefined
+[type Function]
+undefined
+Calling with (1) null (null)
+Calling with (2) true (boolean)
+Calling with (3) false (boolean)
+Calling with (4) 0 (number)
+Calling with (5) 1 (number)
+Calling with (6) 0.5 (number)
+Calling with (7) -1 (number)
+Calling with (8) -0.5 (number)
+Calling with (9) Infinity (number)
+Calling with (10) -Infinity (number)
+Calling with (11) NaN (number)
+Calling with (12)  (string)
+undefined
+[type Function]
+undefined
+Calling with (13) 0 (string)
+Calling with (14) -0 (string)
+Calling with (15) 0.0 (string)
+Calling with (16) 1 (string)
+Calling with (17) Hello World! (string)
+Calling with (18) true (string)
+Calling with (19) _level0 (string)
+Calling with (20) äöü (string)
+Calling with (21) _level0 (movieclip)
+Calling with (22) [object Object] (object)
+Calling with (23) [type Function] (function)
+Calling with (24) [type Object] (object)
+toString called
+Calling with (25) [type Object] (object)
+toString called with 
+Calling with (26) [object Object] (object)
+Calling with (27)  (object)
+Calling with (28)  (object)
+0: toString!
+Calling with (29) null (object)
+1: toString!
+Calling with (30) true (object)
+2: toString!
+Calling with (31) false (object)
+3: toString!
+Calling with (32) 0 (object)
+4: toString!
+Calling with (33) 1 (object)
+5: toString!
+Calling with (34) 0.5 (object)
+6: toString!
+Calling with (35) -1 (object)
+7: toString!
+Calling with (36) -0.5 (object)
+8: toString!
+Calling with (37) Infinity (object)
+9: toString!
+Calling with (38) -Infinity (object)
+10: toString!
+Calling with (39) NaN (object)
+11: toString!
+Calling with (40)  (object)
+12: toString!
+undefined
+[type Function]
+undefined
+Calling with (41) 0 (object)
+13: toString!
+Calling with (42) -0 (object)
+14: toString!
+Calling with (43) 0.0 (object)
+15: toString!
+Calling with (44) 1 (object)
+16: toString!
+Calling with (45) Hello World! (object)
+17: toString!
+Calling with (46) true (object)
+18: toString!
+Calling with (47) _level0 (object)
+19: toString!
+Calling with (48) äöü (object)
+20: toString!
+Calling with (49) _level0 (object)
+21: toString!
+Calling with (50) [type Object] (object)
+22: toString!
+Calling with (51) [type Object] (object)
+23: toString!
+Calling with (52) [type Object] (object)
+24: toString!
+Calling with (53) [type Object] (object)
+25: toString!
+Calling with (54) [type Object] (object)
+26: toString!
+Calling with (55) [type Object] (object)
+27: toString!
diff --git a/test/trace/callmethod-this-7.swf b/test/trace/callmethod-this-7.swf
new file mode 100644
index 0000000..0a45513
Binary files /dev/null and b/test/trace/callmethod-this-7.swf differ
diff --git a/test/trace/callmethod-this-7.swf.trace b/test/trace/callmethod-this-7.swf.trace
new file mode 100644
index 0000000..6d9d5a5
--- /dev/null
+++ b/test/trace/callmethod-this-7.swf.trace
@@ -0,0 +1,134 @@
+Check which objects work as this property for a CallMethod action
+valueOf called
+toString called
+toString called with 
+valueOf called with 
+0: valueOf!
+1: valueOf!
+2: valueOf!
+3: valueOf!
+4: valueOf!
+5: valueOf!
+6: valueOf!
+7: valueOf!
+8: valueOf!
+9: valueOf!
+10: valueOf!
+11: valueOf!
+12: valueOf!
+13: valueOf!
+14: valueOf!
+15: valueOf!
+16: valueOf!
+17: valueOf!
+18: valueOf!
+19: valueOf!
+20: valueOf!
+21: valueOf!
+22: valueOf!
+22: toString!
+23: valueOf!
+23: toString!
+24: valueOf!
+24: toString!
+25: valueOf!
+25: toString!
+26: valueOf!
+26: toString!
+27: valueOf!
+27: toString!
+Calling with (0) undefined (undefined)
+undefined
+[type Function]
+undefined
+Calling with (1) null (null)
+Calling with (2) true (boolean)
+Calling with (3) false (boolean)
+Calling with (4) 0 (number)
+Calling with (5) 1 (number)
+Calling with (6) 0.5 (number)
+Calling with (7) -1 (number)
+Calling with (8) -0.5 (number)
+Calling with (9) Infinity (number)
+Calling with (10) -Infinity (number)
+Calling with (11) NaN (number)
+Calling with (12)  (string)
+undefined
+[type Function]
+undefined
+Calling with (13) 0 (string)
+Calling with (14) -0 (string)
+Calling with (15) 0.0 (string)
+Calling with (16) 1 (string)
+Calling with (17) Hello World! (string)
+Calling with (18) true (string)
+Calling with (19) _level0 (string)
+Calling with (20) äöü (string)
+Calling with (21) _level0 (movieclip)
+Calling with (22) [object Object] (object)
+Calling with (23) [type Function] (function)
+Calling with (24) [type Object] (object)
+toString called
+Calling with (25) [type Object] (object)
+toString called with 
+Calling with (26) [object Object] (object)
+Calling with (27) undefined (object)
+Calling with (28) undefined (object)
+0: toString!
+Calling with (29) null (object)
+1: toString!
+Calling with (30) true (object)
+2: toString!
+Calling with (31) false (object)
+3: toString!
+Calling with (32) 0 (object)
+4: toString!
+Calling with (33) 1 (object)
+5: toString!
+Calling with (34) 0.5 (object)
+6: toString!
+Calling with (35) -1 (object)
+7: toString!
+Calling with (36) -0.5 (object)
+8: toString!
+Calling with (37) Infinity (object)
+9: toString!
+Calling with (38) -Infinity (object)
+10: toString!
+Calling with (39) NaN (object)
+11: toString!
+Calling with (40)  (object)
+12: toString!
+undefined
+[type Function]
+undefined
+Calling with (41) 0 (object)
+13: toString!
+Calling with (42) -0 (object)
+14: toString!
+Calling with (43) 0.0 (object)
+15: toString!
+Calling with (44) 1 (object)
+16: toString!
+Calling with (45) Hello World! (object)
+17: toString!
+Calling with (46) true (object)
+18: toString!
+Calling with (47) _level0 (object)
+19: toString!
+Calling with (48) äöü (object)
+20: toString!
+Calling with (49) _level0 (object)
+21: toString!
+Calling with (50) [type Object] (object)
+22: toString!
+Calling with (51) [type Object] (object)
+23: toString!
+Calling with (52) [type Object] (object)
+24: toString!
+Calling with (53) [type Object] (object)
+25: toString!
+Calling with (54) [type Object] (object)
+26: toString!
+Calling with (55) [type Object] (object)
+27: toString!
diff --git a/test/trace/callmethod-this-8.swf b/test/trace/callmethod-this-8.swf
new file mode 100644
index 0000000..bbb4226
Binary files /dev/null and b/test/trace/callmethod-this-8.swf differ
diff --git a/test/trace/callmethod-this-8.swf.trace b/test/trace/callmethod-this-8.swf.trace
new file mode 100644
index 0000000..6d9d5a5
--- /dev/null
+++ b/test/trace/callmethod-this-8.swf.trace
@@ -0,0 +1,134 @@
+Check which objects work as this property for a CallMethod action
+valueOf called
+toString called
+toString called with 
+valueOf called with 
+0: valueOf!
+1: valueOf!
+2: valueOf!
+3: valueOf!
+4: valueOf!
+5: valueOf!
+6: valueOf!
+7: valueOf!
+8: valueOf!
+9: valueOf!
+10: valueOf!
+11: valueOf!
+12: valueOf!
+13: valueOf!
+14: valueOf!
+15: valueOf!
+16: valueOf!
+17: valueOf!
+18: valueOf!
+19: valueOf!
+20: valueOf!
+21: valueOf!
+22: valueOf!
+22: toString!
+23: valueOf!
+23: toString!
+24: valueOf!
+24: toString!
+25: valueOf!
+25: toString!
+26: valueOf!
+26: toString!
+27: valueOf!
+27: toString!
+Calling with (0) undefined (undefined)
+undefined
+[type Function]
+undefined
+Calling with (1) null (null)
+Calling with (2) true (boolean)
+Calling with (3) false (boolean)
+Calling with (4) 0 (number)
+Calling with (5) 1 (number)
+Calling with (6) 0.5 (number)
+Calling with (7) -1 (number)
+Calling with (8) -0.5 (number)
+Calling with (9) Infinity (number)
+Calling with (10) -Infinity (number)
+Calling with (11) NaN (number)
+Calling with (12)  (string)
+undefined
+[type Function]
+undefined
+Calling with (13) 0 (string)
+Calling with (14) -0 (string)
+Calling with (15) 0.0 (string)
+Calling with (16) 1 (string)
+Calling with (17) Hello World! (string)
+Calling with (18) true (string)
+Calling with (19) _level0 (string)
+Calling with (20) äöü (string)
+Calling with (21) _level0 (movieclip)
+Calling with (22) [object Object] (object)
+Calling with (23) [type Function] (function)
+Calling with (24) [type Object] (object)
+toString called
+Calling with (25) [type Object] (object)
+toString called with 
+Calling with (26) [object Object] (object)
+Calling with (27) undefined (object)
+Calling with (28) undefined (object)
+0: toString!
+Calling with (29) null (object)
+1: toString!
+Calling with (30) true (object)
+2: toString!
+Calling with (31) false (object)
+3: toString!
+Calling with (32) 0 (object)
+4: toString!
+Calling with (33) 1 (object)
+5: toString!
+Calling with (34) 0.5 (object)
+6: toString!
+Calling with (35) -1 (object)
+7: toString!
+Calling with (36) -0.5 (object)
+8: toString!
+Calling with (37) Infinity (object)
+9: toString!
+Calling with (38) -Infinity (object)
+10: toString!
+Calling with (39) NaN (object)
+11: toString!
+Calling with (40)  (object)
+12: toString!
+undefined
+[type Function]
+undefined
+Calling with (41) 0 (object)
+13: toString!
+Calling with (42) -0 (object)
+14: toString!
+Calling with (43) 0.0 (object)
+15: toString!
+Calling with (44) 1 (object)
+16: toString!
+Calling with (45) Hello World! (object)
+17: toString!
+Calling with (46) true (object)
+18: toString!
+Calling with (47) _level0 (object)
+19: toString!
+Calling with (48) äöü (object)
+20: toString!
+Calling with (49) _level0 (object)
+21: toString!
+Calling with (50) [type Object] (object)
+22: toString!
+Calling with (51) [type Object] (object)
+23: toString!
+Calling with (52) [type Object] (object)
+24: toString!
+Calling with (53) [type Object] (object)
+25: toString!
+Calling with (54) [type Object] (object)
+26: toString!
+Calling with (55) [type Object] (object)
+27: toString!
diff --git a/test/trace/callmethod-this.as b/test/trace/callmethod-this.as
new file mode 100644
index 0000000..3d5f607
--- /dev/null
+++ b/test/trace/callmethod-this.as
@@ -0,0 +1,26 @@
+// makeswf -v 7 -s 200x150 -r 1 -o callmethod-this.swf callmethod-this.as
+
+trace ("Check which objects work as this property for a CallMethod action");
+
+#include "values.as"
+
+function bar () {
+  trace (this);
+  trace (super);
+  this.x = 42;
+  trace (this.x);
+};
+for (i = 0; i < values.length; i++) {
+  trace ("Calling with " + names[i]);
+  x = values[i];
+  asm {
+    push 0, "bar"
+    getvariable
+    push "x"
+    getvariable
+    callmethod
+    pop
+  };
+};
+
+loadMovie ("fscommand:quit", "");
commit 8e20eecf72810430d43b8d37c7da6d6298d76c8a
Author: Benjamin Otte <otte at gnome.org>
Date:   Wed Nov 14 17:45:58 2007 +0100

    set pobj == obj here
    
    Otherwise we get a wrong treatment of the object is _not_ a super object

diff --git a/libswfdec/swfdec_as_interpret.c b/libswfdec/swfdec_as_interpret.c
index fd94d1a..7d6686f 100644
--- a/libswfdec/swfdec_as_interpret.c
+++ b/libswfdec/swfdec_as_interpret.c
@@ -891,6 +891,7 @@ swfdec_action_call_method (SwfdecAsContext *cx, guint action, const guint8 *data
       SWFDEC_AS_VALUE_SET_UNDEFINED (swfdec_as_stack_peek (cx, 3));
       SWFDEC_AS_VALUE_SET_OBJECT (swfdec_as_stack_peek (cx, 2), obj);
       name = "";
+      pobj = obj;
     } else {
       SWFDEC_AS_VALUE_SET_OBJECT (swfdec_as_stack_peek (cx, 3), obj);
       swfdec_as_object_get_variable_and_flags (obj, name, swfdec_as_stack_peek (cx, 2), NULL, &pobj);
commit c40b95d7ad9c6cd75fc7f69b16a414a403aeba46
Author: Benjamin Otte <otte at gnome.org>
Date:   Wed Nov 14 17:33:19 2007 +0100

    seems i removed a swfdec_player_launch() there accidentally

diff --git a/libswfdec/swfdec_as_interpret.c b/libswfdec/swfdec_as_interpret.c
index cb44953..fd94d1a 100644
--- a/libswfdec/swfdec_as_interpret.c
+++ b/libswfdec/swfdec_as_interpret.c
@@ -1147,6 +1147,8 @@ swfdec_action_get_url (SwfdecAsContext *cx, guint action, const guint8 *data, gu
   } else if (swfdec_player_get_level (SWFDEC_PLAYER (cx), target) >= 0) {
     swfdec_resource_load (SWFDEC_PLAYER (cx), target, url, 
 	SWFDEC_LOADER_REQUEST_DEFAULT, NULL, NULL);
+  } else {
+    swfdec_player_launch (SWFDEC_PLAYER (cx), SWFDEC_LOADER_REQUEST_DEFAULT, url, target, NULL);
   }
   g_free (url);
   g_free (target);


More information about the Swfdec mailing list