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: Sat, 04 Feb 2006 15:32:07 +0000

CVSROOT:        /sources/gnash
Module name:    gnash
Branch:         
Changes by:     strk <address@hidden>   06/02/04 15:32:07

Modified files:
        .              : ChangeLog 
        server         : action.cpp action.h 

Log message:
        ACTION_INIOBJECT (0x43) implemented

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/gnash/ChangeLog.diff?tr1=1.84&tr2=1.85&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/gnash/gnash/server/action.cpp.diff?tr1=1.18&tr2=1.19&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/gnash/gnash/server/action.h.diff?tr1=1.7&tr2=1.8&r1=text&r2=text

Patches:
Index: gnash/ChangeLog
diff -u gnash/ChangeLog:1.84 gnash/ChangeLog:1.85
--- gnash/ChangeLog:1.84        Sat Feb  4 15:01:51 2006
+++ gnash/ChangeLog     Sat Feb  4 15:32:06 2006
@@ -2,6 +2,8 @@
 
        * libbase/container.h:  Doxygen-compatible comments for hash
        struct. Const-correct size() method.
+       * server/action.cpp: opcode 0x43 (Declare Object / INITOBJECT)
+       implemented.
 
 2006-02-04  Rob Savoye  <address@hidden>
 
Index: gnash/server/action.cpp
diff -u gnash/server/action.cpp:1.18 gnash/server/action.cpp:1.19
--- gnash/server/action.cpp:1.18        Sat Feb  4 09:14:25 2006
+++ gnash/server/action.cpp     Sat Feb  4 15:32:06 2006
@@ -2235,8 +2235,34 @@
                                }
                                case SWF::ACTION_INITOBJECT:    // declare 
object
                                {
+                                       // 
+                                       //    SWFACTION_PUSH
+                                       //     [000]   Constant: 1 "obj"
+                                       //     [001]   Constant: 0 "member" <-- 
we handle up to here
+                                       //     [002]   Integer: 1
+                                       //     [003]   Integer: 1
+                                       //    SWFACTION_INITOBJECT
+
+                                       int nmembers = (int) 
env->pop().to_number();
+
+                                       smart_ptr<as_object> new_obj_ptr(new 
as_object); // won't this be leaking ?
+
+                                       // Set provided members
+                                       for (int i=0; i<nmembers; ++i) {
+                                               as_value member_value = 
env->pop();
+                                               tu_stringi member_name = 
env->pop().to_tu_stringi();
+                                               
new_obj_ptr->set_member(member_name, member_value);
+                                       }
+
                                        // @@ TODO
-                                       log_error("todo opcode: %02X\n", 
action_id);
+                                       //log_error("checkme opcode: %02X\n", 
action_id);
+
+                                       as_value new_obj;
+                                       
new_obj.set_as_object_interface(new_obj_ptr.get_ptr());
+
+                                       //env->drop(nmembers*2);
+                                       env->push(new_obj); 
+
                                        break;
                                }
                                case SWF::ACTION_TYPEOF:        // type of
Index: gnash/server/action.h
diff -u gnash/server/action.h:1.7 gnash/server/action.h:1.8
--- gnash/server/action.h:1.7   Sat Feb  4 15:11:52 2006
+++ gnash/server/action.h       Sat Feb  4 15:32:07 2006
@@ -868,6 +868,9 @@
                // stack access/manipulation
                void    push(T val) { push_val(as_value(val)); }
                void    push_val(const as_value& val) { m_stack.push_back(val); 
}
+
+
+               /// Pops an as_value off the stack top and return it.
                as_value        pop() { as_value result = m_stack.back(); 
m_stack.pop_back(); return result; }
 
                /// Get stack value at the given distance from top.




reply via email to

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