gnash-commit
[Top][All Lists]
Advanced

[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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]