gnash-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Gnash-commit] gnash ChangeLog server/ActionExec.cpp server/Fu...


From: Sandro Santilli
Subject: [Gnash-commit] gnash ChangeLog server/ActionExec.cpp server/Fu...
Date: Wed, 05 Jul 2006 23:56:08 +0000

CVSROOT:        /sources/gnash
Module name:    gnash
Changes by:     Sandro Santilli <strk>  06/07/05 23:56:08

Modified files:
        .              : ChangeLog 
        server         : ActionExec.cpp Function.cpp Global.cpp 
                         as_environment.cpp as_environment.h 
        server/swf     : ASHandlers.cpp 

Log message:
                * server/ActionExec.cpp, server/Function.cpp, server/Global.cpp
                server/as_environment.cpp, server/as_environment.h,
                server/swf/ASHandlers.cpp: environment's global and local 
registers
                made private; provided accessor methods checking for out of 
bound
                conditions; added dumpers for them. Updated all users.
                WARNING: 1-based register must be checked, but ming is unable
                to output Function2 code...

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.467&r2=1.468
http://cvs.savannah.gnu.org/viewcvs/gnash/server/ActionExec.cpp?cvsroot=gnash&r1=1.11&r2=1.12
http://cvs.savannah.gnu.org/viewcvs/gnash/server/Function.cpp?cvsroot=gnash&r1=1.24&r2=1.25
http://cvs.savannah.gnu.org/viewcvs/gnash/server/Global.cpp?cvsroot=gnash&r1=1.16&r2=1.17
http://cvs.savannah.gnu.org/viewcvs/gnash/server/as_environment.cpp?cvsroot=gnash&r1=1.9&r2=1.10
http://cvs.savannah.gnu.org/viewcvs/gnash/server/as_environment.h?cvsroot=gnash&r1=1.11&r2=1.12
http://cvs.savannah.gnu.org/viewcvs/gnash/server/swf/ASHandlers.cpp?cvsroot=gnash&r1=1.29&r2=1.30

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.467
retrieving revision 1.468
diff -u -b -r1.467 -r1.468
--- ChangeLog   5 Jul 2006 17:56:51 -0000       1.467
+++ ChangeLog   5 Jul 2006 23:56:08 -0000       1.468
@@ -1,3 +1,14 @@
+2006-07-06 Sandro Santilli <address@hidden>
+
+       * server/ActionExec.cpp, server/Function.cpp, server/Global.cpp
+       server/as_environment.cpp, server/as_environment.h,
+       server/swf/ASHandlers.cpp: environment's global and local registers
+       made private; provided accessor methods checking for out of bound
+       conditions; added dumpers for them. Updated all users.
+       WARNING: 1-based register must be checked, but ming is unable
+       to output Function2 code...
+       
+
 2006-07-05 Sandro Santilli <address@hidden>
 
        * testsuite/actionscript.all/Function.as:

Index: server/ActionExec.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/ActionExec.cpp,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -b -r1.11 -r1.12
--- server/ActionExec.cpp       5 Jul 2006 17:10:39 -0000       1.11
+++ server/ActionExec.cpp       5 Jul 2006 23:56:08 -0000       1.12
@@ -133,6 +133,8 @@
         log_action("at ActionExec operator() start, pc=%d, stop_pc=%d, 
code.size=%d.", pc, stop_pc, code.size());
        stringstream ss;
        env.dump_stack(ss);
+       env.dump_global_registers(ss);
+       env.dump_local_registers(ss);
        log_action("%s", ss.str().c_str());
 #endif
 
@@ -179,6 +181,8 @@
        log_action( " PC is now %d.", pc);
        stringstream ss;
        env.dump_stack(ss);
+       env.dump_global_registers(ss);
+       env.dump_local_registers(ss);
        log_action("%s", ss.str().c_str());
 #endif
 

Index: server/Function.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/Function.cpp,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -b -r1.24 -r1.25
--- server/Function.cpp 5 Jul 2006 17:10:39 -0000       1.24
+++ server/Function.cpp 5 Jul 2006 23:56:08 -0000       1.25
@@ -242,16 +242,16 @@
                        {
                                // Pass argument into a register.
                                int     reg = m_args[i].m_register;
-                               *(our_env->local_register_ptr(reg)) = fn.arg(i);
+                               our_env->local_register(reg) = fn.arg(i);
                        }
                }
 
                // Handle the implicit args.
-               int     current_reg = 1;
+               int     current_reg = 0;
                if (m_function2_flags & 0x01)
                {
                        // preload 'this' into a register.
-                       
(*(our_env->local_register_ptr(current_reg))).set_as_object(our_env->get_target());
+                       
our_env->local_register(current_reg).set_as_object(our_env->get_target());
                        current_reg++;
                }
 
