gnash-commit
[Top][All Lists]
Advanced

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

[Gnash-commit] gnash ./ChangeLog server/Object.cpp server/acti...


From: strk
Subject: [Gnash-commit] gnash ./ChangeLog server/Object.cpp server/acti...
Date: Sat, 11 Feb 2006 00:16:46 +0000

CVSROOT:        /sources/gnash
Module name:    gnash
Branch:         
Changes by:     strk <address@hidden>   06/02/11 00:16:46

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

Log message:
        * server/Object.cpp: more debugging output
        * server/action.{h,cpp}: added doActionGetMember,
        changed object output from [object Object] to a more
        interesting value, fixed <c_function 0x0x###>

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/gnash/ChangeLog.diff?tr1=1.119&tr2=1.120&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/gnash/gnash/server/Object.cpp.diff?tr1=1.2&tr2=1.3&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/gnash/gnash/server/action.cpp.diff?tr1=1.40&tr2=1.41&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/gnash/gnash/server/action.h.diff?tr1=1.15&tr2=1.16&r1=text&r2=text

Patches:
Index: gnash/ChangeLog
diff -u gnash/ChangeLog:1.119 gnash/ChangeLog:1.120
--- gnash/ChangeLog:1.119       Fri Feb 10 16:10:13 2006
+++ gnash/ChangeLog     Sat Feb 11 00:16:46 2006
@@ -1,8 +1,11 @@
 2006-02-10 Sandro Santilli <address@hidden>
 
        * server/action.{cpp,h}: added doActionCallMethod,
-       doActionCallFunction, doActionDefineFunction and
-       doActionDefineFunction2 private methods to action_buffer.
+       doActionCallFunction, doActionDefineFunction,
+       doActionGetMember and doActionDefineFunction2 private
+       methods to action_buffer. Changed text representation
+       of generic objects from [object Object] to a more
+       interesing value, fixed <c_function 0x0x###>
        * testsuite/actionscript.all/Function.as: more tests.
        * server/Object.cpp: reworked get_member/set_member to map
        "__proto__" to m_prototype.
