gnash-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Gnash-commit] gnash ChangeLog server/as_value.cpp server/spri...


From: Sandro Santilli
Subject: [Gnash-commit] gnash ChangeLog server/as_value.cpp server/spri...
Date: Wed, 29 Aug 2007 12:31:09 +0000

CVSROOT:        /sources/gnash
Module name:    gnash
Changes by:     Sandro Santilli <strk>  07/08/29 12:31:09

Modified files:
        .              : ChangeLog 
        server         : as_value.cpp sprite_instance.cpp 
                         sprite_instance.h 
        testsuite/misc-swfc.all: soft_reference_test1.sc 

Log message:
                * server/as_value.cpp (to_sprite): use original target, not 
current
                  one, for dereferencing danglign MOVIECLIP refs; add TODO item 
about
                  the onUnload problem.
                * server/sprite_instance.{h,cpp}: add a getOrigTarget() to 
return original
                  target of a sprite (the target it got when first constructed, 
immune
                  from _name changes).
                * testsuite/misc-swfc.all/soft_reference_test1.sc: xcheck => 
check

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.4146&r2=1.4147
http://cvs.savannah.gnu.org/viewcvs/gnash/server/as_value.cpp?cvsroot=gnash&r1=1.67&r2=1.68
http://cvs.savannah.gnu.org/viewcvs/gnash/server/sprite_instance.cpp?cvsroot=gnash&r1=1.313&r2=1.314
http://cvs.savannah.gnu.org/viewcvs/gnash/server/sprite_instance.h?cvsroot=gnash&r1=1.130&r2=1.131
http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/misc-swfc.all/soft_reference_test1.sc?cvsroot=gnash&r1=1.6&r2=1.7

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.4146
retrieving revision 1.4147
diff -u -b -r1.4146 -r1.4147
--- ChangeLog   29 Aug 2007 10:54:17 -0000      1.4146
+++ ChangeLog   29 Aug 2007 12:31:08 -0000      1.4147
@@ -1,5 +1,15 @@
 2007-08-29 Sandro Santilli <address@hidden>
 
+       * server/as_value.cpp (to_sprite): use original target, not current
+         one, for dereferencing danglign MOVIECLIP refs; add TODO item about
+         the onUnload problem.
+       * server/sprite_instance.{h,cpp}: add a getOrigTarget() to return 
original
+         target of a sprite (the target it got when first constructed, immune
+         from _name changes).
+       * testsuite/misc-swfc.all/soft_reference_test1.sc: xcheck => check
+
+2007-08-29 Sandro Santilli <address@hidden>
+
        * testsuite/misc-swfc.all/soft_reference_test1.sc: add some
          comments as to why Gnash fails.
 

Index: server/as_value.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/as_value.cpp,v
retrieving revision 1.67
retrieving revision 1.68
diff -u -b -r1.67 -r1.68
--- server/as_value.cpp 25 Aug 2007 14:15:50 -0000      1.67
+++ server/as_value.cpp 29 Aug 2007 12:31:09 -0000      1.68
@@ -513,12 +513,14 @@
 #ifndef MOVIECLIP_AS_SOFTREF
        sprite_instance* sp = m_object_value->to_movie();
        if ( ! sp ) return NULL; // shoudl we assert(sp) instead ?
+
        if ( sp->isUnloaded() )
+       // TODO: we should also check if the unload event handlers have been 
invoked or not, or references to 'this' in unload handlers will be bogus !
        {
                log_error(_("MovieClip value is a dangling reference: "
                                "target %s was unloaded (looking for a 
substitute on the same target))"),
                                sp->getTarget().c_str());
-               sp = find_sprite_by_target(sp->getTarget());
+               sp = find_sprite_by_target(sp->getOrigTarget());
                return sp;
                //return NULL;
        }

Index: server/sprite_instance.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/sprite_instance.cpp,v
retrieving revision 1.313
retrieving revision 1.314
diff -u -b -r1.313 -r1.314
--- server/sprite_instance.cpp  28 Aug 2007 11:32:44 -0000      1.313
+++ server/sprite_instance.cpp  29 Aug 2007 12:31:09 -0000      1.314
@@ -3359,8 +3359,10 @@
 void
 sprite_instance::construct()
 {
+       _origTarget = getTarget();
+
 #ifdef GNASH_DEBUG
-       log_msg(_("Constructing sprite '%s'"), getTargetPath().c_str());
+       log_msg(_("Constructing sprite '%s'"), _origTarget.c_str());
 #endif
 
        // We *might* avoid this, but better safe then sorry

Index: server/sprite_instance.h
===================================================================
RCS file: /sources/gnash/gnash/server/sprite_instance.h,v
retrieving revision 1.130
retrieving revision 1.131
diff -u -b -r1.130 -r1.131
--- server/sprite_instance.h    13 Aug 2007 07:20:09 -0000      1.130
+++ server/sprite_instance.h    29 Aug 2007 12:31:09 -0000      1.131
@@ -745,6 +745,17 @@
        ///
        virtual void enumerateNonProperties(as_environment&) const;
 
+       /// Return original target path to this object, in dot notation
+       /// as of at construction time.
+       //
+       /// This is needed to properly dereference dangling soft-references
+       /// See testcase misc-swfc.all/soft_reference_test1.sc
+       ///
+       const std::string& getOrigTarget() const
+       {
+               return _origTarget;
+       }
+
 private:
 
        /// \brief
@@ -930,6 +941,8 @@
        ///
        DisplayList _frame0_chars;
 
+       std::string _origTarget;
+
 protected:
 
        void place_character(character* ch, int depth,

Index: testsuite/misc-swfc.all/soft_reference_test1.sc
===================================================================
RCS file: /sources/gnash/gnash/testsuite/misc-swfc.all/soft_reference_test1.sc,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -b -r1.6 -r1.7
--- testsuite/misc-swfc.all/soft_reference_test1.sc     29 Aug 2007 10:54:17 
-0000      1.6
+++ testsuite/misc-swfc.all/soft_reference_test1.sc     29 Aug 2007 12:31:09 
-0000      1.7
@@ -71,7 +71,7 @@
     // Gnash bug:
     //   Target of the sprite mcRef points to changed, so seeking
     //   for the new target fails (_level0.changed doesn't exist)
-    xcheck(mcRef == _level0.mc);
+    check(mcRef == _level0.mc);
   .end
 
 .frame 7
@@ -123,7 +123,7 @@
     //   Thus, when finding a *new* character (the old one was unloaded)
     //   we find the *new* _level0.mc2.
     //   Should be fixed in the same way as for the bug exposed in frame 5
-    xcheck(mcRef.valueOf() == null) 
+    check(mcRef.valueOf() == null) 
     
     // release resources after testing
     delete mcRef;
@@ -161,7 +161,7 @@
     // Gnash bug:
     //   Still the same bug: the ref uses *current* target instead of the one
     //   as of creation time.
-    xcheck(mcRef == _level0.mc1);
+    check(mcRef == _level0.mc1);
     
     _root.totals();
     stop(); 




reply via email to

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