[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: |
Mon, 10 Mar 2008 23:23:11 +0000 |
CVSROOT: /sources/gnash
Module name: gnash
Changes by: Sandro Santilli <strk> 08/03/10 23:23:11
Modified files:
. : ChangeLog
server : as_function.cpp as_object.cpp as_object.h
as_value.cpp swf_function.cpp
server/vm : ASHandlers.cpp action.cpp action.h fn_call.h
testsuite/actionscript.all: Inheritance.as
testsuite/misc-mtasc.all: Makefile.am
testsuite/swfdec: PASSING
Log message:
First pass for proper 'super'.
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.5863&r2=1.5864
http://cvs.savannah.gnu.org/viewcvs/gnash/server/as_function.cpp?cvsroot=gnash&r1=1.49&r2=1.50
http://cvs.savannah.gnu.org/viewcvs/gnash/server/as_object.cpp?cvsroot=gnash&r1=1.102&r2=1.103
http://cvs.savannah.gnu.org/viewcvs/gnash/server/as_object.h?cvsroot=gnash&r1=1.96&r2=1.97
http://cvs.savannah.gnu.org/viewcvs/gnash/server/as_value.cpp?cvsroot=gnash&r1=1.118&r2=1.119
http://cvs.savannah.gnu.org/viewcvs/gnash/server/swf_function.cpp?cvsroot=gnash&r1=1.49&r2=1.50
http://cvs.savannah.gnu.org/viewcvs/gnash/server/vm/ASHandlers.cpp?cvsroot=gnash&r1=1.207&r2=1.208
http://cvs.savannah.gnu.org/viewcvs/gnash/server/vm/action.cpp?cvsroot=gnash&r1=1.33&r2=1.34
http://cvs.savannah.gnu.org/viewcvs/gnash/server/vm/action.h?cvsroot=gnash&r1=1.14&r2=1.15
http://cvs.savannah.gnu.org/viewcvs/gnash/server/vm/fn_call.h?cvsroot=gnash&r1=1.15&r2=1.16
http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/actionscript.all/Inheritance.as?cvsroot=gnash&r1=1.44&r2=1.45
http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/misc-mtasc.all/Makefile.am?cvsroot=gnash&r1=1.26&r2=1.27
http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/swfdec/PASSING?cvsroot=gnash&r1=1.99&r2=1.100
Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.5863
retrieving revision 1.5864
diff -u -b -r1.5863 -r1.5864
--- ChangeLog 10 Mar 2008 20:41:07 -0000 1.5863
+++ ChangeLog 10 Mar 2008 23:23:09 -0000 1.5864
@@ -1,3 +1,22 @@
+2008-03-10 Sandro Santilli <address@hidden>
+
+ * server/vm/fn_call.h: add a 'super' member in the function call.
+ * server/vm/action.{cpp,h}: allow passing a 'super' object to
+ call_method.
+ * server/as_object.{cpp,h}: implement get_constructor,
+ reimplement get_super, add isSuper virtual function,
+ provide a special 'as_super' class.
+ * server/as_function.cpp (constructInstance): provide proper 'super'
+ reference.
+ * server/as_value.cpp (typeOf): advertise the super object as an
+ 'object'
+ * server/swf_function.cpp: use fn_call::super as the super reference.
+ * server/vm/ASHandlers.cpp (ActionCallFunction, ActionCallMethod):
+ properly setup a 'super' in function calls.
+ * testsuite/actionscript.all/Inheritance.as: new successes.
+ * testsuite/misc-mtasc.all/Makefile.am: super_test1.swf succeeds.
+ * testsuite/swfdec/PASSING: 8 super-related tests succeed.
+
2008-03-10 Benjamin Wolsey <address@hidden>
* doc/C/usermanual/gnashrc.xml: add information about ignoreFSCommands
Index: server/as_function.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/as_function.cpp,v
retrieving revision 1.49
retrieving revision 1.50
diff -u -b -r1.49 -r1.50
--- server/as_function.cpp 19 Feb 2008 19:20:52 -0000 1.49
+++ server/as_function.cpp 10 Mar 2008 23:23:09 -0000 1.50
@@ -422,9 +422,15 @@
}
}
+ // 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();
+
// Call the actual constructor function; new_obj is its 'this'.
+
// We don't need the function result.
- call(fn_call(newobj.get(), &env, nargs, first_arg_index));
+ call(fn_call(newobj.get(), &env, nargs, first_arg_index,
super));
}
if (!has_proto)
Index: server/as_object.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/as_object.cpp,v
retrieving revision 1.102
retrieving revision 1.103
diff -u -b -r1.102 -r1.103
--- server/as_object.cpp 10 Mar 2008 08:19:38 -0000 1.102
+++ server/as_object.cpp 10 Mar 2008 23:23:10 -0000 1.103
@@ -32,6 +32,7 @@
#include "Object.h" // for getObjectInterface
#include "action.h" // for call_method
#include "array.h" // for setPropFlags
+#include "as_function.h" // for inheritance of as_super
#include <set>
#include <string>
@@ -46,6 +47,66 @@
using namespace gnash;
+/// 'super' is a special kind of object
+//
+/// See http://wiki.gnashdev.org/wiki/index.php/ActionScriptSuper
+///
+/// We make it derive from as_function instead of as_object
+/// to avoid touching too many files (ie: an as_object is not considered
+/// something that can be called by current Gnash code). We may want
+/// to change this in the future to implement what ECMA-262 refers to
+/// as the [[Call]] property of objects.
+///
+class as_super : public as_function
+{
+public:
+
+ as_super(as_function* ctor, as_object* proto)
+ :
+ _ctor(ctor),
+ _proto(proto)
+ {
+ //set_prototype(getObjectInterface());
+ }
+
+ virtual bool isSuper() const { return true; }
+
+ // Fetching members from 'super' yelds a lookup on the associated
prototype
+ virtual bool get_member(string_table::key name, as_value* val,
+ string_table::key nsname = 0)
+ {
+ //log_debug("as_super::get_member %s called - _proto is %p",
getVM().getStringTable().value(name).c_str(), _proto);
+ if ( _proto ) return _proto->get_member(name, val, nsname);
+ log_debug("Super has no associated prototype");
+ return false;
+ }
+
+ // Setting members on 'super' is a no-op
+ virtual void set_member(string_table::key /*key*/, const as_value&
/*val*/,
+ string_table::key /*nsname*/ = 0)
+ {
+ // can't assign to super
+ IF_VERBOSE_ASCODING_ERRORS(
+ log_aserror("Can't set members on the 'super' object");
+ );
+ }
+
+ /// Dispatch.
+ virtual as_value operator()(const fn_call& fn)
+ {
+ //log_debug("Super call operator. fn.this_ptr is %p",
fn.this_ptr);
+ if ( _ctor ) return _ctor->call(fn);
+ log_debug("Super has no associated constructor");
+ return as_value();
+ }
+
+private:
+
+ as_function* _ctor;
+ as_object* _proto;
+};
+
+
// A PropertyList visitor copying properties to an object
class PropsCopier {
@@ -144,16 +205,89 @@
as_object*
as_object::get_super()
{
+#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;
+ }
+
+ 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.to_debug_string());
+ getting = false;
+ return NULL;
+ }
+
+ as_function* constructor = proto->get_constructor();
+ if ( ! constructor )
+ {
+ log_debug("This object's (%s @ %p) 'prototype' has no
constructor", typeName(*this), (void*)this);
+ }
+
+ // 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
+
+ getting = false;
+
+ return new as_super(constructor, prototype);
+#else
// Super is this.__proto__.__constructor__.prototype
as_object *proto = get_prototype().get();
if (!proto)
@@ -197,13 +331,21 @@
getting = false;
return super;
+#endif
+#endif
}
as_function*
as_object::get_constructor()
{
- // TODO: Implement
+ as_value ctorVal;
+ if ( ! get_member(NSV::PROP_uuCONSTRUCTORuu, &ctorVal) )
+ {
+ //log_debug("Object %p has no __constructor__ member");
return NULL;
+ }
+ //log_debug("%p.__constructor__ is %s",
ctorVal.to_debug_string().c_str());
+ return ctorVal.to_as_function();
}
int
@@ -855,6 +997,16 @@
boost::intrusive_ptr<as_object>
as_object::get_prototype()
{
+#if 0
+ as_value val;
+ if ( ! get_member(NSV::PROP_uuPROTOuu, &val) )
+ {
+ //log_debug("Object %p has no __proto__ member");
+ return NULL;
+ }
+ //log_debug("%p.__proto__ is %s", val.to_debug_string().c_str());
+ return val.to_object().get();
+#else
static string_table::key key = NSV::PROP_uuPROTOuu;
int swfVersion = _vm.getSWFVersion();
@@ -868,6 +1020,7 @@
as_value tmp = prop->getValue(*this);
return tmp.to_object();
+#endif
}
bool
Index: server/as_object.h
===================================================================
RCS file: /sources/gnash/gnash/server/as_object.h,v
retrieving revision 1.96
retrieving revision 1.97
diff -u -b -r1.96 -r1.97
--- server/as_object.h 10 Mar 2008 08:19:38 -0000 1.96
+++ server/as_object.h 10 Mar 2008 23:23:10 -0000 1.97
@@ -718,6 +718,10 @@
///
virtual bool isDateObject() { return false; }
+ /// Return true if this is a 'super' object
+ virtual bool isSuper() const { return false; }
+
+
/// Add an interface to the list of interfaces.
/// Used by instanceOf
void add_interface(as_object* ctor);
Index: server/as_value.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/as_value.cpp,v
retrieving revision 1.118
retrieving revision 1.119
diff -u -b -r1.118 -r1.119
--- server/as_value.cpp 7 Mar 2008 17:14:05 -0000 1.118
+++ server/as_value.cpp 10 Mar 2008 23:23:10 -0000 1.119
@@ -1027,7 +1027,8 @@
return "null";
case as_value::AS_FUNCTION:
- return "function";
+ if ( getFun()->isSuper() ) return "object";
+ else return "function";
default:
if (is_exception())
Index: server/swf_function.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/swf_function.cpp,v
retrieving revision 1.49
retrieving revision 1.50
diff -u -b -r1.49 -r1.50
--- server/swf_function.cpp 7 Mar 2008 21:07:51 -0000 1.49
+++ server/swf_function.cpp 10 Mar 2008 23:23:10 -0000 1.50
@@ -118,7 +118,9 @@
as_object *super = NULL;
if (swfversion > 5)
{
- super = fn.this_ptr->get_super();
+ super = fn.super;
+ //if ( super ) log_debug("Super is %s @ %p", typeName(*super),
(void*)super);
+ //else log_debug("Super is not available");
}
if (m_is_function2 == false)
@@ -147,7 +149,7 @@
our_env->set_local("this", fn.this_ptr);
// Add 'super' (SWF6+ only)
- if ( swfversion > 5 )
+ if ( super && swfversion > 5 )
{
our_env->set_local("super", as_value(super));
}
@@ -244,16 +246,20 @@
if ( (m_function2_flags & PRELOAD_SUPER) && swfversion > 5)
{
// Put 'super' in a register (SWF6+ only).
+ // TOCHECK: should we still set it if not available ?
+ if ( super ) {
our_env->local_register(current_reg).set_as_object(super);
current_reg++;
}
+ }
if (m_function2_flags & SUPPRESS_SUPER)
{
// Don't put 'super' in a local var.
}
- else if ( swfversion > 5 )
+ else if ( super && swfversion > 5 )
{
+ // TOCHECK: should we still set it if unavailable ?
// Put 'super' in a local var (SWF6+ only)
our_env->add_local("super", as_value(super));
}
Index: server/vm/ASHandlers.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/vm/ASHandlers.cpp,v
retrieving revision 1.207
retrieving revision 1.208
diff -u -b -r1.207 -r1.208
--- server/vm/ASHandlers.cpp 8 Mar 2008 00:04:20 -0000 1.207
+++ server/vm/ASHandlers.cpp 10 Mar 2008 23:23:10 -0000 1.208
@@ -2727,12 +2727,17 @@
thread.ensureStack(2); // func name, nargs
+ //log_debug("ActionCallFunction: %s",
env.top(0).to_debug_string().c_str());
+
//cerr << "At ActionCallFunction enter:"<<endl;
//env.dump_stack();
// Let's consider it a as a string and lookup the function.
const std::string& funcname = env.top(0).to_string();
as_object* this_ptr = thread.getThisPointer();
+ as_object* super = NULL;
+
+ //log_debug("ActionCallFunction: thread.getThisPointer returned %s @ %p",
typeName(*this_ptr), (void*)this_ptr);
as_value function = thread.getVariable(funcname, &this_ptr);
@@ -2744,6 +2749,7 @@
}
else if ( ! function.is_function() )
{
+ log_error("ActionCallFunction: function name %s evaluated to
non-function value %s", funcname, function.to_debug_string());
// Calling super ?
boost::intrusive_ptr<as_object> obj = function.to_object();
this_ptr = thread.getThisPointer();
@@ -2754,6 +2760,15 @@
)
}
}
+ else if ( function.to_as_function()->isSuper() )
+ {
+ 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();
+ }
// Get number of args, modifying it if not enough values are on the stack.
unsigned nargs = unsigned(env.top(1).to_number());
@@ -2775,8 +2790,10 @@
debugger.callStackPush(function_name);
debugger.matchBreakPoint(function_name, true);
#endif
+
+ //log_debug("ActionCallFunction calling call_method with %p as this_ptr",
this_ptr);
as_value result = call_method(function, &env, this_ptr,
- nargs, env.get_top_index() - 2);
+ nargs, env.get_top_index() - 2, super);
//log_debug(_("Function's result: %s"), result.to_string();
@@ -3413,16 +3430,42 @@
log_action(_(" method nargs: %d"), nargs);
);
+ // TODO:
+ // 1. if object/func is super keep current 'this' when calling the
method (don't pass 'super' as 'this')
+ // 2. if object/func is super pass it over to the function being
invoked or it will create a new
+ // super thus breaking the chain (use fn_call for that ?)
+
string method_string = method_name.to_string();
as_value method_val;
boost::intrusive_ptr<as_object> obj = obj_value.to_object();
- if ( method_name.is_undefined() || method_string.empty() )
+
+ as_object* this_ptr = obj.get();
+ as_object* super = NULL;
+ if ( obj.get() )
+ {
+ if ( obj->isSuper() )
{
+ this_ptr = thread.getThisPointer();
+ super = obj->get_super();
+ }
+ else
+ {
+ //log_debug("%p.%s() call", obj.get(),
method_string.c_str());
+ as_object* proto = obj->get_prototype().get();
+ if ( proto ) super = proto->get_super();
+ else super = obj->get_super();
+ }
+ }
- // Does this ever happen ?
+ if ( method_name.is_undefined() || method_string.empty() )
+ {
+ // We'll be calling the super constructor here
method_val = obj_value;
+
if ( ! method_val.is_function() )
{
+ // TODO: log_aserror ? or try to invoke a [[Call]]
method
+ // ala ECMA262 ?
if ( ! obj )
{
log_error(_("ActionCallMethod invoked with "
@@ -3433,11 +3476,12 @@
return;
}
-#ifdef GNASH_DEBUG
- log_error(_("Function object given to ActionCallMethod"
- " is not a function, will try to use"
- " its 'constructor' member"));
-#endif
+//#ifdef GNASH_DEBUG
+ log_debug(_("Function object given to ActionCallMethod"
+ " is not a function (%s), will try to
use"
+ " its 'constructor' member (but should
instead invoke it's [[Call]] method"),
+ obj_value.to_debug_string().c_str());
+//#endif
// TODO: all this crap should go into an
as_object::getConstructor instead
as_value ctor;
@@ -3460,7 +3504,6 @@
return;
}
method_val = ctor;
- obj = thread.getThisPointer();
}
}
else
@@ -3511,8 +3554,8 @@
}
#endif
- as_value result = call_method(method_val, &env, obj.get(),
- nargs, env.get_top_index()-3);
+ as_value result = call_method(method_val, &env, this_ptr,
+ nargs, env.get_top_index()-3, super);
env.drop(nargs + 2);
env.top(0) = result;
Index: server/vm/action.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/vm/action.cpp,v
retrieving revision 1.33
retrieving revision 1.34
diff -u -b -r1.33 -r1.34
--- server/vm/action.cpp 19 Feb 2008 19:20:57 -0000 1.33
+++ server/vm/action.cpp 10 Mar 2008 23:23:10 -0000 1.34
@@ -138,7 +138,8 @@
as_environment* env,
as_object* this_ptr, // this is ourself
int nargs,
- int first_arg_bottom_index)
+ int first_arg_bottom_index,
+ as_object* super)
// first_arg_bottom_index is the stack index, from the bottom,
// of the first argument.
// Subsequent arguments are at *lower* indices.
@@ -146,7 +147,7 @@
// arg2 is at env->bottom(6), etc.
{
as_value val;
- fn_call call(this_ptr, env, nargs, first_arg_bottom_index);
+ fn_call call(this_ptr, env, nargs, first_arg_bottom_index, super);
try
{
Index: server/vm/action.h
===================================================================
RCS file: /sources/gnash/gnash/server/vm/action.h,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -b -r1.14 -r1.15
--- server/vm/action.h 21 Jan 2008 20:56:04 -0000 1.14
+++ server/vm/action.h 10 Mar 2008 23:23:10 -0000 1.15
@@ -83,7 +83,7 @@
///
DSOEXPORT as_value call_method(const as_value& method, as_environment*
env,
as_object* this_ptr, // this is ourself
- int nargs, int first_arg_bottom_index);
+ int nargs, int first_arg_bottom_index, as_object* super=NULL);
const char* call_method_parsed(
as_environment* env,
Index: server/vm/fn_call.h
===================================================================
RCS file: /sources/gnash/gnash/server/vm/fn_call.h,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -b -r1.15 -r1.16
--- server/vm/fn_call.h 21 Jan 2008 20:56:04 -0000 1.15
+++ server/vm/fn_call.h 10 Mar 2008 23:23:11 -0000 1.16
@@ -47,23 +47,28 @@
/// is taking place.
boost::intrusive_ptr<as_object> this_ptr;
+ /// The "super" object in this function call context
+ as_object* super;
+
/// Number of arguments to this ActionScript function call.
unsigned int nargs;
public:
- fn_call(const fn_call& fn) : this_ptr(fn.this_ptr), nargs(fn.nargs),
- _env(fn._env), _stack_offset(fn._stack_offset)
+ fn_call(const fn_call& fn) : this_ptr(fn.this_ptr), super(fn.super),
+ nargs(fn.nargs), _env(fn._env), _stack_offset(fn._stack_offset)
{/**/}
- fn_call(const fn_call& fn, as_object* this_in) : this_ptr(this_in),
- nargs(fn.nargs), _env(fn._env), _stack_offset(fn._stack_offset)
+ fn_call(const fn_call& fn, as_object* this_in, as_object* sup=NULL)
+ : this_ptr(this_in), super(sup), nargs(fn.nargs),
+ _env(fn._env), _stack_offset(fn._stack_offset)
{/**/}
fn_call(as_object* this_in,
as_environment* env_in,
- int nargs_in, int first_in)
+ int nargs_in, int first_in, as_object* sup=NULL)
:
this_ptr(this_in),
+ super(sup),
nargs(nargs_in),
_env(env_in),
_stack_offset(first_in)
@@ -72,9 +77,11 @@
fn_call(boost::intrusive_ptr<as_object> this_in,
as_environment* env_in,
- int nargs_in, int first_in)
+ int nargs_in, int first_in,
+ as_object* sup=NULL)
:
this_ptr(this_in),
+ super(sup),
nargs(nargs_in),
_env(env_in),
_stack_offset(first_in)
@@ -152,6 +159,7 @@
/// The offset from the bottom of the env callstack to the first
/// argument to our fn_call.
unsigned int _stack_offset;
+
};
/// Signature of a builtin function callable from ActionScript
Index: testsuite/actionscript.all/Inheritance.as
===================================================================
RCS file: /sources/gnash/gnash/testsuite/actionscript.all/Inheritance.as,v
retrieving revision 1.44
retrieving revision 1.45
diff -u -b -r1.44 -r1.45
--- testsuite/actionscript.all/Inheritance.as 5 Mar 2008 03:56:04 -0000
1.44
+++ testsuite/actionscript.all/Inheritance.as 10 Mar 2008 23:23:11 -0000
1.45
@@ -204,7 +204,7 @@
DerivedClass.prototype.typeofSuper = function() { return typeof(super); };
check_equals(derived.typeofSuper(), 'object');
-xcheck_equals(DerivedClass.prototype.typeofSuper(), 'object');
+check_equals(DerivedClass.prototype.typeofSuper(), 'object');
DerivedClass.prototype.getSuper = function() { return super; };
s = derived.getSuper();
@@ -216,7 +216,7 @@
check_equals(typeof(s.constructor), 'function');
check_equals(s.constructor, BaseClass); // maybe sayHello is looked for here...
check_equals(typeof(s.__constructor__), 'undefined');
-xcheck(s != BaseClass.prototype);
+check(s != BaseClass.prototype);
DerivedClass.prototype.typeofThis = function() { return typeof(this); };
check_equals(derived.typeofThis(), 'object');
@@ -253,7 +253,7 @@
xcheck_equals(co.whoami(), "A.B"); // gnash fails returning undefined.B.B
#else
# if OUTPUT_VERSION == 6
- xcheck_equals(co.whoami(), "A.B.B"); // gnash fails returning .B.B
+ check_equals(co.whoami(), "A.B.B"); // gnash fails returning .B.B
# else
check_equals(co.whoami(), ".B");
# endif
@@ -262,7 +262,7 @@
return super.whoami()+"."+"C";
};
#if OUTPUT_VERSION > 5
- xcheck_equals(co.whoami(), "A.B.C"); // gnash fails returning .B.C (SWF6) or
undefined.B.C (SWF>6)
+ check_equals(co.whoami(), "A.B.C"); // gnash fails returning .B.C (SWF6) or
undefined.B.C (SWF>6)
#else
check_equals(co.whoami(), ".C");
#endif
Index: testsuite/misc-mtasc.all/Makefile.am
===================================================================
RCS file: /sources/gnash/gnash/testsuite/misc-mtasc.all/Makefile.am,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -b -r1.26 -r1.27
--- testsuite/misc-mtasc.all/Makefile.am 21 Jan 2008 23:26:52 -0000
1.26
+++ testsuite/misc-mtasc.all/Makefile.am 10 Mar 2008 23:23:11 -0000
1.27
@@ -28,10 +28,10 @@
levels.as \
implementsOpTest.as \
TextFieldTest.as \
+ super_test1.as \
$(NULL)
# These ones are the ones for which consistency check fail
BOGUS_ASTESTS = \
- super_test1.as \
$(NULL)
ASTESTS = $(SANE_ASTESTS) $(BOGUS_ASTESTS)
Index: testsuite/swfdec/PASSING
===================================================================
RCS file: /sources/gnash/gnash/testsuite/swfdec/PASSING,v
retrieving revision 1.99
retrieving revision 1.100
diff -u -b -r1.99 -r1.100
--- testsuite/swfdec/PASSING 7 Mar 2008 19:44:03 -0000 1.99
+++ testsuite/swfdec/PASSING 10 Mar 2008 23:23:11 -0000 1.100
@@ -203,6 +203,7 @@
extends-constructors-7.swf:bdd4d88deef41da109379e5dc0c130d6
extends-constructors-8.swf:b812f8e472f897a73914d10101841b87
extends-simple.swf:5e3daf1e64d50b0c9ef06f7ad99f2bda
+extends-super.swf:d6aa7d61f452c5ee3ff64876ad70263a
external-interface-properties-5.swf:6c1da3512318203a18e0d5c3454f4a7e
external-interface-properties-6.swf:1042fe711f2229195781f9ea1405fe66
external-interface-properties-7.swf:1209e63fc5cadd41f854b3686ec9984f
@@ -700,13 +701,20 @@
substring-6.swf:e60123de4d36fc7483045c2447fbb181
substring-7.swf:7b3cce0a3271468e44fc943eb1ca84bf
super-calls-5.swf:b68c3168ff4881a0cd780f6d4cb21950
+super-calls-6.swf:4a1488708aa782253209fec7e7d6beb9
+super-calls-7.swf:d2ff30bb83164ca63174c70387502baa
+super-calls-8.swf:e17b18bd661325c6f031aa2284fb68bf
super-different-5.swf:8ab7ab25c38807751e3fb7e8bce42217
+super-different-6.swf:7ff9430f0fbc8fd1a57bbb03ad4a2e6c
+super-different-7.swf:bf0e21c50fc981264db912c359ad3f8d
+super-different-8.swf:4706c3ab00d7947d51d359ba12de8dd9
super-equals-this-5.swf:8a903f417fdaa5a9b010f757fa6c0a45
super-equals-this-6.swf:23a2b42ab2bff4bfb00a0490a9395b45
super-equals-this-7.swf:ec2eeb13a1ba8a8c080845847c6c1b56
super-equals-this-8.swf:6b31c99f64d3e0773fdae947fae737dd
super-existance-5.swf:c8740e8419004119c19555b454c6c073
super-missing-5.swf:ac495f4b39b9f2cbeda4aa32445af59d
+super-missing-6.swf:cbe97c91c506c6d622a7b02aec7113d9
super-property-5.swf:8c57b2c41aad5760bd5b52c90b359316
super-property-6.swf:7b606f24b21da8c389ccf9f3c8eea66e
super-property-7.swf:d31079db52dee599db902021f74f8394
- [Gnash-commit] gnash ChangeLog server/as_function.cpp server/a...,
Sandro Santilli <=