Index: gnash/server/Object.cpp
diff -u gnash/server/Object.cpp:1.2 gnash/server/Object.cpp:1.3
--- gnash/server/Object.cpp:1.2 Fri Feb 10 16:10:13 2006
+++ gnash/server/Object.cpp     Sat Feb 11 00:16:46 2006
@@ -30,7 +30,9 @@
 bool
 as_object::get_member(const tu_stringi& name, as_value* val)
 {
-       //log_msg("GET MEMBER: %s at %p for object %p\n", name.c_str(), val, 
this);
+       IF_VERBOSE_DEBUG(
+               log_msg("  get member: %s (at %p) for object %p\n", 
name.c_str(), val, this);
+       );
        if (name == "__proto__")
        {
                val->set_as_object_interface(m_prototype);
@@ -41,19 +43,19 @@
 
                if (m_members.get(name, &m) == false)
                {
-                       //log_msg("  not found on first level\n");
+                       IF_VERBOSE_DEBUG(log_msg("  not found on first 
level\n"));
                        if (m_prototype == NULL)
                        {
-                               //log_msg("  no __proto__ (m_prototype) 
defined\n");
+                               IF_VERBOSE_DEBUG(log_msg("  no __proto__ 
(m_prototype) defined\n"));
                                return false;
                        }
                        else
                        {
-                               //log_msg("  checkin in __proto__ (m_prototype) 
%p\n",m_prototype);
+                               IF_VERBOSE_DEBUG(log_msg("  checkin in 
__proto__ (m_prototype) %p\n",m_prototype));
                                return m_prototype->get_member(name, val);
                        }
                } else {
-                       //log_msg("  found on first level");
+                       IF_VERBOSE_DEBUG(log_msg("  found on first level"));
                        *val=m.get_member_value();
                        return true;
                }
Index: gnash/server/action.cpp
diff -u gnash/server/action.cpp:1.40 gnash/server/action.cpp:1.41
--- gnash/server/action.cpp:1.40        Fri Feb 10 16:10:13 2006
+++ gnash/server/action.cpp     Sat Feb 11 00:16:46 2006
@@ -1899,8 +1899,8 @@
                        else
                        {
                                log_error("error: call_method can't find method 
%s "
-                                       "for object %s\n", method_name.c_str(),
-                                       typeid(*obj).name());
+                                       "for object %s (%p)\n", 
method_name.c_str(), 
+                                       typeid(*obj).name(), obj);
                        }
                }
 
@@ -2054,6 +2054,49 @@
 
        }
 
+       /*private*/
+       void
+       action_buffer::doActionGetMember(as_environment* env)
+       {
+               // Some corner case behaviors depend on the SWF file version.
+               int version = 
env->get_target()->get_movie_definition()->get_version();
+
+               as_value& target = env->top(1);
+               as_object_interface* obj = target.to_object();
+
+               IF_VERBOSE_DEBUG(log_msg(" doActionGetMember: target: %p\n", 
obj));
+
+               // Special case: String has a member "length"
+               // @@ FIXME: we shouldn't have all this "special" cases --strk;
+               if (obj == NULL && env->top(1).get_type() == as_value::STRING 
&& env->top(0).to_tu_stringi() == "length")
+               {
+                       int     len = 
env->top(1).to_tu_string_versioned(version).utf8_length();
+                       env->top(1).set_int(len);
+               }
+               else
+               {
+                       env->top(1).set_undefined();
+                       // int  nargs = (int) env->top(1).to_number();
+                       if (obj) {
+                               obj->get_member(env->top(0).to_tu_string(), 
&(env->top(1)));
+                               if (env->top(1).to_object() == NULL) {
+                                       IF_VERBOSE_ACTION(log_msg("-- 
get_member %s=%s\n",
+                                                                 
env->top(0).to_tu_string().c_str(),
+                                                                 
env->top(1).to_tu_string().c_str()));
+                               } else {
+                                       IF_VERBOSE_ACTION(log_msg("-- 
get_member %s=%s at %p\n",
+                                                                 
env->top(0).to_tu_string().c_str(),
+                                                                 
env->top(1).to_tu_string().c_str(), env->top(1).to_object()));
+                               }
+                       }
+                       else
+                       {
+                               // @@ log error?
+                       }
+               }
+               env->drop(1);
+       }
+
 
 
        void    action_buffer::execute(
@@ -2755,41 +2798,8 @@
                                        break;
                                }
                                case SWF::ACTION_GETMEMBER:     // get member
-                               {
-                                       as_value& target = env->top(1);
-                                       as_object_interface* obj = 
target.to_object();
-
-                                       // Special case: String has a member 
"length"
-                                       if (obj == NULL && 
env->top(1).get_type() == as_value::STRING && env->top(0).to_tu_stringi() == 
"length")
-                                       {
-                                               int     len = 
env->top(1).to_tu_string_versioned(version).utf8_length();
-                                                env->top(1).set_int(len);
-                                       }
-                                        else
-                                       {
-                                               env->top(1).set_undefined();
-                                               // int  nargs = (int) 
env->top(1).to_number();
-                                               if (obj) {
-                                                       
obj->get_member(env->top(0).to_tu_string(), &(env->top(1)));
-                                                       if 
(env->top(1).to_object() == NULL) {
-                                                               
IF_VERBOSE_ACTION(log_msg("-- get_member %s=%s\n",
-                                                                               
          env->top(0).to_tu_string().c_str(),
-                                                                               
          env->top(1).to_tu_string().c_str()));
-                                                       } else {
-                                                               
IF_VERBOSE_ACTION(log_msg("-- get_member %s=%s at %p\n",
-                                                                               
          env->top(0).to_tu_string().c_str(),
-                                                                               
          env->top(1).to_tu_string().c_str(), env->top(1).to_object()));
-                                                       }
-                                               }
-                                               else
-                                               {
-                                                       // @@ log error?
-                                               }
-                                       }
-                                        env->drop(1);
-                                        break;
-                                       
-                               }
+                                       doActionGetMember(env);
+                                       break;
                                case SWF::ACTION_SETMEMBER:     // set member
                                {
                                        as_object_interface*    obj = 
env->top(2).to_object();
@@ -3503,13 +3513,16 @@
                                // TODO: we need an environment in order to 
call toString()!
 
                                // This is the default.
-                               m_string_value = "[object Object]";
+                               //m_string_value = "[object Object]";
+                               char buffer[50];
+                               snprintf(buffer, 50, "<as_object %p>", (void *) 
m_object_value);
+                               m_string_value = buffer;
                        }
                }
                else if (m_type == C_FUNCTION)
                {
                        char buffer[50];
-                       snprintf(buffer, 50, "<c_function 0x%p>", (void *) 
m_c_function_value);
+                       snprintf(buffer, 50, "<c_function %p>", (void *) 
m_c_function_value);
                        m_string_value = buffer;
                }
                else if (m_type == AS_FUNCTION)
Index: gnash/server/action.h
diff -u gnash/server/action.h:1.15 gnash/server/action.h:1.16
--- gnash/server/action.h:1.15  Fri Feb 10 16:10:13 2006
+++ gnash/server/action.h       Sat Feb 11 00:16:46 2006
@@ -220,6 +220,8 @@
 
                void doActionDefineFunction2(as_environment* env,
                        array<with_stack_entry>& with_stack, int pc, int* 
next_pc);
+
+               void doActionGetMember(as_environment* env);
        };
 
 




reply via email to

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