Pekka Lampila
2007-Aug-31 20:49 UTC
[Swfdec] 4 commits - libswfdec/swfdec_as_number.c libswfdec/swfdec_as_strings.c libswfdec/swfdec_player_as.c test/trace
libswfdec/swfdec_as_number.c | 6 ++- libswfdec/swfdec_as_strings.c | 1 libswfdec/swfdec_player_as.c | 52 +++++++++++++++++++++++++++ test/trace/asfunction-properties-6.swf |binary test/trace/asfunction-properties-6.swf.trace | 22 ++++++++++- test/trace/asfunction-properties-7.swf |binary test/trace/asfunction-properties-7.swf.trace | 22 ++++++++++- test/trace/asfunction-properties.as | 16 ++++++-- 8 files changed, 110 insertions(+), 9 deletions(-) New commits: diff-tree 4305a7503846739da9ce1db2a9c9e83ff45e10ba (from 9f17806b6f4230e268163b78931fe7a0be53dfe9) Author: Pekka Lampila <pekka.lampila at iki.fi> Date: Fri Aug 31 23:45:19 2007 +0300 Delete __proto__ and constructor properties from ASnative and ASconstructor Enable testing for these in asfunction-properties diff --git a/libswfdec/swfdec_player_as.c b/libswfdec/swfdec_player_as.c index d9c49bf..ee21aa0 100644 --- a/libswfdec/swfdec_player_as.c +++ b/libswfdec/swfdec_player_as.c @@ -260,6 +260,8 @@ swfdec_player_object_registerClass (Swfd void swfdec_player_init_global (SwfdecPlayer *player, guint version) { + SwfdecAsValue val; + SwfdecAsObject *object; SwfdecAsContext *context = SWFDEC_AS_CONTEXT (player); swfdec_as_object_add_function (context->Object, SWFDEC_AS_STR_registerClass, @@ -272,5 +274,28 @@ swfdec_player_init_global (SwfdecPlayer 0, swfdec_player_ASnative, 2); swfdec_as_object_add_function (context->global, SWFDEC_AS_STR_ASconstructor, 0, swfdec_player_ASconstructor, 2); + + // remove __proto__ and constructor from ASnative and ASconstructor + + swfdec_as_object_get_variable (context->global, SWFDEC_AS_STR_ASnative, &val); + g_assert (SWFDEC_AS_VALUE_IS_OBJECT (&val)); + object = SWFDEC_AS_VALUE_GET_OBJECT (&val); + swfdec_as_object_unset_variable_flags (object, SWFDEC_AS_STR___proto__, + SWFDEC_AS_VARIABLE_PERMANENT); + swfdec_as_object_delete_variable (object, SWFDEC_AS_STR___proto__); + swfdec_as_object_unset_variable_flags (object, SWFDEC_AS_STR_constructor, + SWFDEC_AS_VARIABLE_PERMANENT); + swfdec_as_object_delete_variable (object, SWFDEC_AS_STR_constructor); + + swfdec_as_object_get_variable (context->global, SWFDEC_AS_STR_ASconstructor, + &val); + g_assert (SWFDEC_AS_VALUE_IS_OBJECT (&val)); + object = SWFDEC_AS_VALUE_GET_OBJECT (&val); + swfdec_as_object_unset_variable_flags (object, SWFDEC_AS_STR___proto__, + SWFDEC_AS_VARIABLE_PERMANENT); + swfdec_as_object_delete_variable (object, SWFDEC_AS_STR___proto__); + swfdec_as_object_unset_variable_flags (object, SWFDEC_AS_STR_constructor, + SWFDEC_AS_VARIABLE_PERMANENT); + swfdec_as_object_delete_variable (object, SWFDEC_AS_STR_constructor); } diff --git a/test/trace/asfunction-properties-6.swf b/test/trace/asfunction-properties-6.swf index 7b7721f..fcab036 100644 Binary files a/test/trace/asfunction-properties-6.swf and b/test/trace/asfunction-properties-6.swf differ diff --git a/test/trace/asfunction-properties-6.swf.trace b/test/trace/asfunction-properties-6.swf.trace index 60d2c04..1b8f651 100644 --- a/test/trace/asfunction-properties-6.swf.trace +++ b/test/trace/asfunction-properties-6.swf.trace @@ -1,3 +1,7 @@ +_global.ASconstructor = function + no children +_global.ASnative = function + no children _global.ASSetNativeAccessor = function __proto__ (hp) = _global.Object.__proto__ constructor (hp) = _global.Object.constructor diff --git a/test/trace/asfunction-properties-7.swf b/test/trace/asfunction-properties-7.swf index 454c58c..782a746 100644 Binary files a/test/trace/asfunction-properties-7.swf and b/test/trace/asfunction-properties-7.swf differ diff --git a/test/trace/asfunction-properties-7.swf.trace b/test/trace/asfunction-properties-7.swf.trace index 60d2c04..1b8f651 100644 --- a/test/trace/asfunction-properties-7.swf.trace +++ b/test/trace/asfunction-properties-7.swf.trace @@ -1,3 +1,7 @@ +_global.ASconstructor = function + no children +_global.ASnative = function + no children _global.ASSetNativeAccessor = function __proto__ (hp) = _global.Object.__proto__ constructor (hp) = _global.Object.constructor diff --git a/test/trace/asfunction-properties.as b/test/trace/asfunction-properties.as index 186a750..235eeef 100644 --- a/test/trace/asfunction-properties.as +++ b/test/trace/asfunction-properties.as @@ -7,9 +7,8 @@ var b = ASnative (106, 2); var c = ASconstructor (106, 1); // _global.Number.prototype.toString var d = ASnative (106, 1); -// these two have __proto__ and constructor in swfdec, shouldn't -//trace_properties (_global.ASconstructor, "_global", "ASconstructor"); -//trace_properties (_global.ASnative, "_global", "ASnative"); +trace_properties (_global.ASconstructor, "_global", "ASconstructor"); +trace_properties (_global.ASnative, "_global", "ASnative"); trace_properties (_global.ASSetNativeAccessor, "_global", "ASSetNativeAccessor"); trace_properties (_global.ASSetNative, "_global", "ASSetNative"); trace_properties (_global.ASSetPropFlags, "_global", "ASSetPropFlags"); diff-tree 9f17806b6f4230e268163b78931fe7a0be53dfe9 (from 88a578f46125d2ef9b9c08d9ed6bf0bc1e161819) Author: Pekka Lampila <pekka.lampila at iki.fi> Date: Fri Aug 31 23:38:59 2007 +0300 Extend asfunction-properties test Test properties of functions received from ASnative and ASconstructor diff --git a/test/trace/asfunction-properties-6.swf b/test/trace/asfunction-properties-6.swf index 1741f67..7b7721f 100644 Binary files a/test/trace/asfunction-properties-6.swf and b/test/trace/asfunction-properties-6.swf differ diff --git a/test/trace/asfunction-properties-6.swf.trace b/test/trace/asfunction-properties-6.swf.trace index f5db56f..60d2c04 100644 --- a/test/trace/asfunction-properties-6.swf.trace +++ b/test/trace/asfunction-properties-6.swf.trace @@ -1,9 +1,23 @@ -_global.ASSetNative = function +_global.ASSetNativeAccessor = function __proto__ (hp) = _global.Object.__proto__ constructor (hp) = _global.Object.constructor -_global.ASSetNativeAccessor = function +_global.ASSetNative = function __proto__ (hp) = _global.Object.__proto__ constructor (hp) = _global.Object.constructor _global.ASSetPropFlags = function __proto__ (hp) = _global.Object.__proto__ constructor (hp) = _global.Object.constructor +local.a = _global.Object.__proto__ + __proto__ (hp) = _global.Object.__proto__ + constructor (hp) = _global.Object.constructor + prototype (hp) = _global.Object.prototype +local.b = _global.Object.__proto__ + __proto__ (hp) = _global.Object.__proto__ + constructor (hp) = _global.Object.constructor +local.c = _global.Object.__proto__ + __proto__ (hp) = _global.Object.__proto__ + constructor (hp) = _global.Object.constructor + prototype (hp) = _global.Object.prototype +local.d = _global.Object.__proto__ + __proto__ (hp) = _global.Object.__proto__ + constructor (hp) = _global.Object.constructor diff --git a/test/trace/asfunction-properties-7.swf b/test/trace/asfunction-properties-7.swf index 9f350dc..454c58c 100644 Binary files a/test/trace/asfunction-properties-7.swf and b/test/trace/asfunction-properties-7.swf differ diff --git a/test/trace/asfunction-properties-7.swf.trace b/test/trace/asfunction-properties-7.swf.trace index f5db56f..60d2c04 100644 --- a/test/trace/asfunction-properties-7.swf.trace +++ b/test/trace/asfunction-properties-7.swf.trace @@ -1,9 +1,23 @@ -_global.ASSetNative = function +_global.ASSetNativeAccessor = function __proto__ (hp) = _global.Object.__proto__ constructor (hp) = _global.Object.constructor -_global.ASSetNativeAccessor = function +_global.ASSetNative = function __proto__ (hp) = _global.Object.__proto__ constructor (hp) = _global.Object.constructor _global.ASSetPropFlags = function __proto__ (hp) = _global.Object.__proto__ constructor (hp) = _global.Object.constructor +local.a = _global.Object.__proto__ + __proto__ (hp) = _global.Object.__proto__ + constructor (hp) = _global.Object.constructor + prototype (hp) = _global.Object.prototype +local.b = _global.Object.__proto__ + __proto__ (hp) = _global.Object.__proto__ + constructor (hp) = _global.Object.constructor +local.c = _global.Object.__proto__ + __proto__ (hp) = _global.Object.__proto__ + constructor (hp) = _global.Object.constructor + prototype (hp) = _global.Object.prototype +local.d = _global.Object.__proto__ + __proto__ (hp) = _global.Object.__proto__ + constructor (hp) = _global.Object.constructor diff --git a/test/trace/asfunction-properties.as b/test/trace/asfunction-properties.as index d642ca3..186a750 100644 --- a/test/trace/asfunction-properties.as +++ b/test/trace/asfunction-properties.as @@ -2,10 +2,21 @@ #include "trace_properties.as" -trace_properties (_global.ASSetNative, "_global", "ASSetNative"); +var a = ASconstructor (106, 2); // _global.Number +var b = ASnative (106, 2); +var c = ASconstructor (106, 1); // _global.Number.prototype.toString +var d = ASnative (106, 1); + +// these two have __proto__ and constructor in swfdec, shouldn't +//trace_properties (_global.ASconstructor, "_global", "ASconstructor"); +//trace_properties (_global.ASnative, "_global", "ASnative"); trace_properties (_global.ASSetNativeAccessor, "_global", "ASSetNativeAccessor"); +trace_properties (_global.ASSetNative, "_global", "ASSetNative"); trace_properties (_global.ASSetPropFlags, "_global", "ASSetPropFlags"); -//trace_properties (_global.ASnative, "_global", "ASnative"); -//trace_properties (_global.ASconstructor, "_global", "ASconstructor"); + +trace_properties (a, "local", "a"); +trace_properties (b, "local", "b"); +trace_properties (c, "local", "c"); +trace_properties (d, "local", "d"); loadMovie ("FSCommand:quit", ""); diff-tree 88a578f46125d2ef9b9c08d9ed6bf0bc1e161819 (from b248b16d97eeed1522e4a5791beaeb316cf584b8) Author: Pekka Lampila <pekka.lampila at iki.fi> Date: Fri Aug 31 23:37:21 2007 +0300 Add ASnative definations for Number valueOf and toString functions diff --git a/libswfdec/swfdec_as_number.c b/libswfdec/swfdec_as_number.c index d53e725..9328b26 100644 --- a/libswfdec/swfdec_as_number.c +++ b/libswfdec/swfdec_as_number.c @@ -67,7 +67,8 @@ swfdec_as_number_construct (SwfdecAsCont } } -static void +SWFDEC_AS_NATIVE (106, 1, swfdec_as_number_toString) +void swfdec_as_number_toString (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret) { @@ -83,7 +84,8 @@ swfdec_as_number_toString (SwfdecAsConte SWFDEC_AS_VALUE_SET_STRING (ret, s); } -static void +SWFDEC_AS_NATIVE (106, 1, swfdec_as_number_valueOf) +void swfdec_as_number_valueOf (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret) { diff-tree b248b16d97eeed1522e4a5791beaeb316cf584b8 (from 19fceebeff8cdda74fcfa2acebe29e2a9b33ed0c) Author: Pekka Lampila <pekka.lampila at iki.fi> Date: Fri Aug 31 23:28:36 2007 +0300 Implement ASconstructor diff --git a/libswfdec/swfdec_as_strings.c b/libswfdec/swfdec_as_strings.c index 9fb0169..e09c854 100644 --- a/libswfdec/swfdec_as_strings.c +++ b/libswfdec/swfdec_as_strings.c @@ -283,6 +283,7 @@ const char swfdec_as_strings[] = SWFDEC_AS_CONSTANT_STRING ("hasTLS") SWFDEC_AS_CONSTANT_STRING ("serverString") SWFDEC_AS_CONSTANT_STRING ("$version") + SWFDEC_AS_CONSTANT_STRING ("ASconstructor") /* add more here */ ; diff --git a/libswfdec/swfdec_player_as.c b/libswfdec/swfdec_player_as.c index 3643ade..d9c49bf 100644 --- a/libswfdec/swfdec_player_as.c +++ b/libswfdec/swfdec_player_as.c @@ -116,6 +116,31 @@ swfdec_get_asnative (SwfdecAsContext *cx return NULL; } +// same as ASnative, but also sets prototype +static void +swfdec_player_ASconstructor (SwfdecAsContext *cx, SwfdecAsObject *obj, + guint argc, SwfdecAsValue *argv, SwfdecAsValue *rval) +{ + SwfdecAsValue val; + SwfdecAsFunction *func; + guint x, y; + + x = swfdec_as_value_to_integer (cx, &argv[0]); + y = swfdec_as_value_to_integer (cx, &argv[1]); + + func = swfdec_get_asnative (cx, x, y); + if (func) { + SWFDEC_AS_VALUE_SET_OBJECT (&val, swfdec_as_object_new (cx)); + swfdec_as_object_set_variable_and_flags (SWFDEC_AS_OBJECT (func), + SWFDEC_AS_STR_prototype, &val, + SWFDEC_AS_VARIABLE_HIDDEN | SWFDEC_AS_VARIABLE_PERMANENT); + + SWFDEC_AS_VALUE_SET_OBJECT (rval, SWFDEC_AS_OBJECT (func)); + } else { + SWFDEC_FIXME ("ASconstructor for %u %u missing", x, y); + } +} + static void swfdec_player_ASnative (SwfdecAsContext *cx, SwfdecAsObject *obj, guint argc, SwfdecAsValue *argv, SwfdecAsValue *rval) @@ -245,5 +270,7 @@ swfdec_player_init_global (SwfdecPlayer 0, swfdec_player_clearInterval, 1); swfdec_as_object_add_function (context->global, SWFDEC_AS_STR_ASnative, 0, swfdec_player_ASnative, 2); + swfdec_as_object_add_function (context->global, SWFDEC_AS_STR_ASconstructor, + 0, swfdec_player_ASconstructor, 2); }
Possibly Parallel Threads
- 10 commits - libswfdec/swfdec_as_function.c libswfdec/swfdec_as_object.c test/trace
- 3 commits - libswfdec/swfdec_as_array.c libswfdec/swfdec_as_function.c test/trace
- 3 commits - libswfdec/swfdec_as_number.c libswfdec/swfdec_internal.h libswfdec/swfdec_player_as.c libswfdec/swfdec_player.c test/trace
- 4 commits - libswfdec/swfdec_as_array.c libswfdec/swfdec_video_movie_as.c test/trace
- Changes to 'refs/tags/0.5.3'