gnash-commit
[Top][All Lists]
Advanced

[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              \




reply via email to

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