gnash-commit
[Top][All Lists]
Advanced

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

[Gnash-commit] gnash ChangeLog server/as_object.cpp server/as_...


From: Sandro Santilli
Subject: [Gnash-commit] gnash ChangeLog server/as_object.cpp server/as_...
Date: Wed, 04 Oct 2006 09:42:19 +0000

CVSROOT:        /sources/gnash
Module name:    gnash
Changes by:     Sandro Santilli <strk>  06/10/04 09:42:19

Modified files:
        .              : ChangeLog 
        server         : as_object.cpp as_object.h 
        server/asobj   : Global.cpp 

Log message:
                * server/asobj/Global.cpp (as_global_assetpropflags):
                  delegate work to as_object::setPropFlags().
                * server/as_object.{cpp,h}: add setPropFlags() method.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.1025&r2=1.1026
http://cvs.savannah.gnu.org/viewcvs/gnash/server/as_object.cpp?cvsroot=gnash&r1=1.8&r2=1.9
http://cvs.savannah.gnu.org/viewcvs/gnash/server/as_object.h?cvsroot=gnash&r1=1.9&r2=1.10
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/Global.cpp?cvsroot=gnash&r1=1.10&r2=1.11

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.1025
retrieving revision 1.1026
diff -u -b -r1.1025 -r1.1026
--- ChangeLog   4 Oct 2006 09:05:03 -0000       1.1025
+++ ChangeLog   4 Oct 2006 09:42:19 -0000       1.1026
@@ -1,5 +1,8 @@
 2006-10-04 Sandro Santilli  <address@hidden>
 
+       * server/asobj/Global.cpp (as_global_assetpropflags):
+         delegate work to as_object::setPropFlags().
+       * server/as_object.{cpp,h}: add setPropFlags() method.
        * server/xml.h (get_member): invoke get_member_default() when
          the requested member is not a builtin.
        * testsuite/actionscript.all/Object.as: add test for

Index: server/as_object.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/as_object.cpp,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -b -r1.8 -r1.9
--- server/as_object.cpp        10 Jul 2006 13:47:12 -0000      1.8
+++ server/as_object.cpp        4 Oct 2006 09:42:19 -0000       1.9
@@ -199,5 +199,92 @@
        }
 }
 
+void
+as_object::setPropFlags(as_value& props_val, int set_false, int set_true)
+{
+       as_object* props = props_val.to_object();
+
+       // Evan: it seems that if set_true == 0 and set_false == 0,
+       // this function acts as if the parameters were (object, null, 0x1, 0)
+       if (set_false == 0 && set_true == 0)
+       {
+           props = NULL;
+           set_false = 0;
+           set_true = 0x1;
+       }
+
+       if (props == NULL)
+       {
+               // TODO: this might be a comma-separated list
+               //       of props as a string !!
+               //
+
+               // Take all the members of the object
+
+               stringi_hash<as_member>::const_iterator it = m_members.begin();
+               while (it != m_members.end())
+               {
+                       as_member member = it->second;
+
+                       as_prop_flags f = member.get_member_flags();
+                       f.get_flags();
+                       f.set_flags(set_true, set_false);
+                       member.set_member_flags(f);
+
+                       // why don't we directly set flags on the
+                       // actual member instead ?
+                       m_members[it->first] = member;
+
+                       ++it;
+               }
+
+               if (m_prototype != NULL)
+               {
+                       const as_object* prototype = m_prototype;
+
+                       it = prototype->m_members.begin();
+                       while (it != prototype->m_members.end())
+                       {
+                               as_member member = it->second;
+
+                               as_prop_flags f = member.get_member_flags();
+                               //const int oldflags =
+                               f.get_flags();
+                               //const int newflags = 
+                               f.set_flags(set_true, set_false);
+                               member.set_member_flags(f);
+
+                               m_members[it->first] = member;
+
+                               ++it;
+                       }
+               }
+       }
+       else
+       {
+               as_object* object_props = props;
+
+               stringi_hash<as_member>::iterator it = 
object_props->m_members.begin();
+               while(it != object_props->m_members.end())
+               {
+                       const tu_stringi key = 
(it->second).get_member_value().to_string();
+                       stringi_hash<as_member>::iterator it2 = 
m_members.find(key);
+
+                       if (it2 != m_members.end())
+                       {
+                               as_member member = it2->second;
+
+                               as_prop_flags f = member.get_member_flags();
+                               f.get_flags();
+                               f.set_flags(set_true, set_false);
+                               member.set_member_flags(f);
+                               
m_members[it->second.get_member_value().to_string()] = member;
+                       }
+
+                       ++it;
+               }
+       }
+}
+
 } // end of gnash namespace
 