@@ -282,7 +282,7 @@
                if (m_function2_flags & 0x04)
                {
                        // preload 'arguments' into a register.
-                       
(*(our_env->local_register_ptr(current_reg))).set_as_object(arg_array.get_ptr());
+                       
our_env->local_register(current_reg).set_as_object(arg_array.get_ptr());
                        current_reg++;
                }
 
@@ -317,7 +317,7 @@
                if (m_function2_flags & 0x40)
                {
                        // Put '_root' in a register.
-                       
(*(our_env->local_register_ptr(current_reg))).set_as_object(
+                       our_env->local_register(current_reg).set_as_object(
                                our_env->get_target()->get_root_movie());
                        current_reg++;
                }
@@ -326,14 +326,14 @@
                {
                        // Put '_parent' in a register.
                        as_value parent = our_env->get_variable("_parent");
-                       (*(our_env->local_register_ptr(current_reg))) = parent;
+                       our_env->local_register(current_reg) = parent;
                        current_reg++;
                }
 
                if (m_function2_flags & 0x100)
                {
                        // Put '_global' in a register.
-                       
(*(our_env->local_register_ptr(current_reg))).set_as_object(s_global.get_ptr());
+                       
our_env->local_register(current_reg).set_as_object(s_global.get_ptr());
                        current_reg++;
                }
        }

Index: server/Global.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/Global.cpp,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -b -r1.16 -r1.17
--- server/Global.cpp   5 Jul 2006 17:10:39 -0000       1.16
+++ server/Global.cpp   5 Jul 2006 23:56:08 -0000       1.17
@@ -368,6 +368,8 @@
 {
        int version = fn.env->get_version();
 
+       log_msg("ASSetPropFlags called with %d args", fn.nargs);
+
        // Check the arguments
        assert(fn.nargs == 3 || fn.nargs == 4);
        assert((version == 5) ? (fn.nargs == 3) : true);
@@ -378,7 +380,7 @@
        as_object* obj = fn.arg(0).to_object();
        if ( ! obj )
        {
-               log_warning("Invalid call to ASSSetPropFlags: "
+               log_warning("Invalid call to ASSetPropFlags: "
                        "object argument is not an object: %s",
                        fn.arg(0).to_string());
                return;

Index: server/as_environment.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/as_environment.cpp,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -b -r1.9 -r1.10
--- server/as_environment.cpp   1 Jul 2006 20:44:10 -0000       1.9
+++ server/as_environment.cpp   5 Jul 2006 23:56:08 -0000       1.10
@@ -274,6 +274,7 @@
     m_variables[varname] = val;
 }
 
+#if 0
 as_value*
 as_environment::local_register_ptr(unsigned int reg)
 {
@@ -292,6 +293,7 @@
     
        return &m_local_register[m_local_register.size() - reg];
 }
+#endif
 
 // Search the active frame for the named var; return its index
 // in the m_local_frames stack if found.
@@ -477,7 +479,6 @@
        return md->get_version();
 }
 
-
 };
 
 

Index: server/as_environment.h
===================================================================
RCS file: /sources/gnash/gnash/server/as_environment.h,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -b -r1.11 -r1.12
--- server/as_environment.h     1 Jul 2006 20:44:10 -0000       1.11
+++ server/as_environment.h     5 Jul 2006 23:56:08 -0000       1.12
@@ -51,7 +51,7 @@
 
 #include "container.h" // for composition (stringi_hash, tu_string)
 #include "as_value.h" // for composition (vector + frame_slot)
-#include "log.h" // for inlines (dump_stack)
+#include "log.h" // for inlines (dump_*)
 
 #include <vector>
 
@@ -68,11 +68,6 @@
        /// Stack of as_values in this environment
        std::vector<as_value>   m_stack;
 
-       as_value        m_global_register[4];
-
-       /// function2 uses this
-       std::vector<as_value>   m_local_register;
-
        /// Variables available in this environment
        stringi_hash<as_value>  m_variables;
 
@@ -82,8 +77,16 @@
                tu_string       m_name;
                as_value        m_value;
 
-               frame_slot() {}
-               frame_slot(const tu_string& name, const as_value& val) : 
m_name(name), m_value(val) {}
+               frame_slot()
+               {
+               }
+
+               frame_slot(const tu_string& name, const as_value& val)
+                       :
+                       m_name(name),
+                       m_value(val)
+               {
+               }
        };
 
        std::vector<frame_slot> m_local_frames;
@@ -214,7 +217,21 @@
        /// we log an error, but still return a valid pointer (to
        /// global reg[0]).  So the behavior is a bit undefined, but
        /// not dangerous.
-       as_value* local_register_ptr(unsigned int reg);
+       //as_value* local_register_ptr(unsigned int reg);
+
+       /// Return a reference to the Nth local register.
+       as_value& local_register(uint8_t n)
+       {
+               assert( n < m_local_register.size() );
+               return m_local_register[n];
+       }
+
+       /// Return a reference to the Nth global register.
+       as_value& global_register(unsigned int n)
+       {
+               assert(n<4);
+               return m_global_register[n];
+       }
 
        /// Find the sprite/movie referenced by the given path.
        sprite_instance*        find_target(const tu_string& path) const;
