gnash-commit
[Top][All Lists]
Advanced

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

Re: [Gnash-commit] gnash ChangeLog server/as_value.cpp server/as_v...


From: zou lunkai
Subject: Re: [Gnash-commit] gnash ChangeLog server/as_value.cpp server/as_v...
Date: Tue, 27 Nov 2007 08:53:05 +0800

+       /// @param allowUnloaded
+       ///     If true an unloaded sprite is still returned as such,
+       ///     rather then attempted to be resolved as a soft-reference.
+       ///     Main use for this is during paths resolution, to avoid
+       ///     infinite loops. See bug #21647.
+       ///
+       sprite_instance* to_sprite(bool allowUnloaded=false) const;

In which scenario we are not allowed to access an unloaded sprites?
Shouldn't  to_sprite() always allow unloaded characters?

--zou


On Nov 27, 2007 4:43 AM, Sandro Santilli <address@hidden> wrote:
> CVSROOT:        /sources/gnash
> Module name:    gnash
> Changes by:     Sandro Santilli <strk>  07/11/26 20:43:47
>
> Modified files:
>         .              : ChangeLog
>         server         : as_value.cpp as_value.h sprite_instance.cpp
>
> Log message:
>         Don't re-bound dangling sprites during evaluation of soft references.
>         Fixes bug #21647 but we don't have an automated test for it yet.
>
> CVSWeb URLs:
> http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.4971&r2=1.4972
> http://cvs.savannah.gnu.org/viewcvs/gnash/server/as_value.cpp?cvsroot=gnash&r1=1.98&r2=1.99
> http://cvs.savannah.gnu.org/viewcvs/gnash/server/as_value.h?cvsroot=gnash&r1=1.74&r2=1.75
> http://cvs.savannah.gnu.org/viewcvs/gnash/server/sprite_instance.cpp?cvsroot=gnash&r1=1.396&r2=1.397
>
> Patches:
> Index: ChangeLog
> ===================================================================
> RCS file: /sources/gnash/gnash/ChangeLog,v
> retrieving revision 1.4971
> retrieving revision 1.4972
> diff -u -b -r1.4971 -r1.4972
> --- ChangeLog   26 Nov 2007 20:11:04 -0000      1.4971
> +++ ChangeLog   26 Nov 2007 20:43:46 -0000      1.4972
> @@ -1,3 +1,11 @@
> +2007-11-26 Sandro Santilli <address@hidden>
> +
> +       * server/as_value.{cpp,h}: add is_sprite() and a way to get the sprite
> +         value w/out re-evaluating path.
> +       * server/sprite_instance.cpp (get_path_element): don't re-evaluate
> +         target paths of unloaded sprites while getting path elements.
> +         Needs more testing, but for now it fixes bug #21647.
> +
>  2007-11-26 Benjamin Wolsey <address@hidden>
>
>         * server/asobj/NetStreamFfmpeg.{cpp,h}: add PktPointer class
>
> Index: server/as_value.cpp
> ===================================================================
> RCS file: /sources/gnash/gnash/server/as_value.cpp,v
> retrieving revision 1.98
> retrieving revision 1.99
> diff -u -b -r1.98 -r1.99
> --- server/as_value.cpp 21 Nov 2007 09:21:49 -0000      1.98
> +++ server/as_value.cpp 26 Nov 2007 20:43:47 -0000      1.99
> @@ -595,11 +595,11 @@
>  }
>
>  sprite_instance*
> -as_value::to_sprite() const
> +as_value::to_sprite(bool allowUnloaded) const
>  {
>         if ( m_type != MOVIECLIP ) return NULL;
>
> -       return getSprite();
> +       return getSprite(allowUnloaded);
>  }
>
>  void
> @@ -1296,10 +1296,10 @@
>  }
>
>  as_value::SpritePtr
> -as_value::getSprite() const
> +as_value::getSprite(bool allowUnloaded) const
>  {
>         assert(m_type == MOVIECLIP);
> -       return boost::get<SpriteProxy>(_value).get();
> +       return boost::get<SpriteProxy>(_value).get(allowUnloaded);
>  }
>
>  void
>
> Index: server/as_value.h
> ===================================================================
> RCS file: /sources/gnash/gnash/server/as_value.h,v
> retrieving revision 1.74
> retrieving revision 1.75
> diff -u -b -r1.74 -r1.75
> --- server/as_value.h   20 Nov 2007 00:44:03 -0000      1.74
> +++ server/as_value.h   26 Nov 2007 20:43:47 -0000      1.75
> @@ -15,7 +15,7 @@
>  // along with this program; if not, write to the Free Software
>  // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
>
> -/* $Id: as_value.h,v 1.74 2007/11/20 00:44:03 cmusick Exp $ */
> +/* $Id: as_value.h,v 1.75 2007/11/26 20:43:47 strk Exp $ */
>
>  #ifndef GNASH_AS_VALUE_H
>  #define GNASH_AS_VALUE_H
> @@ -261,6 +261,14 @@
>                 return m_type == OBJECT || m_type == AS_FUNCTION || m_type == 
> MOVIECLIP;
>         }
>
> +       /// \brief
> +       /// Return true if this value is a MOVIECLIP
> +       ///
> +       bool is_sprite() const
> +       {
> +               return m_type == MOVIECLIP;
> +       }
> +
>         /// Get a std::string representation for this value.
>         //
>         /// @param env
> @@ -371,7 +379,13 @@
>         /// Note that if the value is NOT a MOVIECLIP, NULL is always
>         /// returned.
>         ///
> -       sprite_instance* to_sprite() const;
> +       /// @param allowUnloaded
> +       ///     If true an unloaded sprite is still returned as such,
> +       ///     rather then attempted to be resolved as a soft-reference.
> +       ///     Main use for this is during paths resolution, to avoid
> +       ///     infinite loops. See bug #21647.
> +       ///
> +       sprite_instance* to_sprite(bool allowUnloaded=false) const;
>
>         /// \brief
>         /// Return value as an ActionScript function ptr
> @@ -613,8 +627,10 @@
>                 //
>                 /// @return the currently bound sprite, NULL if none
>                 ///
> -               sprite_instance* get() const
> +               sprite_instance* get(bool allowUnloaded=false) const
>                 {
> +                       if ( allowUnloaded ) return _ptr;
> +
>                         checkDangling(); // set _ptr to NULL and _tgt to 
> original target if destroyed
>                         if ( _ptr ) return _ptr;
>                         else return find_sprite_by_target(_tgt);
> @@ -693,7 +709,7 @@
>         //
>         /// NOTE: this is possibly NULL !
>         ///
> -       SpritePtr getSprite() const;
> +       SpritePtr getSprite(bool allowUnloaded=false) const;
>
>         /// Get the sprite proxy variant member (we assume m_type == 
> MOVIECLIP)
>         //
>
> Index: server/sprite_instance.cpp
> ===================================================================
> RCS file: /sources/gnash/gnash/server/sprite_instance.cpp,v
> retrieving revision 1.396
> retrieving revision 1.397
> diff -u -b -r1.396 -r1.397
> --- server/sprite_instance.cpp  24 Nov 2007 17:21:44 -0000      1.396
> +++ server/sprite_instance.cpp  26 Nov 2007 20:43:47 -0000      1.397
> @@ -2345,6 +2345,11 @@
>         {
>                 return NULL;
>         }
> +       if ( tmp.is_sprite() )
> +       {
> +               return tmp.to_sprite(true);
> +       }
> +
>         return tmp.to_object().get();
>  }
>
>
>
> _______________________________________________
> Gnash-commit mailing list
> address@hidden
> http://lists.gnu.org/mailman/listinfo/gnash-commit
>




reply via email to

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