[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: |
Thu, 10 May 2007 08:18:48 +0000 |
CVSROOT: /sources/gnash
Module name: gnash
Changes by: Sandro Santilli <strk> 07/05/10 08:18:48
Modified files:
. : ChangeLog
server : as_value.cpp as_value.h
Log message:
* server/as_value.{cpp,h}: encoding of movieclip values
by target path made optional, to help future attempts
at changing it, due to conceptual bug found in it running
the displaylist_depths_test2.swf testcase. The default is
no change. Undefine MOVIECLIP_AS_SOFTREF to keep them by
pointer (still fails some testcases so not enabled).
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.3147&r2=1.3148
http://cvs.savannah.gnu.org/viewcvs/gnash/server/as_value.cpp?cvsroot=gnash&r1=1.51&r2=1.52
http://cvs.savannah.gnu.org/viewcvs/gnash/server/as_value.h?cvsroot=gnash&r1=1.51&r2=1.52
Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.3147
retrieving revision 1.3148
diff -u -b -r1.3147 -r1.3148
--- ChangeLog 10 May 2007 08:08:43 -0000 1.3147
+++ ChangeLog 10 May 2007 08:18:48 -0000 1.3148
@@ -1,3 +1,12 @@
+2007-05-10 Sandro Santilli <address@hidden>
+
+ * server/as_value.{cpp,h}: encoding of movieclip values
+ by target path made optional, to help future attempts
+ at changing it, due to conceptual bug found in it running
+ the displaylist_depths_test2.swf testcase. The default is
+ no change. Undefine MOVIECLIP_AS_SOFTREF to keep them by
+ pointer (still fails some testcases so not enabled).
+
2007-05-10 Martin Guy <address@hidden>
* configure.ac: Don't warn about ffmpeg/mad absence during tests;
Index: server/as_value.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/as_value.cpp,v
retrieving revision 1.51
retrieving revision 1.52
diff -u -b -r1.51 -r1.52
--- server/as_value.cpp 2 May 2007 09:42:41 -0000 1.51
+++ server/as_value.cpp 10 May 2007 08:18:48 -0000 1.52
@@ -41,6 +41,10 @@
# define snprintf _snprintf
#endif
+// Undefine this to keep MOVIECLIP values by pointer
+// rather then by "target" ref.
+#define MOVIECLIP_AS_SOFTREF
+
namespace gnash {
//
@@ -464,18 +468,40 @@
}
}
+/* static private */
+sprite_instance*
+as_value::find_sprite_by_target(const std::string& tgtstr)
+{
+ // Evaluate target everytime an attempt is made
+ // to fetch a movieclip value.
+ sprite_instance* root = VM::get().getRoot().get_root_movie();
+ as_environment& env = root->get_environment();
+ character* target = env.find_target(tgtstr);
+ if ( ! target ) return NULL;
+ return target->to_movie();
+}
+
sprite_instance*
as_value::to_sprite() const
{
if ( m_type != MOVIECLIP ) return NULL;
+#ifndef MOVIECLIP_AS_SOFTREF
+ sprite_instance* sp = m_object_value->to_movie();
+ if ( ! sp ) return NULL;
+ if ( sp->isUnloaded() )
+ {
+ log_error(_("MovieClip value is a dangling reference: "
+ "target %s was unloaded (should set to NULL?)"),
+ sp->getTarget().c_str());
+ return NULL;
+ }
+ return sp;
+#else
// Evaluate target everytime an attempt is made
// to fetch a movieclip value.
- sprite_instance* root = VM::get().getRoot().get_root_movie();
- as_environment& env = root->get_environment();
- // TODO: simplify next statement when m_string_value will become a
std::string
- character* target =
env.find_target(std::string(m_string_value.c_str()));
- if ( ! target )
+ sprite_instance* sp = find_sprite_by_target(m_string_value);
+ if ( ! sp )
{
log_error(_("MovieClip value is a dangling reference: "
"target '%s' not found (should set to NULL?)"),
@@ -484,8 +510,9 @@
}
else
{
- return target->to_movie();
+ return sp;
}
+#endif
}
void
@@ -493,8 +520,11 @@
{
drop_refs();
m_type = MOVIECLIP;
- // TODO: simplify next statement when m_string_value will become a
std::string
+#ifndef MOVIECLIP_AS_SOFTREF
+ m_object_value = const_cast<sprite_instance*>(&sprite);
+#else
m_string_value = sprite.get_text_value();
+#endif
}
void
@@ -502,8 +532,14 @@
{
drop_refs();
m_type = MOVIECLIP;
+#ifndef MOVIECLIP_AS_SOFTREF
+ sprite_instance* sp = find_sprite_by_target(path);
+ if ( ! sp ) set_null();
+ else set_sprite(*sp);
+#else
// TODO: simplify next statement when m_string_value will become a
std::string
m_string_value = path.c_str();
+#endif
}
// Return value as an ActionScript function. Returns NULL if value is
@@ -809,8 +845,14 @@
else if (v.m_type == NUMBER) set_double(v.m_number_value);
else if (v.m_type == OBJECT) set_as_object(v.m_object_value);
- //TODO: don't use c_str() when m_string_value will be a std::string
- else if (v.m_type == MOVIECLIP) set_sprite(v.m_string_value.c_str());
+ else if (v.m_type == MOVIECLIP)
+ {
+#ifndef MOVIECLIP_AS_SOFTREF
+ set_sprite(*(v.to_sprite()));
+#else
+ set_sprite(v.m_string_value);
+#endif
+ }
else if (v.m_type == AS_FUNCTION)
set_as_function(v.m_object_value->to_function());
else assert(0);
Index: server/as_value.h
===================================================================
RCS file: /sources/gnash/gnash/server/as_value.h,v
retrieving revision 1.51
retrieving revision 1.52
diff -u -b -r1.51 -r1.52
--- server/as_value.h 27 Apr 2007 08:46:46 -0000 1.51
+++ server/as_value.h 10 May 2007 08:18:48 -0000 1.52
@@ -14,7 +14,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.51 2007/04/27 08:46:46 strk Exp $ */
+/* $Id: as_value.h,v 1.52 2007/05/10 08:18:48 strk Exp $ */
#ifndef GNASH_AS_VALUE_H
#define GNASH_AS_VALUE_H
@@ -457,8 +457,6 @@
m_boolean_value = val;
}
- void set_sprite(const std::string& path);
-
void set_sprite(const sprite_instance& sp);
void set_int(int val) { set_double(val); }
@@ -532,6 +530,11 @@
private:
+ static sprite_instance* find_sprite_by_target(const std::string&
target);
+
+ void set_sprite(const std::string& path);
+
+
/// Return value as a primitive type
//
/// Primitive types are: undefined, null, boolean, string, number.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Gnash-commit] gnash ChangeLog server/as_value.cpp server/as_v...,
Sandro Santilli <=