Index: server/as_object.h
===================================================================
RCS file: /sources/gnash/gnash/server/as_object.h,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -b -r1.9 -r1.10
--- server/as_object.h  15 Sep 2006 00:07:58 -0000      1.9
+++ server/as_object.h  4 Oct 2006 09:42:19 -0000       1.10
@@ -136,6 +136,14 @@
        ///
        bool instanceOf(as_function* ctor);
 
+       /// Set property flags
+       //
+       /// @param props
+       /// @param set_false
+       /// @param set_true
+       ///
+       void setPropFlags(as_value& props, int set_false, int set_true);
+
 protected:
 
        /// Get a member as_value by name

Index: server/asobj/Global.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/Global.cpp,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -b -r1.10 -r1.11
--- server/asobj/Global.cpp     3 Oct 2006 16:11:54 -0000       1.10
+++ server/asobj/Global.cpp     4 Oct 2006 09:42:19 -0000       1.11
@@ -18,7 +18,7 @@
 
 // Implementation of the Global ActionScript Object
 
-/* $Id: Global.cpp,v 1.10 2006/10/03 16:11:54 strk Exp $ */
+/* $Id: Global.cpp,v 1.11 2006/10/04 09:42:19 strk Exp $ */
 
 #include "as_object.h"
 #include "array.h"
@@ -391,7 +391,7 @@
 
        // list of child names
 
-       as_object* props = fn.arg(1).to_object();
+       as_value& props = fn.arg(1);
 
     // a number which represents three bitwise flags which
     // are used to determine whether the list of child names should be hidden,
@@ -409,88 +409,8 @@
                     (version == 5 ? ~0 : 0) : int(fn.arg(3).to_number()))
        & as_prop_flags::as_prop_flags_mask;
 
-    // Evan: it seems that if set_true == 0 and set_false == 0, this function
-    // acts as if the parameters where (object, null, 0x1, 0) ...
-    if (set_false == 0 && set_true == 0)
-       {
-           props = NULL;
-           set_false = 0;
-           set_true = 0x1;
-       }
-
-    if (props == NULL)
-       {
-           // Take all the members of the object
-
-           as_object* object = obj;
-
-           stringi_hash<as_member>::const_iterator it = 
object->m_members.begin();
-           while (it != object->m_members.end())
-               {
-                   as_member member = it->second;
-
-                   as_prop_flags f = member.get_member_flags();
-                   //const int oldflags = 
-                   f.get_flags();
-                   //const int newflags =
-                   f.set_flags(set_true, set_false);
-                   member.set_member_flags(f);
-
-                   object->m_members[it->first] = member;
-
-                   ++it;
-               }
-
-           if (object->m_prototype != NULL)
-               {
-                   const as_object* prototype = object->m_prototype;
-
-                   it = prototype->m_members.begin();
-                   while (it != prototype->m_members.end())
-                       {
-                           as_member member = it->second;
-
-                           as_prop_flags f = member.get_member_flags();
-                           //const int oldflags =
-                           f.get_flags();
-                           //const int newflags = 
-                           f.set_flags(set_true, set_false);
-                           member.set_member_flags(f);
+       obj->setPropFlags(props, set_false, set_true);
 
-                           object->m_members[it->first] = member;
-
-                           ++it;
-                       }
-               }
-       }
-       else
-       {
-           as_object* object = obj;
-           as_object* object_props = props;
-
-           stringi_hash<as_member>::iterator it = 
object_props->m_members.begin();
-           while(it != object_props->m_members.end())
-               {
-                   const tu_stringi key = 
(it->second).get_member_value().to_string();
-                   stringi_hash<as_member>::iterator it2 = 
object->m_members.find(key);
-
-                   if (it2 != object->m_members.end())
-                       {
-                           as_member member = it2->second;
-
-                           as_prop_flags f = member.get_member_flags();
-                           //const int oldflags =
-                           f.get_flags();
-                           //const int newflags =
-                           f.set_flags(set_true, set_false);
-                           member.set_member_flags(f);
-
-                           
object->m_members[it->second.get_member_value().to_string()] = member;
-                       }
-
-                   ++it;
-               }
-       }
 }
 
 Global::Global()




reply via email to

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