@@ -226,22 +243,42 @@
        /// string giving a relative path name to the object.
        sprite_instance*        find_target(const as_value& val) const;
 
-       /// Dump content of the stack using the log_msg function
+       /// Dump content of the stack to a std::ostream
        void dump_stack(std::ostream& out=std::cerr)
        {
                out << "Stack: ";
-               for (int i=0, n=m_stack.size(); i<n; i++)
+               for (unsigned int i=0, n=m_stack.size(); i<n; i++)
                {
-#if 0 // use horizontal layout, easier to read
-                       out << "Stack[" << i << "]: " 
-                           << m_stack[i].to_string() << std::endl;
-#endif
                        if (i) out << " | ";
                        out << '"' << m_stack[i].to_string() << '"';
                }
                out << std::endl;
        }
 
+       /// Dump the local registers to a std::ostream
+       void dump_local_registers(std::ostream& out=std::cerr)
+       {
+               out << "Local registers: ";
+               for (unsigned int i=0, n=m_local_register.size(); i<n; i++)
+               {
+                       if (i) out << " | ";
+                       out << '"' << m_local_register[i].to_string() << '"';
+               }
+               out << std::endl;
+       }
+
+       /// Dump the global registers to a std::ostream
+       void dump_global_registers(std::ostream& out=std::cerr)
+       {
+               out << "Global registers: ";
+               for (unsigned int i=0; i<4; ++i)
+               {
+                       if (i) out << " | ";
+                       out << '"' << m_global_register[i].to_string() << '"';
+               }
+               out << std::endl;
+       }
+
        /// Return the SWF version we're running for.
        //
        /// TODO: check what to return when playing multiple
@@ -253,6 +290,11 @@
 
 private:
 
+       as_value m_global_register[4];
+
+       /// function2 uses this (could move to swf_function2 class)
+       std::vector<as_value>   m_local_register;
+
        /// Movie target. 
        sprite_instance*        m_target;
 

Index: server/swf/ASHandlers.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/swf/ASHandlers.cpp,v
retrieving revision 1.29
retrieving revision 1.30
diff -u -b -r1.29 -r1.30
--- server/swf/ASHandlers.cpp   5 Jul 2006 17:10:40 -0000       1.29
+++ server/swf/ASHandlers.cpp   5 Jul 2006 23:56:08 -0000       1.30
@@ -1314,10 +1314,10 @@
                  log_action("-------------- pushed UNDEFINED");
              } else if (type == 4) {
                  // contents of register
-                 int   reg = code[3 + i];
-                 i++;
+                 uint8_t reg = code[3 + i];
+                 ++i;
                  if ( thread.isFunction2() ) {
-                     env.push(*(env.local_register_ptr(reg)));
+                     env.push(env.local_register(reg));
                      log_action("-------------- pushed local register[%d] = 
'%s'\n",
                                  reg,
                                  env.top(0).to_string());
@@ -1325,7 +1325,7 @@
                      env.push(as_value());
                      log_error("push register[%d] -- register out of 
bounds!\n", reg);
                  } else {
-                     env.push(env.m_global_register[reg]);
+                     env.push(env.global_register(reg));
                      log_action("-------------- pushed global register[%d] = 
'%s'\n",
                                  reg,
                                  env.top(0).to_string());
@@ -2193,7 +2193,7 @@
     log_action(" method object: %p\n", (void*)obj);
 
     // Get number of arguments
-    int        nargs = (int) env.top(2).to_number();
+    int nargs = static_cast<int>(env.top(2).to_number());
     log_action(" method nargs: %d\n", nargs);
 
     ensure_stack(env, 3+nargs); // actual args
@@ -2444,6 +2444,8 @@
                // @@ security: watch out for possible missing terminator here!
                const char* arg = code.read_string(i);
 
+               log_msg("Setting register %d/%d to %s", arg_register, nargs, 
arg);
+
                func->add_arg(arg_register, arg);
                i += strlen(arg)+1;
        }
@@ -2596,12 +2598,12 @@
 
        const action_buffer& code = thread.code;
 
-       int reg = code[thread.pc + 3];
+       uint8_t reg = code[thread.pc + 3];
 
        // Save top of stack in specified register.
        if ( thread.isFunction2() )
        {
-               *(env.local_register_ptr(reg)) = env.top(0);
+               env.local_register(reg) = env.top(0);
                      
                log_action("-------------- local register[%d] = '%s'\n",
                        reg, env.top(0).to_string());
@@ -2609,7 +2611,7 @@
        }
        else if (reg >= 0 && reg < 4)
        {
-               env.m_global_register[reg] = env.top(0);
+               env.global_register(reg) = env.top(0);
                      
                log_action("-------------- global register[%d] = '%s'\n",
                        reg, env.top(0).to_string() );




reply via email to

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