[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Gnash-commit] gnash ./ChangeLog server/action.cpp server/acti...
From: |
strk |
Subject: |
[Gnash-commit] gnash ./ChangeLog server/action.cpp server/acti... |
Date: |
Tue, 14 Feb 2006 17:49:58 +0000 |
CVSROOT: /sources/gnash
Module name: gnash
Branch:
Changes by: strk <address@hidden> 06/02/14 17:49:58
Modified files:
. : ChangeLog
server : action.cpp action.h
testsuite/actionscript.all: Makefile.am
Added files:
testsuite/actionscript.all: delete.as
Log message:
Fixed ACTION_DELETE, added delete test unit
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/gnash/ChangeLog.diff?tr1=1.138&tr2=1.139&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/gnash/gnash/server/action.cpp.diff?tr1=1.48&tr2=1.49&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/gnash/gnash/server/action.h.diff?tr1=1.19&tr2=1.20&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/gnash/gnash/testsuite/actionscript.all/Makefile.am.diff?tr1=1.13&tr2=1.14&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/gnash/gnash/testsuite/actionscript.all/delete.as?rev=1.1
Patches:
Index: gnash/ChangeLog
diff -u gnash/ChangeLog:1.138 gnash/ChangeLog:1.139
--- gnash/ChangeLog:1.138 Tue Feb 14 16:41:02 2006
+++ gnash/ChangeLog Tue Feb 14 17:49:58 2006
@@ -9,8 +9,10 @@
2006-02-14 Sandro Santilli <address@hidden>
* server/Object.{h,cpp}: new instanceOf(function_as_object*) method.
- * server/action.cpp: ACTION_INSTANCEOF and ACTION_CASTOP implemented.
+ * server/action.{h,cpp}: ACTION_INSTANCEOFand ACTION_CASTOP implemented.
+ Fixed ACTION_DELETE.
* testsuite/actionscript.all/Inheritance.as: instanceOf tests.
+ * testsuite/actionscript.all/delete.as: delete tests.
2006-02-14 Michael Carlson <address@hidden>
Index: gnash/server/action.cpp
diff -u gnash/server/action.cpp:1.48 gnash/server/action.cpp:1.49
--- gnash/server/action.cpp:1.48 Tue Feb 14 13:55:59 2006
+++ gnash/server/action.cpp Tue Feb 14 17:49:58 2006
@@ -2138,6 +2138,40 @@
env->drop(1);
}
+ /*private*/
+ void action_buffer::doActionDelete(as_environment* env,
+ array<with_stack_entry>& with_stack)
+ {
+ log_error("todo opcode: %02X\n", SWF::ACTION_DELETEVAR);
+ }
+
+ /*private*/
+ void action_buffer::doActionDelete2(as_environment* env,
+ array<with_stack_entry>& with_stack)
+ {
+ as_value var = env->top(0);
+
+ //log_msg("delete %s\n", var.to_string());
+
+ as_value oldval = env->get_variable_raw(var.to_tu_string(),
+ with_stack);
+
+ if ( ! oldval.get_type() == as_value::UNDEFINED )
+ {
+ // set variable to 'undefined'
+ // that hopefully --ref_count and eventually
+ // release memory.
+ env->set_variable_raw(var.to_tu_string(),
+ as_value(), with_stack);
+ env->top(0).set_bool(true);
+ }
+ else
+ {
+ env->top(0).set_bool(false);
+ }
+
+ //log_error("tocheck opcode: %02X\n", SWF::ACTION_DELETE);
+ }
void action_buffer::execute(
@@ -2541,27 +2575,11 @@
break;
}
case SWF::ACTION_DELETEVAR: // delete
- {
- // @@ TODO
-
- // Apparently this can be used to
remove properties from
- // an object?
-
- log_error("todo opcode: %02X\n",
action_id);
+ doActionDelete(env, with_stack);
break;
- }
- case SWF::ACTION_DELETE: // delete2
- {
- // @@ tulrich: delete is not valid
here! Do we actually just want to
- // NULL out the object pointer in the
environment (to drop the ref)?
- // Should at least check the ref count
before deleting anything!!!
-// as_value obj_name = env->pop();
- as_value obj_ptr =
env->get_variable_raw(env->top(0).to_tu_string(), with_stack);
-///x delete obj_ptr.to_object();
-// log_error("%08X\n",
obj_ptr.to_object());
- log_error("todo opcode: %02X\n",
action_id);
+ case SWF::ACTION_DELETE: // delete2
+ doActionDelete2(env, with_stack);
break;
- }
case SWF::ACTION_VAREQUALS: // set local
{
Index: gnash/server/action.h
diff -u gnash/server/action.h:1.19 gnash/server/action.h:1.20
--- gnash/server/action.h:1.19 Tue Feb 14 13:55:59 2006
+++ gnash/server/action.h Tue Feb 14 17:49:58 2006
@@ -228,6 +228,13 @@
void doActionStrictEquals(as_environment* env);
void doActionEquals(as_environment* env);
+
+ void doActionDelete(as_environment* env,
+ array<with_stack_entry>& with_stack);
+
+ void doActionDelete2(as_environment* env,
+ array<with_stack_entry>& with_stack);
+
};
@@ -339,12 +346,16 @@
/// Returns index of top stack element
int get_top_index() const { return m_stack.size() - 1; }
+ /// \brief
/// Return the (possibly UNDEFINED) value of the named var.
/// Variable name can contain path elements.
- as_value get_variable(const tu_string& varname, const
array<with_stack_entry>& with_stack) const;
+ ///
+ as_value get_variable(const tu_string& varname,
+ const array<with_stack_entry>& with_stack) const;
/// Same of the above, but no support for path.
- as_value get_variable_raw(const tu_string& varname,
const array<with_stack_entry>& with_stack) const;
+ as_value get_variable_raw(const tu_string& varname,
+ const array<with_stack_entry>& with_stack) const;
/// Given a path to variable, set its value.
void set_variable(const tu_string& path, const as_value&
val, const array<with_stack_entry>& with_stack);
Index: gnash/testsuite/actionscript.all/Makefile.am
diff -u gnash/testsuite/actionscript.all/Makefile.am:1.13
gnash/testsuite/actionscript.all/Makefile.am:1.14
--- gnash/testsuite/actionscript.all/Makefile.am:1.13 Mon Feb 13 10:44:12 2006
+++ gnash/testsuite/actionscript.all/Makefile.am Tue Feb 14 17:49:58 2006
@@ -51,6 +51,7 @@
##
GENERATED = \
array.swf \
+ delete.swf \
movieclip.swf \
Boolean.swf \
Camera.swf \