[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Gnash-commit] gnash ChangeLog server/as_function.cpp server/a...
From: |
Sandro Santilli |
Subject: |
[Gnash-commit] gnash ChangeLog server/as_function.cpp server/a... |
Date: |
Thu, 19 Jun 2008 10:51:45 +0000 |
CVSROOT: /sources/gnash
Module name: gnash
Changes by: Sandro Santilli <strk> 08/06/19 10:51:44
Modified files:
. : ChangeLog
server : as_function.cpp as_object.cpp as_object.h
sprite_instance.cpp timers.cpp
server/asobj : AsBroadcaster.cpp
server/vm : ASHandlers.cpp
testsuite/actionscript.all: Inheritance.as
testsuite/swfdec: PASSING
Log message:
* server/as_object.{cpp,h}: change get_super semantic again,
now to be called against the object on which a method
is being called, with an optional method name too.
* server/as_function.cpp, server/sprite_instance.cpp,
server/timers.cpp, server/asobj/AsBroadcaster.cpp,
server/vm/ASHandlers.cpp: simplify extraction of 'super'
object by delegating all to the virtual as_object::get_super.
* testsuite/swfdec/PASSING: super-missing-{7,8}.swf
* testsuite/actionscript.all/Inheritance.as: no more failures here.
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.6976&r2=1.6977
http://cvs.savannah.gnu.org/viewcvs/gnash/server/as_function.cpp?cvsroot=gnash&r1=1.63&r2=1.64
http://cvs.savannah.gnu.org/viewcvs/gnash/server/as_object.cpp?cvsroot=gnash&r1=1.123&r2=1.124
http://cvs.savannah.gnu.org/viewcvs/gnash/server/as_object.h?cvsroot=gnash&r1=1.112&r2=1.113
http://cvs.savannah.gnu.org/viewcvs/gnash/server/sprite_instance.cpp?cvsroot=gnash&r1=1.553&r2=1.554
http://cvs.savannah.gnu.org/viewcvs/gnash/server/timers.cpp?cvsroot=gnash&r1=1.53&r2=1.54
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/AsBroadcaster.cpp?cvsroot=gnash&r1=1.16&r2=1.17
http://cvs.savannah.gnu.org/viewcvs/gnash/server/vm/ASHandlers.cpp?cvsroot=gnash&r1=1.254&r2=1.255
http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/actionscript.all/Inheritance.as?cvsroot=gnash&r1=1.63&r2=1.64
http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/swfdec/PASSING?cvsroot=gnash&r1=1.148&r2=1.149
Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.6976
retrieving revision 1.6977
diff -u -b -r1.6976 -r1.6977
--- ChangeLog 18 Jun 2008 22:35:02 -0000 1.6976
+++ ChangeLog 19 Jun 2008 10:51:41 -0000 1.6977
@@ -1,5 +1,17 @@
2008-06-19 Sandro Santilli <address@hidden>
+ * server/as_object.{cpp,h}: change get_super semantic again,
+ now to be called against the object on which a method
+ is being called, with an optional method name too.
+ * server/as_function.cpp, server/sprite_instance.cpp,
+ server/timers.cpp, server/asobj/AsBroadcaster.cpp,
+ server/vm/ASHandlers.cpp: simplify extraction of 'super'
+ object by delegating all to the virtual as_object::get_super.
+ * testsuite/swfdec/PASSING: super-missing-{7,8}.swf
+ * testsuite/actionscript.all/Inheritance.as: no more failures here.
+
+2008-06-19 Sandro Santilli <address@hidden>
+
* testsuite/actionscript.all/Inheritance.as: run the egg/chicken
test after totals are printed, so we get some info from the
pp before it hangs.
Index: server/as_function.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/as_function.cpp,v
retrieving revision 1.63
retrieving revision 1.64
diff -u -b -r1.63 -r1.64
--- server/as_function.cpp 2 Jun 2008 09:52:52 -0000 1.63
+++ server/as_function.cpp 19 Jun 2008 10:51:42 -0000 1.64
@@ -330,7 +330,7 @@
as_object* proto = this_ptr->get_prototype().get();
if ( proto )
{
- new_fn_call.super = proto->get_super();
+ new_fn_call.super = this_ptr->get_super();
}
else
{
@@ -435,10 +435,10 @@
newobj->init_member(NSV::PROP_CONSTRUCTOR,
as_value(this), flags);
}
- // Super is constructed from this function's prototype
- as_object* super = NULL;
- as_object* iface = getPrototype().get(); // this function's
prototype
- if ( iface ) super = iface->get_super();
+ // Super is computed from the object we're constructing,
+ // It will work as long as we did set it's __proto__ and
__constructor__
+ // properties already.
+ as_object* super = newobj->get_super();
// Call the actual constructor function; new_obj is its 'this'.
Index: server/as_object.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/as_object.cpp,v
retrieving revision 1.123
retrieving revision 1.124
diff -u -b -r1.123 -r1.124
--- server/as_object.cpp 4 Jun 2008 19:54:11 -0000 1.123
+++ server/as_object.cpp 19 Jun 2008 10:51:43 -0000 1.124
@@ -68,10 +68,13 @@
_proto(proto)
{
set_prototype(proto);
+ //log_debug("as_super %p constructed with ctor %p and proto
%p", this, ctor, proto);
}
virtual bool isSuper() const { return true; }
+ virtual as_object* get_super(const char* fname=0);
+
std::string get_text_value() const
{
return "[object Object]";
@@ -121,6 +124,96 @@
as_object* _proto;
};
+as_object*
+as_super::get_super(const char* fname)
+{
+ // Super references the super class of our class prototype.
+ // Our class prototype is __proto__.
+ // Our class superclass prototype is __proto__.__proto__
+
+ // Our class prototype is __proto__.
+ as_object* proto = get_prototype().get();
+ if ( ! proto )
+ {
+ //log_debug("We (a super) have no associated prototype,
returning a null-referencing as_super from get_super()");
+ return new as_super(0, 0);
+ }
+
+ // proto's __proto__ is superProto
+ as_object* superProto = proto->get_prototype().get();
+
+ // proto's __constructor__ is superCtor
+ as_function* superCtor = proto->get_constructor();
+ assert(superCtor == get_constructor());
+
+ //log_debug("super %p proto is %p, its prototype %p", this, proto,
proto->get_prototype());
+
+ VM& vm = getVM();
+ if ( fname && vm.getSWFVersion() > 6)
+ {
+ as_object* owner = 0;
+ string_table& st = vm.getStringTable();
+ string_table::key k = st.find(fname);
+
+ proto->findProperty(k, 0, &owner);
+ if ( ! owner )
+ {
+ //log_debug("get_super: can't find property %s", fname);
+ return 0;
+ }
+
+ //log_debug("object containing method %s is %p, its __proto__
is %p", fname, owner, owner->get_prototype());
+
+ assert(owner);
+
+ if ( owner != proto )
+ {
+ as_object* tmp = proto;
+ while (tmp && tmp->get_prototype() != owner) tmp =
tmp->get_prototype().get();
+ // ok, now 'tmp' should be the object whose __proto__
member contains
+ // the actual named method.
+ //
+ // in the C:B:A:F case this would be B when calling
super.myName() from
+ // C.prototype.myName()
+ //
+
+ assert(tmp); // well, since we found the property, it
must be somewhere!
+
+ //log_debug("tmp is %p", tmp);
+
+ if ( tmp != proto )
+ {
+ //assert(superProto ==
tmp->get_prototype().get());
+
+ //superCtor = superProto->get_constructor();
+ superCtor = tmp->get_constructor();
+ //if ( ! superCtor ) log_debug("superProto
(owner) has no __constructor__");
+ }
+ else
+ {
+ //log_debug("tmp == proto");
+ superCtor = owner->get_constructor(); // most
likely..
+ if ( superProto ) superProto =
superProto->get_prototype().get();
+ }
+ }
+ else
+ {
+ // TODO: check if we've anything to do here...
+ //log_debug("owner == proto == %p", owner);
+ //if ( superProto ) superProto =
superProto->get_prototype().get();
+ //superCtor = superProto->get_constructor();
+ //if ( superProto )
+ //{
+ // superCtor = superProto->get_constructor();
+ //} // else superCtor = NULL ?
+ }
+ }
+
+ as_object* super = new as_super(superCtor, superProto);
+
+ return super;
+}
+
// A PropertyList visitor copying properties to an object
class PropsCopier {
@@ -254,136 +347,34 @@
}
as_object*
-as_object::get_super()
+as_object::get_super(const char* fname)
{
-#if 1
- // Assuming we're a prototype...
-
- // __constructor__ is superCtor
- as_function* superCtor = get_constructor();
-
- // __proto__ is superProto
- // NOTE: we don't use get_prototype as it would skip the get_member
- // override of as_super.. A solution would likely be having as_super
- // register the associated prototype as it's own __proto__ member
- // so that get_prototype() returns it and can be threated exactly
- // the same as other objects in ActionCallMethod
- // TODO: try this, for simplification
- //
- as_object* superProto = NULL; // get_prototype().get();
- as_value val;
- if ( get_member(NSV::PROP_uuPROTOuu, &val) )
- {
- superProto = val.to_object().get();
- }
-
- as_object* super = new as_super(superCtor, superProto);
-
- return super;
-#else
-
- static bool getting = false;
- as_object *owner = NULL;
-
- Property *p = NULL;
-
- if (getting)
- {
- log_debug("Already getting super, return NULL");
- return NULL;
- }
-
- getting = true;
-
-#if 1
- // Super is prototype.__constructor__
- p = findProperty(NSV::PROP_PROTOTYPE, 0, &owner);
- if (!p)
- {
- log_debug("This object (%s @ %p) has no 'prototype' get_super
returns NULL", typeName(*this), (void*)this);
- getting = false;
- return NULL;
- }
+ // Super references the super class of our class prototype.
+ // Our class prototype is __proto__.
+ // Our class superclass prototype is __proto__.__proto__
- as_value protoval = p->getValue(*owner);
- as_object *proto = protoval.to_object().get();
- if (!proto)
- {
- log_debug("This object's (%s @ %p) 'prototype' member is not an
object (%s) - get_super returns NULL", typeName(*this), (void*)this, protoval);
- getting = false;
- return NULL;
- }
+ // Our class prototype is __proto__.
+ as_object* proto = get_prototype().get();
- as_function* constructor = proto->get_constructor();
- if ( ! constructor )
+ VM& vm = getVM();
+ if ( fname && vm.getSWFVersion() > 6)
{
- log_debug("This object's (%s @ %p) 'prototype' has no
constructor", typeName(*this), (void*)this);
+ as_object* owner = 0;
+ string_table& st = vm.getStringTable();
+ string_table::key k = st.find(fname);
+ Property* p = findProperty(k, 0, &owner);
+ if ( owner != this ) proto = owner; // should be 0 if
findProperty returned 0
}
- // prototype of the constructor is constructor.prototype (I think)
-#if 1
- as_object* prototype = NULL;
- if ( constructor && constructor->get_member(NSV::PROP_PROTOTYPE,
&protoval) )
- {
- prototype = protoval.to_object().get();
- }
-#else
- as_object* prototype = get_prototype().get();
- if ( ! prototype )
- {
- log_debug("This object (%s @ %p) has no __proto__",
typeName(*this), (void*)this);
- }
-#endif
+ // proto's __proto__ is superProto
+ as_object* superProto = proto ? proto->get_prototype().get() : 0;
- getting = false;
+ // proto's __constructor__ is superCtor
+ as_function* superCtor = proto ? proto->get_constructor() : 0;
- return new as_super(constructor, prototype);
-#else
- // Super is this.__proto__.__constructor__.prototype
- as_object *proto = get_prototype().get();
- if (!proto)
- {
- getting = false;
- return NULL;
- }
-
- // If an object is its own prototype, we stop looking.
- if (proto == this)
- {
- getting = false;
- return this;
- }
-
- p = proto->findProperty(NSV::PROP_uuCONSTRUCTORuu, 0, &owner);
- if (!p)
- {
- getting = false;
- return NULL;
- }
-
- as_value ctor = p->getValue(*owner);
- as_object *ctor_obj = ctor.to_object().get();
- if (!ctor_obj)
- {
- getting = false;
- return NULL;
- }
-
- p = ctor_obj->findProperty(NSV::PROP_PROTOTYPE, 0, &owner);
- if (!p)
- {
- getting = false;
- return NULL;
- }
-
- as_value ctor_proto = p->getValue(*owner);
- as_object *super = ctor_proto.to_object().get();
-
- getting = false;
+ as_object* super = new as_super(superCtor, superProto);
return super;
-#endif
-#endif
}
as_function*
Index: server/as_object.h
===================================================================
RCS file: /sources/gnash/gnash/server/as_object.h,v
retrieving revision 1.112
retrieving revision 1.113
diff -u -b -r1.112 -r1.113
--- server/as_object.h 13 Jun 2008 13:21:05 -0000 1.112
+++ server/as_object.h 19 Jun 2008 10:51:43 -0000 1.113
@@ -681,7 +681,7 @@
/// itself, or __proto__.__proto__ if this is not a prototype
/// object. This is only conceptual however, and may be more
/// convoluted to obtain the actual super.
- as_object* get_super();
+ virtual as_object* get_super(const char* fname=0);
/// Get the constructor for this object.
///
Index: server/sprite_instance.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/sprite_instance.cpp,v
retrieving revision 1.553
retrieving revision 1.554
diff -u -b -r1.553 -r1.554
--- server/sprite_instance.cpp 17 Jun 2008 13:43:37 -0000 1.553
+++ server/sprite_instance.cpp 19 Jun 2008 10:51:43 -0000 1.554
@@ -4400,10 +4400,18 @@
{
//log_debug(_("Calling the user-defined constructor against this
sprite_instance"));
+
+ set_member(NSV::PROP_uuCONSTRUCTORuu, ctor);
+ if ( swfversion == 6 )
+ {
+ set_member(NSV::PROP_CONSTRUCTOR, ctor);
+ }
+
// Provide a 'super' reference..
- as_object* super = NULL;
- as_object* iface = ctor->getPrototype().get(); // this function's
prototype
- if ( iface ) super = iface->get_super();
+ // Super is computed from the object we're constructing,
+ // It will work as long as we did set it's __proto__ and __constructor__
+ // properties already.
+ as_object* super = get_super();
fn_call call(this, &(get_environment()), 0, 0, super);
@@ -4411,11 +4419,6 @@
(*ctor)(call);
- set_member(NSV::PROP_uuCONSTRUCTORuu, ctor);
- if ( swfversion == 6 )
- {
- set_member(NSV::PROP_CONSTRUCTOR, ctor);
- }
}
}
Index: server/timers.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/timers.cpp,v
retrieving revision 1.53
retrieving revision 1.54
diff -u -b -r1.53 -r1.54
--- server/timers.cpp 2 Jun 2008 09:52:53 -0000 1.53
+++ server/timers.cpp 19 Jun 2008 10:51:43 -0000 1.54
@@ -126,7 +126,7 @@
as_value timer_method;
- as_object* super = NULL;
+ as_object* super = _object->get_super(_function ? 0 : _methodName.c_str());
if ( _function.get() )
{
@@ -134,25 +134,17 @@
}
else
{
- VM& vm = VM::get();
+ VM& vm = _object->getVM();
string_table::key k = vm.getStringTable().find(_methodName);
- as_object* owner = NULL;
- Property* p = _object->findProperty(k, 0, &owner);
- if ( ! p )
+ as_value tmp;
+ if ( ! _object->get_member(k, &tmp) )
{
IF_VERBOSE_ASCODING_ERRORS(
- log_aserror("member %s of object %p (interval method) can't be
found",
- _methodName, (void*)_object.get());
+ log_aserror("object %p has no member named %s (interval method)",
+ _object, _methodName);
);
return;
}
- if ( _object->isSuper() )
- {
- log_unimpl("Getting super from a super in inteval timers");
- }
- super = owner->get_super();
-
- as_value tmp = p->getValue(*_object); // TODO: check visibility flags ?
as_function* f = tmp.to_as_function();
if ( ! f )
{
Index: server/asobj/AsBroadcaster.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/AsBroadcaster.cpp,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -b -r1.16 -r1.17
--- server/asobj/AsBroadcaster.cpp 17 Jun 2008 18:05:41 -0000 1.16
+++ server/asobj/AsBroadcaster.cpp 19 Jun 2008 10:51:43 -0000 1.17
@@ -41,7 +41,8 @@
/// Name of the event being broadcasted
/// appropriately cased based on SWF version
/// of the current VM
- string_table::key _eventName;
+ std::string _eventName;
+ string_table::key _eventKey;
// These two will be needed for consistency checking
//size_t _origEnvStackSize;
@@ -61,11 +62,13 @@
///
BroadcasterVisitor(const fn_call& fn)
:
- _eventName(0),
+ _eventName(),
+ _eventKey(0),
_dispatched(0),
_fn(fn)
{
- _eventName =
VM::get().getStringTable().find(PROPNAME(fn.arg(0).to_string()));
+ _eventName = fn.arg(0).to_string();
+ _eventKey = VM::get().getStringTable().find(_eventName);
_fn.drop_bottom();
}
@@ -75,31 +78,9 @@
boost::intrusive_ptr<as_object> o = v.to_object();
if ( ! o ) return;
-#if 1 // oh boy.. I forgot to clean the "super" stuff up :! TODO: make
fetching super easier...
- as_object* super = NULL;
- as_object* owner = NULL;
- Property* p = o->findProperty(_eventName, 0, &owner);
- if ( ! p )
- {
- //log_debug("Object %p has no event handler named %s",
o, VM::get().getStringTable().value(_eventName));
- // Older code used to increment this even when method
- // was not found, so I guess we'll do the same..
- ++_dispatched;
- return;
- }
- if ( o->isSuper() )
- {
- log_unimpl("Getting super from a super in
AsBroadcaster");
- }
- super = owner->get_super();
- as_value method = p->getValue(*o);
-
- _fn.super = super;
- //log_debug("AsBroadcaster calling function with super %p",
super);
-#else
as_value method;
- o->get_member(_eventName, &method);
-#endif
+ o->get_member(_eventKey, &method);
+ _fn.super = o->get_super(_eventName.c_str());
if ( method.is_function() )
{
Index: server/vm/ASHandlers.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/vm/ASHandlers.cpp,v
retrieving revision 1.254
retrieving revision 1.255
diff -u -b -r1.254 -r1.255
--- server/vm/ASHandlers.cpp 17 Jun 2008 19:36:44 -0000 1.254
+++ server/vm/ASHandlers.cpp 19 Jun 2008 10:51:44 -0000 1.255
@@ -2792,7 +2792,6 @@
this_ptr = thread.getThisPointer();
// the new 'super' will be computed from the old one
- // NOTE: this is equivalent to oldSuper->get_super() [ looks like.. ]
as_function* oldSuper = function.to_as_function();
super = oldSuper->get_super();
}
@@ -3443,62 +3442,25 @@
bool hasMethodName = ( (!method_name.is_undefined()) &&
(!method_string.empty()) );
- as_object* this_ptr = obj.get();
- as_object* super = NULL;
- if ( obj.get() )
+ if ( ! obj )
{
+ // SWF integrity check
+ IF_VERBOSE_ASCODING_ERRORS(
+ log_error(_("ActionCallMethod invoked with "
+ "non-object object/func (%s)"), obj_value);
+ );
+ env.drop(nargs+2);
+ env.top(0).set_undefined();
+ return;
+ }
+
+ as_object* this_ptr = obj.get();
+
if ( obj->isSuper() )
{
if ( thread.isFunction() ) this_ptr = thread.getThisPointer();
-
- as_object* proto = obj->get_prototype().get();
- as_object* owner = proto;
- if ( hasMethodName )
- {
- VM& vm = VM::get();
- if ( vm.getSWFVersion() > 6 )
- {
- string_table::key k =
vm.getStringTable().find(method_string);
- Property* p = obj->findProperty(k, 0, &owner);
- if ( p )
- {
- assert(owner);
- if ( owner != obj.get() ) // I think it would be
impossible for owner to be == obj (since obj is super.)
- {
- proto = owner;
- }
- }
- }
- }
- super = proto ? proto->get_super() : 0;
- }
- else
- {
- as_object* proto = obj->get_prototype().get();
- as_object* owner = proto;
- if ( hasMethodName )
- {
- VM& vm = VM::get();
- if ( vm.getSWFVersion() > 6 )
- {
- string_table::key k =
vm.getStringTable().find(method_string);
- Property* p = obj->findProperty(k, 0, &owner);
- if ( p )
- {
- assert(owner);
- if ( owner != obj.get() )
- {
- proto = owner;
- }
- }
- }
- }
-
- //log_debug("%p.%s() call", obj.get(), method_string);
- if ( proto ) super = proto->get_super();
- else super = obj->get_super();
- }
}
+ as_object* super = obj->get_super(hasMethodName ? method_string.c_str() :
0);
if ( ! hasMethodName )
{
@@ -3507,17 +3469,6 @@
if ( ! method_val.is_function() )
{
- // TODO: log_aserror ? or try to invoke a [[Call]] method
- // ala ECMA262 ?
- if ( ! obj )
- {
- log_error(_("ActionCallMethod invoked with "
- "undefined method_name "
- "and non-object object/func"));
- env.drop(nargs+2);
- env.top(0).set_undefined();
- return;
- }
//#ifdef GNASH_DEBUG
log_debug(_("Function object given to ActionCallMethod"
@@ -3551,20 +3502,6 @@
}
else
{
- if ( ! obj )
- {
- // SWF integrity check
- IF_VERBOSE_ASCODING_ERRORS(
- log_aserror(_("ActionCallMethod: "
- "Tried to invoke method '%s' on non-object value %s."),
- method_name,
- obj_value.typeOf());
- );
- env.drop(nargs+2);
- env.top(0).set_undefined();
- return;
- }
-
if ( ! thread.getObjectMember(*obj, method_string, method_val) )
{
IF_VERBOSE_ASCODING_ERRORS(
Index: testsuite/actionscript.all/Inheritance.as
===================================================================
RCS file: /sources/gnash/gnash/testsuite/actionscript.all/Inheritance.as,v
retrieving revision 1.63
retrieving revision 1.64
diff -u -b -r1.63 -r1.64
--- testsuite/actionscript.all/Inheritance.as 18 Jun 2008 22:35:04 -0000
1.63
+++ testsuite/actionscript.all/Inheritance.as 19 Jun 2008 10:51:44 -0000
1.64
@@ -21,7 +21,7 @@
// compile this test case with Ming makeswf, and then
// execute it like this gnash -1 -r 0 -v out.swf
-rcsid="$Id: Inheritance.as,v 1.63 2008/06/18 22:35:04 strk Exp $";
+rcsid="$Id: Inheritance.as,v 1.64 2008/06/19 10:51:44 strk Exp $";
#include "check.as"
check_equals(typeof(Object.prototype.constructor), 'function');
@@ -333,8 +333,8 @@
check_equals(ActorCalls, 1);
#endif
#if OUTPUT_VERSION > 6
- xcheck_equals(n, "undefinedFFC"); // gnash gives undefinedFC here
- xcheck_equals(FctorCalls, 1); // gnash gives 0 here
+ check_equals(n, "undefinedFFC");
+ check_equals(FctorCalls, 1);
check_equals(BctorCalls, 1);
check_equals(ActorCalls, 0);
#endif
Index: testsuite/swfdec/PASSING
===================================================================
RCS file: /sources/gnash/gnash/testsuite/swfdec/PASSING,v
retrieving revision 1.148
retrieving revision 1.149
diff -u -b -r1.148 -r1.149
--- testsuite/swfdec/PASSING 18 Jun 2008 07:15:43 -0000 1.148
+++ testsuite/swfdec/PASSING 19 Jun 2008 10:51:44 -0000 1.149
@@ -957,6 +957,8 @@
super-existance-5.swf:c8740e8419004119c19555b454c6c073
super-missing-5.swf:ac495f4b39b9f2cbeda4aa32445af59d
super-missing-6.swf:cbe97c91c506c6d622a7b02aec7113d9
+super-missing-7.swf:426a088f86bc53fcaa665fee85c17756
+super-missing-8.swf:a6d21018d5465825c4df2ae47ccd6b84
super-property-5.swf:8c57b2c41aad5760bd5b52c90b359316
super-property-6.swf:7b606f24b21da8c389ccf9f3c8eea66e
super-property-7.swf:d31079db52dee599db902021f74f8394
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Gnash-commit] gnash ChangeLog server/as_function.cpp server/a...,
Sandro Santilli <=