[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Gnash-commit] gnash ChangeLog server/as_value.cpp server/as_v...
From: |
Sandro Santilli |
Subject: |
[Gnash-commit] gnash ChangeLog server/as_value.cpp server/as_v... |
Date: |
Mon, 26 Nov 2007 20:43:47 +0000 |
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] gnash ChangeLog server/as_value.cpp server/as_v...,
Sandro Santilli <=