From 5b583017957d8f35976a61fe7a84e22a75787430 Mon Sep 17 00:00:00 2001 From: David Wendt Date: Fri, 5 Nov 2021 19:11:43 -0400 Subject: [PATCH] tests: Fix all remaining test bugs caused by discrepancies between how Ruffle and Flash Player handle dynamic `Namespace`s. For some reason, in Flash Player, `RTQName`s that use a dynamic namespace do *not* pick the same namespace that you would ordinarily get if declaring or referencing that namespace statically. My suspicion is that this has something to do with E4X namespaces, which are flagged as a separate space from ES4 namespaces. --- .../swfs/avm2/proxy_deleteproperty/output.txt | 28 +- .../swfs/avm2/proxy_deleteproperty/test-0.abc | Bin 0 -> 2884 bytes .../test-0/Test.class.asasm | 46 ++++ .../test-0/Test.init/TestProxy.class.asasm | 204 ++++++++++++++ .../test-0/Test.script.asasm | 245 +++++++++++++++++ .../test-0/test-0.main.asasm | 9 + .../test-0/test_fla/MainTimeline.class.asasm | 76 +++++ .../test-0/test_fla/MainTimeline.script.asasm | 56 ++++ .../swfs/avm2/proxy_deleteproperty/test.swf | Bin 1477 -> 1535 bytes .../swfs/avm2/proxy_getproperty/output.txt | 8 +- .../swfs/avm2/proxy_getproperty/test-0.abc | Bin 2622 -> 2620 bytes .../test-0/Test.script.asasm | 3 +- .../swfs/avm2/proxy_getproperty/test.swf | Bin 1428 -> 1426 bytes .../Test-0/Test-0.main.asasm | 9 + .../proxy_setproperty/Test-0/Test.class.asasm | 46 ++++ .../Test-0/Test.init/TestProxy.class.asasm | 140 ++++++++++ .../Test-0/Test.script.asasm | 260 ++++++++++++++++++ .../Test-0/test_fla/MainTimeline.class.asasm | 76 +++++ .../Test-0/test_fla/MainTimeline.script.asasm | 56 ++++ .../swfs/avm2/proxy_setproperty/output.txt | 18 +- .../swfs/avm2/proxy_setproperty/test-0.abc | Bin 0 -> 3160 bytes .../swfs/avm2/proxy_setproperty/test.swf | Bin 1621 -> 1702 bytes 22 files changed, 1247 insertions(+), 33 deletions(-) create mode 100644 tests/tests/swfs/avm2/proxy_deleteproperty/test-0.abc create mode 100644 tests/tests/swfs/avm2/proxy_deleteproperty/test-0/Test.class.asasm create mode 100644 tests/tests/swfs/avm2/proxy_deleteproperty/test-0/Test.init/TestProxy.class.asasm create mode 100644 tests/tests/swfs/avm2/proxy_deleteproperty/test-0/Test.script.asasm create mode 100644 tests/tests/swfs/avm2/proxy_deleteproperty/test-0/test-0.main.asasm create mode 100644 tests/tests/swfs/avm2/proxy_deleteproperty/test-0/test_fla/MainTimeline.class.asasm create mode 100644 tests/tests/swfs/avm2/proxy_deleteproperty/test-0/test_fla/MainTimeline.script.asasm create mode 100644 tests/tests/swfs/avm2/proxy_setproperty/Test-0/Test-0.main.asasm create mode 100644 tests/tests/swfs/avm2/proxy_setproperty/Test-0/Test.class.asasm create mode 100644 tests/tests/swfs/avm2/proxy_setproperty/Test-0/Test.init/TestProxy.class.asasm create mode 100644 tests/tests/swfs/avm2/proxy_setproperty/Test-0/Test.script.asasm create mode 100644 tests/tests/swfs/avm2/proxy_setproperty/Test-0/test_fla/MainTimeline.class.asasm create mode 100644 tests/tests/swfs/avm2/proxy_setproperty/Test-0/test_fla/MainTimeline.script.asasm create mode 100644 tests/tests/swfs/avm2/proxy_setproperty/test-0.abc diff --git a/tests/tests/swfs/avm2/proxy_deleteproperty/output.txt b/tests/tests/swfs/avm2/proxy_deleteproperty/output.txt index e3037eb42..330530bca 100644 --- a/tests/tests/swfs/avm2/proxy_deleteproperty/output.txt +++ b/tests/tests/swfs/avm2/proxy_deleteproperty/output.txt @@ -22,25 +22,21 @@ true false ///p.normal_var This is a normal var -///delete p.flash_proxy::proxy_var -///attempted to delete property: http://www.adobe.com/2006/actionscript/flash/proxy::proxy_var -///type of name is QName -///name.localName -proxy_var -///name.uri -http://www.adobe.com/2006/actionscript/flash/proxy -true +///delete p.flash_proxy::proxy_var (QName) +false +///delete p.flash_proxy::proxy_var (RTQName) +false +///delete p.flash_proxy::proxy_var (RTQNameL) +false +///delete p.flash_proxy::proxy_var (Multiname) +false +///delete p.flash_proxy::proxy_var (MultinameL) +false ///delete (p.normal_fn)() ///called normal_fn true ///delete p.flash_proxy::proxy_fn -///attempted to delete property: http://www.adobe.com/2006/actionscript/flash/proxy::proxy_fn -///type of name is QName -///name.localName -proxy_fn -///name.uri -http://www.adobe.com/2006/actionscript/flash/proxy -true +false ///delete p.proxy_var ///attempted to delete property: proxy_var ///type of name is QName @@ -65,4 +61,4 @@ crazy_return ///name.uri ///returning non-bool value -true +true \ No newline at end of file diff --git a/tests/tests/swfs/avm2/proxy_deleteproperty/test-0.abc b/tests/tests/swfs/avm2/proxy_deleteproperty/test-0.abc new file mode 100644 index 0000000000000000000000000000000000000000..e56a7538f66590d3a99afa98089abc13a9ae4d36 GIT binary patch literal 2884 zcmbVN>sAv<5bmB^&*VY?Ap{T|5S2hk0=QnHy9y|Rf~fGrALNjMbj)yuNzP;d*Jc8##yDYXPq7|?$y28r}OQ)W)>=glf<(ui*@6o?|gP}9u zBYnRcis%1>cr%S1XdQZ1bgoc1wXJ>JQlkznN_Go6tsLrxTPHUBcMx_x-i>1HkKBh9 zqQMx(c26zGh6Y1Q(?75C0RYj-IyLA$oukC(>$#UlpYBk4%I!-uF3|3**Dq%@>!xSfrL-sAP<9iT+t-xw-x$)!FlTHFa_rj2 z+<{caR_)a0tBzea@DN2iwNR(N#ha~)eQ7&&&-S?%?j_QB0@59`^BUy3!1hJE(FLL@ zq6=lmg6F2^S;=+Zk=_noow!>M^8>G1^GOnkhIXsaDEL~;_U1!+ffMxHoWFG zL{Z@>=EPo%_I*+C`rPuHZ*8`FC<=vcZ{i;`VU@!zwr9=Um1yot^!Al#M;qpm;aVrY zxwPnazZ7xwaa&@H2a=L{Uw@f=rmyLdg0aV9ZF7Z_ETl4ER)l(LGVXP}gj4~<0q$rbOOg5OTG3`C0GmPdL zU1IbHrlgrN%anPh++&eB#-1CBYB0&rsS%|{TrxCj$g&|*V_Pxa(S(uE67s;fJWgYT zNbryQG5p})hlCE1N1qdfJOHoIM3LEopEsc|tBMgPl*mliiL4Gx5+y;2+7Ij#I!K9T zfb}EQHNB4*G)hSXgX=_MN}ooErmG4evO*}vB~hv?REiNwWktToza(H$MU7nKFE+?m z8tecfArg`@rK;9LDzc<%zfzDI7x_Qw1~Gz2k!JcYx2Y7wE=$QTgPVi|alr0uQyL_| zm_(z$NG~ffv<3m1LgN}jLNyFjMjz{gl}TW41Dp9N7+LQ(0U5n4jeHr5gEa=+UEum* z&%t$YObm1L&N?Bg1eFd#SyLDJ;1*B=NKM0bv=%c1Od6O$WM+Y3icFQyuv1tj6>pT3 zd`bC0CaNmyiAVfky!_37>y0A z0y3u2c@5|dG&V(T*uCHlU=wI;3rw8VJHUnzdoM6^jnZF!zl7%Llp2w6;^5juqDe81 z#mLuJ0i7lnmFRXv3MA-QgaVs@hP@8tqWVfD=|BNE3L|UGUF12zo?XwEQu)$YzBHOI Vjps`md_PDN;isy9%>*e}@)tveQIr4x literal 0 HcmV?d00001 diff --git a/tests/tests/swfs/avm2/proxy_deleteproperty/test-0/Test.class.asasm b/tests/tests/swfs/avm2/proxy_deleteproperty/test-0/Test.class.asasm new file mode 100644 index 000000000..30d781612 --- /dev/null +++ b/tests/tests/swfs/avm2/proxy_deleteproperty/test-0/Test.class.asasm @@ -0,0 +1,46 @@ +class + refid "Test" + instance QName(PackageNamespace(""), "Test") + extends QName(PackageNamespace(""), "Object") + flag SEALED + flag PROTECTEDNS + protectedns ProtectedNamespace("Test") + iinit + name "Test/Test" + refid "Test/instance/init" + body + maxstack 1 + localcount 1 + initscopedepth 4 + maxscopedepth 5 + code + getlocal0 + pushscope + + getlocal0 + constructsuper 0 + + debugfile "I:\\Code\\ruffle\\tests\\tests\\swfs\\avm2\\proxy_deleteproperty;;Test.as" + debugline 83 + returnvoid + end ; code + end ; body + end ; method + end ; instance + cinit + name "" + refid "Test/class/init" + body + maxstack 1 + localcount 1 + initscopedepth 3 + maxscopedepth 4 + code + getlocal0 + pushscope + + returnvoid + end ; code + end ; body + end ; method +end ; class diff --git a/tests/tests/swfs/avm2/proxy_deleteproperty/test-0/Test.init/TestProxy.class.asasm b/tests/tests/swfs/avm2/proxy_deleteproperty/test-0/Test.init/TestProxy.class.asasm new file mode 100644 index 000000000..5fd413a44 --- /dev/null +++ b/tests/tests/swfs/avm2/proxy_deleteproperty/test-0/Test.init/TestProxy.class.asasm @@ -0,0 +1,204 @@ +class + refid "Test/init/TestProxy" + instance QName(PrivateNamespace("Test.as$38"), "TestProxy") + extends QName(PackageNamespace("flash.utils"), "Proxy") + flag PROTECTEDNS + protectedns ProtectedNamespace("Test.as$38:TestProxy") + iinit + name "Test.as$38:TestProxy/TestProxy" + refid "Test/init/TestProxy/instance/init" + body + maxstack 1 + localcount 1 + initscopedepth 5 + maxscopedepth 6 + code + getlocal0 + pushscope + + getlocal0 + constructsuper 0 + + debugfile "I:\\Code\\ruffle\\tests\\tests\\swfs\\avm2\\proxy_deleteproperty;;Test.as" + debugline 83 + returnvoid + end ; code + end ; body + end ; method + trait method QName(Namespace("http://www.adobe.com/2006/actionscript/flash/proxy"), "deleteProperty") flag OVERRIDE + method + name "Test.as$38:TestProxy/flash_proxy:deleteProperty" + refid "Test/init/TestProxy/instance/http://www.adobe.com/2006/actionscript/flash/proxy:deleteProperty" + param null + returns QName(PackageNamespace(""), "Boolean") + flag HAS_PARAM_NAMES + paramname "trace" + body + maxstack 3 + localcount 2 + initscopedepth 5 + maxscopedepth 6 + code + debugfile "I:\\Code\\ruffle\\tests\\tests\\swfs\\avm2\\proxy_deleteproperty;;Test.as" + debugline 9 + getlocal0 + pushscope + + debug 1, "name", 0, 9 + debugline 10 + findpropstrict QName(PackageNamespace(""), "trace") + pushstring "///attempted to delete property:" + getlocal1 + callpropvoid QName(PackageNamespace(""), "trace"), 2 + + debugline 12 + getlocal1 + getlex QName(PackageNamespace(""), "QName") + istypelate + iffalse L50 + + debugline 13 + findpropstrict QName(PackageNamespace(""), "trace") + pushstring "///type of name is QName" + callpropvoid QName(PackageNamespace(""), "trace"), 1 + + debugline 15 + findpropstrict QName(PackageNamespace(""), "trace") + pushstring "///name.localName" + callpropvoid QName(PackageNamespace(""), "trace"), 1 + + debugline 16 + findpropstrict QName(PackageNamespace(""), "trace") + getlocal1 + getproperty Multiname("localName", [PackageNamespace(""), PrivateNamespace("Test.as$38:TestProxy"), PrivateNamespace("Test.as$38"), Namespace("http://adobe.com/AS3/2006/builtin"), ProtectedNamespace("Test.as$38:TestProxy"), StaticProtectedNs("Test.as$38:TestProxy"), StaticProtectedNs("flash.utils:Proxy")]) + callpropvoid QName(PackageNamespace(""), "trace"), 1 + + debugline 18 + findpropstrict QName(PackageNamespace(""), "trace") + pushstring "///name.uri" + callpropvoid QName(PackageNamespace(""), "trace"), 1 + + debugline 19 + findpropstrict QName(PackageNamespace(""), "trace") + getlocal1 + getproperty Multiname("uri", [PackageNamespace(""), PrivateNamespace("Test.as$38:TestProxy"), PrivateNamespace("Test.as$38"), Namespace("http://adobe.com/AS3/2006/builtin"), ProtectedNamespace("Test.as$38:TestProxy"), StaticProtectedNs("Test.as$38:TestProxy"), StaticProtectedNs("flash.utils:Proxy")]) + callpropvoid QName(PackageNamespace(""), "trace"), 1 + + debugline 21 + getlocal1 + getproperty Multiname("localName", [PackageNamespace(""), PrivateNamespace("Test.as$38:TestProxy"), PrivateNamespace("Test.as$38"), Namespace("http://adobe.com/AS3/2006/builtin"), ProtectedNamespace("Test.as$38:TestProxy"), StaticProtectedNs("Test.as$38:TestProxy"), StaticProtectedNs("flash.utils:Proxy")]) + pushstring "crazy_return" + ifstrictne L49 + + debugline 22 + findpropstrict QName(PackageNamespace(""), "trace") + pushstring "///returning non-bool value" + callpropvoid QName(PackageNamespace(""), "trace"), 1 + + pushstring "This isn't a bool at all" + debugline 23 + returnvalue + +L49: + jump L64 + +L50: + debugline 25 + getlocal1 + getlex QName(PackageNamespace(""), "String") + istypelate + iffalse L60 + + debugline 26 + findpropstrict QName(PackageNamespace(""), "trace") + pushstring "///type of name is String" + callpropvoid QName(PackageNamespace(""), "trace"), 1 + + jump L64 + +L60: + debugline 28 + findpropstrict QName(PackageNamespace(""), "trace") + pushstring "///invalid name type" + callpropvoid QName(PackageNamespace(""), "trace"), 1 + +L64: + debugline 31 + pushtrue + returnvalue + end ; code + end ; body + end ; method + end ; trait + trait method QName(PrivateNamespace("Test.as$38"), "normal_fn") + method + name "Test.as$38:TestProxy/Test.as$38:normal_fn" + refid "Test/init/TestProxy/instance/Test/init/normal_fn" + body + maxstack 2 + localcount 1 + initscopedepth 5 + maxscopedepth 6 + code + debugfile "I:\\Code\\ruffle\\tests\\tests\\swfs\\avm2\\proxy_deleteproperty;;Test.as" + debugline 34 + getlocal0 + pushscope + + debugline 35 + findpropstrict QName(PackageNamespace(""), "trace") + pushstring "///called normal_fn" + callpropvoid QName(PackageNamespace(""), "trace"), 1 + + debugline 36 + returnvoid + end ; code + end ; body + end ; method + end ; trait + trait slot QName(PrivateNamespace("Test.as$38"), "normal_var") value Utf8("This is a normal var") end + trait method QName(Namespace("http://www.adobe.com/2006/actionscript/flash/proxy"), "proxy_fn") + method + name "Test.as$38:TestProxy/flash_proxy:proxy_fn" + refid "Test/init/TestProxy/instance/http://www.adobe.com/2006/actionscript/flash/proxy:proxy_fn" + body + maxstack 2 + localcount 1 + initscopedepth 5 + maxscopedepth 6 + code + debugfile "I:\\Code\\ruffle\\tests\\tests\\swfs\\avm2\\proxy_deleteproperty;;Test.as" + debugline 40 + getlocal0 + pushscope + + debugline 41 + findpropstrict QName(PackageNamespace(""), "trace") + pushstring "///called proxy_fn" + callpropvoid QName(PackageNamespace(""), "trace"), 1 + + debugline 42 + returnvoid + end ; code + end ; body + end ; method + end ; trait + trait slot QName(Namespace("http://www.adobe.com/2006/actionscript/flash/proxy"), "proxy_var") value Utf8("This is a normal var in the proxy ns") end + end ; instance + cinit + name "" + refid "Test/init/TestProxy/class/init" + body + maxstack 1 + localcount 1 + initscopedepth 4 + maxscopedepth 5 + code + getlocal0 + pushscope + + returnvoid + end ; code + end ; body + end ; method +end ; class diff --git a/tests/tests/swfs/avm2/proxy_deleteproperty/test-0/Test.script.asasm b/tests/tests/swfs/avm2/proxy_deleteproperty/test-0/Test.script.asasm new file mode 100644 index 000000000..1e8cd0fed --- /dev/null +++ b/tests/tests/swfs/avm2/proxy_deleteproperty/test-0/Test.script.asasm @@ -0,0 +1,245 @@ +script + sinit + name "" + refid "Test/init" + body + maxstack 4 + localcount 3 + initscopedepth 1 + maxscopedepth 4 + code + getlocal0 + pushscope + + debugfile "I:\\Code\\ruffle\\tests\\tests\\swfs\\avm2\\proxy_deleteproperty;;Test.as" + debugline 2 + findpropstrict Multiname("Test", [PackageNamespace("")]) + getlex QName(PackageNamespace(""), "Object") + pushscope + + getlex QName(PackageNamespace(""), "Object") + newclass "Test" + popscope + initproperty QName(PackageNamespace(""), "Test") + + debugfile "I:\\Code\\ruffle\\tests\\tests\\swfs\\avm2\\proxy_deleteproperty;;Test.as" + debugline 8 + findpropstrict Multiname("TestProxy", [PrivateNamespace("Test.as$38")]) + getlex QName(PackageNamespace(""), "Object") + pushscope + + getlex QName(PackageNamespace("flash.utils"), "Proxy") + pushscope + + getlex QName(PackageNamespace("flash.utils"), "Proxy") + newclass "Test/init/TestProxy" + popscope + popscope + initproperty QName(PrivateNamespace("Test.as$38"), "TestProxy") + + debugfile "I:\\Code\\ruffle\\tests\\tests\\swfs\\avm2\\proxy_deleteproperty;;Test.as" + debugline 49 + findpropstrict Multiname("p", [PrivateNamespace("Test.as$38")]) + findpropstrict QName(PrivateNamespace("Test.as$38"), "TestProxy") + constructprop QName(PrivateNamespace("Test.as$38"), "TestProxy"), 0 + setproperty QName(PrivateNamespace("Test.as$38"), "p") + + debugline 51 + findpropstrict QName(PackageNamespace(""), "trace") + pushstring "///p.flash_proxy::deleteProperty(\"via direct call\")" + callpropvoid QName(PackageNamespace(""), "trace"), 1 + + debugline 52 + findpropstrict QName(PackageNamespace(""), "trace") + getlex QName(PrivateNamespace("Test.as$38"), "p") + dup + setlocal2 + + getlex QName(PackageNamespace("flash.utils"), "flash_proxy") + coerce QName(PackageNamespace(""), "Namespace") + getproperty RTQName("deleteProperty") + getlocal2 + pushstring "via direct call" + call 1 + kill 2 + callpropvoid QName(PackageNamespace(""), "trace"), 1 + + debugline 54 + findpropstrict QName(PackageNamespace(""), "trace") + pushstring "///delete p.via_getproperty" + callpropvoid QName(PackageNamespace(""), "trace"), 1 + + debugline 55 + findpropstrict QName(PackageNamespace(""), "trace") + getlex QName(PrivateNamespace("Test.as$38"), "p") + deleteproperty Multiname("via_getproperty", [PackageNamespace(""), PrivateNamespace("Test.as$38"), Namespace("http://adobe.com/AS3/2006/builtin")]) + callpropvoid QName(PackageNamespace(""), "trace"), 1 + + debugline 57 + findpropstrict QName(PackageNamespace(""), "trace") + pushstring "///delete p.my_ns::via_namespace" + callpropvoid QName(PackageNamespace(""), "trace"), 1 + + debugline 58 + findpropstrict QName(PackageNamespace(""), "trace") + getlex QName(PrivateNamespace("Test.as$38"), "p") + deleteproperty QName(Namespace("my_ns"), "via_namespace") + callpropvoid QName(PackageNamespace(""), "trace"), 1 + + debugline 60 + findpropstrict QName(PackageNamespace(""), "trace") + pushstring "///delete p.normal_var" + callpropvoid QName(PackageNamespace(""), "trace"), 1 + + debugline 61 + findpropstrict QName(PackageNamespace(""), "trace") + getlex QName(PrivateNamespace("Test.as$38"), "p") + deleteproperty Multiname("normal_var", [PackageNamespace(""), PrivateNamespace("Test.as$38"), Namespace("http://adobe.com/AS3/2006/builtin")]) + callpropvoid QName(PackageNamespace(""), "trace"), 1 + + debugline 63 + findpropstrict QName(PackageNamespace(""), "trace") + pushstring "///p.normal_var" + callpropvoid QName(PackageNamespace(""), "trace"), 1 + + debugline 64 + findpropstrict QName(PackageNamespace(""), "trace") + getlex QName(PrivateNamespace("Test.as$38"), "p") + getproperty Multiname("normal_var", [PackageNamespace(""), PrivateNamespace("Test.as$38"), Namespace("http://adobe.com/AS3/2006/builtin")]) + callpropvoid QName(PackageNamespace(""), "trace"), 1 + + debugline 66 + findpropstrict QName(PackageNamespace(""), "trace") + pushstring "///delete p.flash_proxy::proxy_var (QName)" + callpropvoid QName(PackageNamespace(""), "trace"), 1 + + debugline 67 + findpropstrict QName(PackageNamespace(""), "trace") + getlex QName(PrivateNamespace("Test.as$38"), "p") + deleteproperty QName(Namespace("http://www.adobe.com/2006/actionscript/flash/proxy"), "proxy_var") + callpropvoid QName(PackageNamespace(""), "trace"), 1 + + debugline 66 + findpropstrict QName(PackageNamespace(""), "trace") + pushstring "///delete p.flash_proxy::proxy_var (RTQName)" + callpropvoid QName(PackageNamespace(""), "trace"), 1 + + debugline 67 + findpropstrict QName(PackageNamespace(""), "trace") + getlex QName(PrivateNamespace("Test.as$38"), "p") + pushnamespace Namespace("http://www.adobe.com/2006/actionscript/flash/proxy") + deleteproperty RTQName("proxy_var") + callpropvoid QName(PackageNamespace(""), "trace"), 1 + + debugline 66 + findpropstrict QName(PackageNamespace(""), "trace") + pushstring "///delete p.flash_proxy::proxy_var (RTQNameL)" + callpropvoid QName(PackageNamespace(""), "trace"), 1 + + debugline 67 + findpropstrict QName(PackageNamespace(""), "trace") + getlex QName(PrivateNamespace("Test.as$38"), "p") + pushnamespace Namespace("http://www.adobe.com/2006/actionscript/flash/proxy") + pushstring "proxy_var" + deleteproperty RTQNameL() + callpropvoid QName(PackageNamespace(""), "trace"), 1 + + debugline 66 + findpropstrict QName(PackageNamespace(""), "trace") + pushstring "///delete p.flash_proxy::proxy_var (Multiname)" + callpropvoid QName(PackageNamespace(""), "trace"), 1 + + debugline 67 + findpropstrict QName(PackageNamespace(""), "trace") + getlex QName(PrivateNamespace("Test.as$38"), "p") + deleteproperty Multiname("proxy_var", [Namespace("http://www.adobe.com/2006/actionscript/flash/proxy")]) + callpropvoid QName(PackageNamespace(""), "trace"), 1 + + debugline 66 + findpropstrict QName(PackageNamespace(""), "trace") + pushstring "///delete p.flash_proxy::proxy_var (MultinameL)" + callpropvoid QName(PackageNamespace(""), "trace"), 1 + + debugline 67 + findpropstrict QName(PackageNamespace(""), "trace") + getlex QName(PrivateNamespace("Test.as$38"), "p") + pushstring "proxy_var" + deleteproperty MultinameL([Namespace("http://www.adobe.com/2006/actionscript/flash/proxy")]) + callpropvoid QName(PackageNamespace(""), "trace"), 1 + + debugline 69 + findpropstrict QName(PackageNamespace(""), "trace") + pushstring "///delete (p.normal_fn)()" + callpropvoid QName(PackageNamespace(""), "trace"), 1 + + debugline 70 + findpropstrict QName(PackageNamespace(""), "trace") + getglobalscope + getlex QName(PrivateNamespace("Test.as$38"), "p") + getproperty Multiname("normal_fn", [PackageNamespace(""), PrivateNamespace("Test.as$38"), Namespace("http://adobe.com/AS3/2006/builtin")]) + getglobalscope + call 0 + deleteproperty MultinameL([PackageNamespace(""), PrivateNamespace("Test.as$38"), Namespace("http://adobe.com/AS3/2006/builtin")]) + callpropvoid QName(PackageNamespace(""), "trace"), 1 + + debugline 72 + findpropstrict QName(PackageNamespace(""), "trace") + pushstring "///delete p.flash_proxy::proxy_fn" + callpropvoid QName(PackageNamespace(""), "trace"), 1 + + debugline 73 + findpropstrict QName(PackageNamespace(""), "trace") + getlex QName(PrivateNamespace("Test.as$38"), "p") + pushnamespace Namespace("http://www.adobe.com/2006/actionscript/flash/proxy") + deleteproperty RTQName("proxy_fn") + callpropvoid QName(PackageNamespace(""), "trace"), 1 + + debugline 75 + findpropstrict QName(PackageNamespace(""), "trace") + pushstring "///delete p.proxy_var" + callpropvoid QName(PackageNamespace(""), "trace"), 1 + + debugline 76 + findpropstrict QName(PackageNamespace(""), "trace") + getlex QName(PrivateNamespace("Test.as$38"), "p") + deleteproperty Multiname("proxy_var", [PackageNamespace(""), PrivateNamespace("Test.as$38"), Namespace("http://adobe.com/AS3/2006/builtin")]) + callpropvoid QName(PackageNamespace(""), "trace"), 1 + + debugline 78 + findpropstrict QName(PackageNamespace(""), "trace") + pushstring "///delete p.proxy_fn" + callpropvoid QName(PackageNamespace(""), "trace"), 1 + + debugline 79 + findpropstrict QName(PackageNamespace(""), "trace") + getlex QName(PrivateNamespace("Test.as$38"), "p") + deleteproperty Multiname("proxy_fn", [PackageNamespace(""), PrivateNamespace("Test.as$38"), Namespace("http://adobe.com/AS3/2006/builtin")]) + callpropvoid QName(PackageNamespace(""), "trace"), 1 + + debugline 81 + findpropstrict QName(PackageNamespace(""), "trace") + pushstring "///delete p.crazy_return" + callpropvoid QName(PackageNamespace(""), "trace"), 1 + + debugline 82 + findpropstrict QName(PackageNamespace(""), "trace") + getlex QName(PrivateNamespace("Test.as$38"), "p") + deleteproperty Multiname("crazy_return", [PackageNamespace(""), PrivateNamespace("Test.as$38"), Namespace("http://adobe.com/AS3/2006/builtin")]) + callproperty QName(PackageNamespace(""), "trace"), 1 + coerce_a + setlocal1 + + getlocal1 + returnvalue + end ; code + end ; body + end ; method + trait const QName(PrivateNamespace("Test.as$38"), "my_ns") value Namespace(Namespace("my_ns")) end + trait class QName(PackageNamespace(""), "Test") + #include "Test.class.asasm" + end ; trait + trait class QName(PrivateNamespace("Test.as$38"), "TestProxy") + #include "Test.init/TestProxy.class.asasm" + end ; trait + trait slot QName(PrivateNamespace("Test.as$38"), "p") end +end ; script diff --git a/tests/tests/swfs/avm2/proxy_deleteproperty/test-0/test-0.main.asasm b/tests/tests/swfs/avm2/proxy_deleteproperty/test-0/test-0.main.asasm new file mode 100644 index 000000000..fe88d369c --- /dev/null +++ b/tests/tests/swfs/avm2/proxy_deleteproperty/test-0/test-0.main.asasm @@ -0,0 +1,9 @@ +#version 4 +program + minorversion 16 + majorversion 46 + + #include "Test.script.asasm" + #include "test_fla/MainTimeline.script.asasm" + +end ; program diff --git a/tests/tests/swfs/avm2/proxy_deleteproperty/test-0/test_fla/MainTimeline.class.asasm b/tests/tests/swfs/avm2/proxy_deleteproperty/test-0/test_fla/MainTimeline.class.asasm new file mode 100644 index 000000000..baf6a63ff --- /dev/null +++ b/tests/tests/swfs/avm2/proxy_deleteproperty/test-0/test_fla/MainTimeline.class.asasm @@ -0,0 +1,76 @@ +class + refid "test_fla:MainTimeline" + instance QName(PackageNamespace("test_fla"), "MainTimeline") + extends QName(PackageNamespace("flash.display"), "MovieClip") + flag PROTECTEDNS + protectedns ProtectedNamespace("test_fla:MainTimeline") + iinit + name "test_fla:MainTimeline/test_fla:MainTimeline" + refid "test_fla:MainTimeline/instance/init" + body + maxstack 3 + localcount 1 + initscopedepth 10 + maxscopedepth 11 + code + getlocal0 + pushscope + + getlocal0 + constructsuper 0 + + findpropstrict QName(PackageNamespace(""), "addFrameScript") + debugfile "test_fla.MainTimeline::MainTimeline" + debugline 1 + pushbyte 0 + getlocal0 + getproperty QName(PackageInternalNs("test_fla"), "frame1") + callpropvoid QName(PackageNamespace(""), "addFrameScript"), 2 + + debugline 2 + returnvoid + end ; code + end ; body + end ; method + trait method QName(PackageInternalNs("test_fla"), "frame1") + method + name "test_fla:MainTimeline/test_fla:frame1" + refid "test_fla:MainTimeline/instance/test_fla:frame1" + body + maxstack 1 + localcount 1 + initscopedepth 10 + maxscopedepth 11 + code + getlocal0 + pushscope + + debugfile "test_fla.MainTimeline::frame1" + debugline 3 + findpropstrict QName(PackageNamespace(""), "Test") + constructprop QName(PackageNamespace(""), "Test"), 0 + pop + debugline 4 + returnvoid + end ; code + end ; body + end ; method + end ; trait + end ; instance + cinit + name "" + refid "test_fla:MainTimeline/class/init" + body + maxstack 1 + localcount 1 + initscopedepth 9 + maxscopedepth 10 + code + getlocal0 + pushscope + + returnvoid + end ; code + end ; body + end ; method +end ; class diff --git a/tests/tests/swfs/avm2/proxy_deleteproperty/test-0/test_fla/MainTimeline.script.asasm b/tests/tests/swfs/avm2/proxy_deleteproperty/test-0/test_fla/MainTimeline.script.asasm new file mode 100644 index 000000000..ebdc4e8cf --- /dev/null +++ b/tests/tests/swfs/avm2/proxy_deleteproperty/test-0/test_fla/MainTimeline.script.asasm @@ -0,0 +1,56 @@ +script + sinit + name "" + refid "test_fla:MainTimeline/init" + body + maxstack 2 + localcount 1 + initscopedepth 1 + maxscopedepth 9 + code + getlocal0 + pushscope + + getscopeobject 0 + getlex QName(PackageNamespace(""), "Object") + pushscope + + getlex QName(PackageNamespace("flash.events"), "EventDispatcher") + pushscope + + getlex QName(PackageNamespace("flash.display"), "DisplayObject") + pushscope + + getlex QName(PackageNamespace("flash.display"), "InteractiveObject") + pushscope + + getlex QName(PackageNamespace("flash.display"), "DisplayObjectContainer") + pushscope + + getlex QName(PackageNamespace("flash.display"), "Sprite") + pushscope + + getlex QName(PackageNamespace("flash.display"), "MovieClip") + pushscope + + getlex QName(PackageNamespace("flash.display"), "MovieClip") + newclass "test_fla:MainTimeline" + popscope + popscope + popscope + popscope + popscope + popscope + popscope + initproperty QName(PackageNamespace("test_fla"), "MainTimeline") + + debugfile "I:\\Code\\ruffle\\tests\\tests\\swfs\\avm2\\proxy_deleteproperty\\" + debugline 24 + returnvoid + end ; code + end ; body + end ; method + trait class QName(PackageNamespace("test_fla"), "MainTimeline") slotid 1 + #include "MainTimeline.class.asasm" + end ; trait +end ; script diff --git a/tests/tests/swfs/avm2/proxy_deleteproperty/test.swf b/tests/tests/swfs/avm2/proxy_deleteproperty/test.swf index ecbcafb78aa40d2f9c6031f1e288aa369ab39283..2299f4bf2066de5a3c64d6a5c93da4fb14cb5013 100644 GIT binary patch literal 1535 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 LRQn*|&cFZw&Oa)~ delta 218 zcmdlZvQK0~8=H(4JEJ8#yB#}^Jts3GI};Z>6AwExCp$A6JDcz1`D_xCcd=#Z3Mw+N zh%qv-3NSD*m@x`5GO%$1S>}u!Y#e+HoQ%AT3|tHhObi?hOzbTDlLOg{7)2%@VYguv zoy^D)&G>q9EQcF2PXpKFWgG^K!jrFas5A0S{?9R0Dgh{%rtZ(k_`xlfQHLGGaF1n7 zU`pegyoS?+hx?<;2Syc!3u(Om+>_sMYO6{cB#0X%NE#$a7$is;B(MQd1d}WTWN>^` K`yk=YzyJWz(sA_96h3EeXNHShR74ZvsF*-PVZfMJY+{JU zR1>3(`H>&8WCBB&mRn~AjQ_IwBz=cGKwbg6R{IY9Rq_PsJ~IqpN-nFc!TI*Lzq8Li zXPk2gwcE&@w2juA^V8Rw1)!}N*7@e<3y`E$6G@J*s~Q}oW(ItGZ6iE83RhS zEUnSDw2ExCWC$v|8Rw_LTUP6Ja195AN1U7D3{ZNrtJZbUsSQoG&f8iDNNS|(Es#G0 zjp)2;PASbhSYKO_^$Ci^=?&_*s(G9I^$#k-R<>bPD2e{MU_?!z?FDDK&BJV~Wi4QPM%DC>od##) z+i5yr?3_h`qy>;$Ri_%dDckeRPjDPthTeSb-_gx>T|Ga1^)u{vCP*_F{zNwxL__vKQbPwa~Rm-IN)k)I|4qg~rZd@~dLE5|d{gHjUl28K>E6uaoNz@mfub-U2*E?b1aRP&Gb4( z$I|O&Xbk6_yJT!lLX`&0F4Zinorl|@(t4$(%dJMHaJ-huDaxJ9tBy{4B{xupe zDqBIT+iIG2QqF#5?AX%qGT`V5Tybxv^!N$L=f|zsXEaWhv#$5jm|GLs%tUteD_UoN z9^QfztFdr%1wOf&0-v;>|5E>kA`GvHg-Bj}AbKJ{M0uW%Y(}Q$rlMSQcY$BHC$N~| zF@srxC59IRL5yz^yhj*6VMIbPN4O**DdJ5K7F6F8-jN3+Og{*9I*8K8Ej)4rX~y@`I2iq6kJ{330O+@l)WvgM%0e5}>10R2fKH&ZnU>M3cP8MTcxa8zmh8NDjkb25LcpFK5PZ6hr z7l)YX`z}h;@4~Q-z8|=yLyY?Y05cQ>i}<2?jiNA6vlL8IDh?(7BP4Mu9CzW_VJGmuairjPZM{x$H0Xrx6*OmICb;E97LOg(?A;2|7~xxbm7 z0#2rQwZthU?j?%Vc(BD{jM@aAmpB%yvB0H@OGS2{MJm%zL!1bWlPTg7bMvp#mAB#Q z^*>Ti3Rq+)p9O(TL5>Qls}$Y_E=Iw+&Dj~=1I!aCS5){im>8x^Ft1lH>vRe*Z>6uTe(;%AZl#`Jx9ULV7eRB z*maYAJW6&CxJ3%~ZEkrN5-jBkN Vt?32i{2Mv(Iztb@^Dhp05{PLW!BGGJ delta 1417 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