[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Gnash-commit] gnash ChangeLog server/vm/ActionExec.cpp server...
From: |
Sandro Santilli |
Subject: |
[Gnash-commit] gnash ChangeLog server/vm/ActionExec.cpp server... |
Date: |
Tue, 24 Apr 2007 20:38:27 +0000 |
CVSROOT: /sources/gnash
Module name: gnash
Changes by: Sandro Santilli <strk> 07/04/24 20:38:26
Modified files:
. : ChangeLog
server/vm : ActionExec.cpp ActionExec.h ASHandlers.cpp
testsuite/actionscript.all: delete.as
Log message:
* server/vm/ActionExec.{cpp,h}: add delObjectMember() method.
* server/vm/ASHandlers.cpp (ActionDelete): hopefully fixed -
at least as far as we can tell...
* testsuite/actionscript.all/delete.as: more tests for
ActionDelete.
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.2985&r2=1.2986
http://cvs.savannah.gnu.org/viewcvs/gnash/server/vm/ActionExec.cpp?cvsroot=gnash&r1=1.28&r2=1.29
http://cvs.savannah.gnu.org/viewcvs/gnash/server/vm/ActionExec.h?cvsroot=gnash&r1=1.14&r2=1.15
http://cvs.savannah.gnu.org/viewcvs/gnash/server/vm/ASHandlers.cpp?cvsroot=gnash&r1=1.99&r2=1.100
http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/actionscript.all/delete.as?cvsroot=gnash&r1=1.9&r2=1.10
Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.2985
retrieving revision 1.2986
diff -u -b -r1.2985 -r1.2986
--- ChangeLog 24 Apr 2007 17:52:47 -0000 1.2985
+++ ChangeLog 24 Apr 2007 20:38:26 -0000 1.2986
@@ -1,3 +1,10 @@
+2007-04-24 Sandro Santilli <address@hidden>
+
+ * server/vm/ActionExec.{cpp,h}: add delObjectMember() method.
+ * server/vm/ASHandlers.cpp (ActionDelete): hopefully fixed -
+ at least as far as we can tell...
+ * testsuite/actionscript.all/delete.as: more tests for ActionDelete.
+
2007-04-24 Rob Savoye <address@hidden>
* configure.ac: Remove --enable-extension. Add --with-extensions=
Index: server/vm/ActionExec.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/vm/ActionExec.cpp,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -b -r1.28 -r1.29
--- server/vm/ActionExec.cpp 20 Apr 2007 12:13:34 -0000 1.28
+++ server/vm/ActionExec.cpp 24 Apr 2007 20:38:26 -0000 1.29
@@ -17,7 +17,7 @@
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
//
-/* $Id: ActionExec.cpp,v 1.28 2007/04/20 12:13:34 strk Exp $ */
+/* $Id: ActionExec.cpp,v 1.29 2007/04/24 20:38:26 strk Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -342,6 +342,21 @@
return env.del_variable_raw(namei, with_stack);
}
+bool
+ActionExec::delObjectMember(as_object& obj, const std::string& name)
+{
+ VM& vm = VM::get();
+
+ std::string namei = name;
+
+ if ( vm.getSWFVersion() < 7 ) {
+ boost::to_lower(namei, vm.getLocale());
+ }
+
+ std::pair<bool,bool> ret = obj.delProperty(namei);
+ return ret.second;
+}
+
void
ActionExec::setVariable(const std::string& name, const as_value& val)
{
Index: server/vm/ActionExec.h
===================================================================
RCS file: /sources/gnash/gnash/server/vm/ActionExec.h,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -b -r1.14 -r1.15
--- server/vm/ActionExec.h 28 Mar 2007 16:24:39 -0000 1.14
+++ server/vm/ActionExec.h 24 Apr 2007 20:38:26 -0000 1.15
@@ -228,6 +228,19 @@
///
bool delVariable(const std::string& name);
+ /// Delete a named object member.
+ //
+ /// @param obj
+ /// The object to remove the member/property from.
+ ///
+ /// @param name
+ /// Name of the member.
+ /// Name is converted to lowercase if SWF version is < 7.
+ ///
+ /// @return true if the member was successfully removed, false
otherwise.
+ ///
+ bool delObjectMember(as_object& obj, const std::string& name);
+
/// Set a named variable, seeking for it in the with stack if any.
//
/// @param name
Index: server/vm/ASHandlers.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/vm/ASHandlers.cpp,v
retrieving revision 1.99
retrieving revision 1.100
diff -u -b -r1.99 -r1.100
--- server/vm/ASHandlers.cpp 19 Apr 2007 14:25:41 -0000 1.99
+++ server/vm/ASHandlers.cpp 24 Apr 2007 20:38:26 -0000 1.100
@@ -17,7 +17,7 @@
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
//
-/* $Id: ASHandlers.cpp,v 1.99 2007/04/19 14:25:41 martinwguy Exp $ */
+/* $Id: ASHandlers.cpp,v 1.100 2007/04/24 20:38:26 strk Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -2112,32 +2112,39 @@
void
SWFHandlers::ActionDelete(ActionExec& thread)
{
-// GNASH_REPORT_FUNCTION;
+ //GNASH_REPORT_FUNCTION;
as_environment& env = thread.env;
assert(thread.code[thread.pc] == SWF::ACTION_DELETE); // 0x3A
- size_t stacksize = env.stack_size();
+ thread.ensureStack(2); // obj, member
- if ( stacksize < 1 )
+ // TODO: some parameter checking ?
+ const std::string& propname = env.top(0).to_string(&env);
+ boost::intrusive_ptr<as_object> obj = env.top(1).to_object();
+
+ if ( ! obj )
{
- IF_VERBOSE_MALFORMED_SWF(
- log_swferror(_("No elements on the stack "
- "at ActionDelete (0x3A). "
- "Returning FALSE."));
+ IF_VERBOSE_ASCODING_ERRORS(
+ log_aserror("delete %s.%s : first element is not an object",
+ env.top(1).to_debug_string().c_str(),
+ env.top(0).to_debug_string().c_str());
);
- env.push(as_value(false));
+ env.top(1).set_bool(false);
+ env.drop(1);
return;
}
- // What's the difference between this and ActionDelete2 ??
- env.top(0) = thread.delVariable(env.top(0).to_string(&env));
+ env.top(1).set_bool(thread.delObjectMember(*obj, propname));
+
+ env.drop(1);
+
}
void
SWFHandlers::ActionDelete2(ActionExec& thread)
{
-// GNASH_REPORT_FUNCTION;
+ //GNASH_REPORT_FUNCTION;
as_environment& env = thread.env;
Index: testsuite/actionscript.all/delete.as
===================================================================
RCS file: /sources/gnash/gnash/testsuite/actionscript.all/delete.as,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -b -r1.9 -r1.10
--- testsuite/actionscript.all/delete.as 15 Mar 2007 22:39:54 -0000
1.9
+++ testsuite/actionscript.all/delete.as 24 Apr 2007 20:38:26 -0000
1.10
@@ -1,4 +1,4 @@
-rcsid="$Id: delete.as,v 1.9 2007/03/15 22:39:54 strk Exp $";
+rcsid="$Id: delete.as,v 1.10 2007/04/24 20:38:26 strk Exp $";
#include "check.as"
@@ -57,3 +57,17 @@
check(!delete func.prototype);
check_equals(typeof(func.prototype), 'object');
check_equals(func.prototype.appended_value, 4);
+
+//
+// Deleting an object's member
+//
+
+obj = new Object;
+obj.a = 1;
+check_equals(obj.a, 1);
+check(delete obj.a);
+check_equals(typeof(obj.a), 'undefined');
+check(!delete obj.a);
+check(!delete unexistent.a);
+
+// TODO: try other malformed ActionDelete calls
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Gnash-commit] gnash ChangeLog server/vm/ActionExec.cpp server...,
Sandro Santilli <=