[Top][All Lists]
[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()
- [Gnash-commit] gnash ChangeLog server/as_object.cpp server/as_...,
Sandro Santilli <=