gnash-commit
[Top][All Lists]
Advanced

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

[Gnash-commit] gnash ChangeLog extensions/mysql/mysql_table.cp...


From: Sandro Santilli
Subject: [Gnash-commit] gnash ChangeLog extensions/mysql/mysql_table.cp...
Date: Thu, 18 Jan 2007 22:53:23 +0000

CVSROOT:        /sources/gnash
Module name:    gnash
Changes by:     Sandro Santilli <strk>  07/01/18 22:53:22

Modified files:
        .              : ChangeLog 
        extensions/mysql: mysql_table.cpp 
        server         : array.cpp array.h as_function.cpp as_object.cpp 
                         as_object.h button_character_instance.cpp 
                         button_character_instance.h 
                         edit_text_character.cpp edit_text_character.h 
                         event_id.h gnash.h movie_root.h 
                         sprite_instance.cpp sprite_instance.h 
                         swf_function.cpp video_stream_instance.cpp 
                         video_stream_instance.h 
        server/asobj   : ASSound.cpp Boolean.cpp Camera.cpp Color.cpp 
                         ContextMenu.cpp CustomActions.cpp Date.cpp 
                         Error.cpp Global.cpp Key.cpp Key.h LoadVars.cpp 
                         LocalConnection.cpp Math.cpp Microphone.cpp 
                         Mouse.cpp MovieClipLoader.cpp NetConnection.cpp 
                         NetStream.cpp NetStream.h NetStreamFfmpeg.cpp 
                         NetStreamGst.cpp Number.cpp Object.cpp 
                         Selection.cpp SharedObject.cpp Stage.cpp 
                         System.cpp TextSnapshot.cpp Video.cpp 
                         gen-asclass.sh string.cpp xml.cpp xmlnode.cpp 
                         xmlsocket.cpp 
        server/vm      : ASHandlers.cpp ActionExec.cpp ActionExec.h 
                         action.cpp action.h 
        testsuite/actionscript.all: XML.as 
        testsuite/server: GetterSetterTest.cpp 

Log message:
        Get rid of another tu_thing and hopefully slighly improve performance:
        
                (1) Change {get,set}_member{,_default} as_object members
                to take a std::string rather then a tu_string and to avoid
                case conversion of key based on target SWF version
                (2) Provide init_{member,property} as_obejct members to 
initialize
                AS class methods/props and take care of SWF#-based 
case-conversion;
                use where appropriate.
                (3) Provide {get,set}ObjectMember methods in ActionExec to take
                care of SWF#-based case conversion when called from AS handlers.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.2137&r2=1.2138
http://cvs.savannah.gnu.org/viewcvs/gnash/extensions/mysql/mysql_table.cpp?cvsroot=gnash&r1=1.2&r2=1.3
http://cvs.savannah.gnu.org/viewcvs/gnash/server/array.cpp?cvsroot=gnash&r1=1.47&r2=1.48
http://cvs.savannah.gnu.org/viewcvs/gnash/server/array.h?cvsroot=gnash&r1=1.18&r2=1.19
http://cvs.savannah.gnu.org/viewcvs/gnash/server/as_function.cpp?cvsroot=gnash&r1=1.16&r2=1.17
http://cvs.savannah.gnu.org/viewcvs/gnash/server/as_object.cpp?cvsroot=gnash&r1=1.23&r2=1.24
http://cvs.savannah.gnu.org/viewcvs/gnash/server/as_object.h?cvsroot=gnash&r1=1.29&r2=1.30
http://cvs.savannah.gnu.org/viewcvs/gnash/server/button_character_instance.cpp?cvsroot=gnash&r1=1.23&r2=1.24
http://cvs.savannah.gnu.org/viewcvs/gnash/server/button_character_instance.h?cvsroot=gnash&r1=1.9&r2=1.10
http://cvs.savannah.gnu.org/viewcvs/gnash/server/edit_text_character.cpp?cvsroot=gnash&r1=1.41&r2=1.42
http://cvs.savannah.gnu.org/viewcvs/gnash/server/edit_text_character.h?cvsroot=gnash&r1=1.21&r2=1.22
http://cvs.savannah.gnu.org/viewcvs/gnash/server/event_id.h?cvsroot=gnash&r1=1.2&r2=1.3
http://cvs.savannah.gnu.org/viewcvs/gnash/server/gnash.h?cvsroot=gnash&r1=1.82&r2=1.83
http://cvs.savannah.gnu.org/viewcvs/gnash/server/movie_root.h?cvsroot=gnash&r1=1.31&r2=1.32
http://cvs.savannah.gnu.org/viewcvs/gnash/server/sprite_instance.cpp?cvsroot=gnash&r1=1.124&r2=1.125
http://cvs.savannah.gnu.org/viewcvs/gnash/server/sprite_instance.h?cvsroot=gnash&r1=1.55&r2=1.56
http://cvs.savannah.gnu.org/viewcvs/gnash/server/swf_function.cpp?cvsroot=gnash&r1=1.16&r2=1.17
http://cvs.savannah.gnu.org/viewcvs/gnash/server/video_stream_instance.cpp?cvsroot=gnash&r1=1.5&r2=1.6
http://cvs.savannah.gnu.org/viewcvs/gnash/server/video_stream_instance.h?cvsroot=gnash&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/ASSound.cpp?cvsroot=gnash&r1=1.6&r2=1.7
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/Boolean.cpp?cvsroot=gnash&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/Camera.cpp?cvsroot=gnash&r1=1.3&r2=1.4
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/Color.cpp?cvsroot=gnash&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/ContextMenu.cpp?cvsroot=gnash&r1=1.5&r2=1.6
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/CustomActions.cpp?cvsroot=gnash&r1=1.3&r2=1.4
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/Date.cpp?cvsroot=gnash&r1=1.5&r2=1.6
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/Error.cpp?cvsroot=gnash&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/Global.cpp?cvsroot=gnash&r1=1.32&r2=1.33
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/Key.cpp?cvsroot=gnash&r1=1.7&r2=1.8
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/Key.h?cvsroot=gnash&r1=1.10&r2=1.11
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/LoadVars.cpp?cvsroot=gnash&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/LocalConnection.cpp?cvsroot=gnash&r1=1.5&r2=1.6
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/Math.cpp?cvsroot=gnash&r1=1.13&r2=1.14
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/Microphone.cpp?cvsroot=gnash&r1=1.3&r2=1.4
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/Mouse.cpp?cvsroot=gnash&r1=1.3&r2=1.4
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/MovieClipLoader.cpp?cvsroot=gnash&r1=1.14&r2=1.15
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/NetConnection.cpp?cvsroot=gnash&r1=1.16&r2=1.17
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/NetStream.cpp?cvsroot=gnash&r1=1.21&r2=1.22
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/NetStream.h?cvsroot=gnash&r1=1.16&r2=1.17
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/NetStreamFfmpeg.cpp?cvsroot=gnash&r1=1.6&r2=1.7
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/NetStreamGst.cpp?cvsroot=gnash&r1=1.3&r2=1.4
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/Number.cpp?cvsroot=gnash&r1=1.8&r2=1.9
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/Object.cpp?cvsroot=gnash&r1=1.10&r2=1.11
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/Selection.cpp?cvsroot=gnash&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/SharedObject.cpp?cvsroot=gnash&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/Stage.cpp?cvsroot=gnash&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/System.cpp?cvsroot=gnash&r1=1.7&r2=1.8
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/TextSnapshot.cpp?cvsroot=gnash&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/Video.cpp?cvsroot=gnash&r1=1.5&r2=1.6
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/gen-asclass.sh?cvsroot=gnash&r1=1.6&r2=1.7
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/string.cpp?cvsroot=gnash&r1=1.12&r2=1.13
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/xml.cpp?cvsroot=gnash&r1=1.11&r2=1.12
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/xmlnode.cpp?cvsroot=gnash&r1=1.5&r2=1.6
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/xmlsocket.cpp?cvsroot=gnash&r1=1.2&r2=1.3
http://cvs.savannah.gnu.org/viewcvs/gnash/server/vm/ASHandlers.cpp?cvsroot=gnash&r1=1.30&r2=1.31
http://cvs.savannah.gnu.org/viewcvs/gnash/server/vm/ActionExec.cpp?cvsroot=gnash&r1=1.13&r2=1.14
http://cvs.savannah.gnu.org/viewcvs/gnash/server/vm/ActionExec.h?cvsroot=gnash&r1=1.9&r2=1.10
http://cvs.savannah.gnu.org/viewcvs/gnash/server/vm/action.cpp?cvsroot=gnash&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/gnash/server/vm/action.h?cvsroot=gnash&r1=1.2&r2=1.3
http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/actionscript.all/XML.as?cvsroot=gnash&r1=1.15&r2=1.16
http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/server/GetterSetterTest.cpp?cvsroot=gnash&r1=1.5&r2=1.6

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.2137
retrieving revision 1.2138
diff -u -b -r1.2137 -r1.2138
--- ChangeLog   18 Jan 2007 19:38:05 -0000      1.2137
+++ ChangeLog   18 Jan 2007 22:53:21 -0000      1.2138
@@ -1,3 +1,44 @@
+2007-01-18 Sandro Santilli <address@hidden>
+
+       * extensions/mysql/mysql_table.cpp, server/array.cpp,
+       server/array.h, server/as_function.cpp, server/as_object.cpp,
+       server/as_object.h, server/button_character_instance.cpp,
+       server/button_character_instance.h,
+       server/edit_text_character.cpp, server/edit_text_character.h,
+       server/event_id.h, server/gnash.h, server/movie_root.h,
+       server/sprite_instance.cpp, server/sprite_instance.h,
+       server/swf_function.cpp, server/video_stream_instance.cpp,
+       server/video_stream_instance.h, server/asobj/ASSound.cpp,
+       server/asobj/Boolean.cpp, server/asobj/Camera.cpp,
+       server/asobj/Color.cpp, server/asobj/ContextMenu.cpp,
+       server/asobj/CustomActions.cpp, server/asobj/Date.cpp,
+       server/asobj/Error.cpp, server/asobj/Global.cpp,
+       server/asobj/Key.cpp, server/asobj/Key.h,
+       server/asobj/LoadVars.cpp, server/asobj/LocalConnection.cpp,
+       server/asobj/Math.cpp, server/asobj/Microphone.cpp,
+       server/asobj/Mouse.cpp, server/asobj/MovieClipLoader.cpp,
+       server/asobj/NetConnection.cpp, server/asobj/NetStream.cpp,
+       server/asobj/NetStream.h, server/asobj/NetStreamFfmpeg.cpp,
+       server/asobj/NetStreamGst.cpp, server/asobj/Number.cpp,
+       server/asobj/Object.cpp, server/asobj/Selection.cpp,
+       server/asobj/SharedObject.cpp, server/asobj/Stage.cpp,
+       server/asobj/System.cpp, server/asobj/TextSnapshot.cpp,
+       server/asobj/Video.cpp, server/asobj/gen-asclass.sh,
+       server/asobj/string.cpp, server/asobj/xml.cpp,
+       server/asobj/xmlnode.cpp, server/asobj/xmlsocket.cpp,
+       server/vm/ASHandlers.cpp, server/vm/ActionExec.cpp,
+       server/vm/ActionExec.h, server/vm/action.cpp,
+       server/vm/action.h, testsuite/actionscript.all/XML.as,
+       testsuite/server/GetterSetterTest.cpp: 
+       (1) Change {get,set}_member{,_default} as_object members
+       to take a std::string rather then a tu_string and to avoid
+       case conversion of key based on target SWF version
+       (2) Provide init_{member,property} as_obejct members to initialize
+       AS class methods/props and take care of SWF#-based case-conversion;
+       use where appropriate.
+       (3) Provide {get,set}ObjectMember methods in ActionExec to take
+       care of SWF#-based case conversion when called from AS handlers.
+
 2007-01-18 Bastiaan Jacques <address@hidden>
 
        * server/asobj/xml.cpp: Make sure we actually have an XMLNode pointer

Index: extensions/mysql/mysql_table.cpp
===================================================================
RCS file: /sources/gnash/gnash/extensions/mysql/mysql_table.cpp,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- extensions/mysql/mysql_table.cpp    29 Oct 2006 18:34:17 -0000      1.2
+++ extensions/mysql/mysql_table.cpp    18 Jan 2007 22:53:21 -0000      1.3
@@ -109,10 +109,10 @@
                }
        }
 
-       bool    table::get_member(const tu_stringi& name, as_value* val)
+       bool    table::get_member(const std::string& name, as_value* val)
        {
                // check table methods
-               if (as_object::get_member(name, val) == false)
+               if ( get_member_default(name, val) == false )
                {
                        // hack
                        int idx = atoi(name.c_str());
@@ -128,12 +128,6 @@
                return true;
        }
 
-//     void    table::set_member(const tu_stringi& name, const as_value& val)
-//     {
-//             as_object::set_member(name,val);
-//     }
-
-
        int table::size()
        {
                return m_data.size();

Index: server/array.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/array.cpp,v
retrieving revision 1.47
retrieving revision 1.48
diff -u -b -r1.47 -r1.48
--- server/array.cpp    9 Jan 2007 23:30:37 -0000       1.47
+++ server/array.cpp    18 Jan 2007 22:53:21 -0000      1.48
@@ -152,7 +152,7 @@
 }
 
 int
-as_array_object::index_requested(const tu_stringi& name)
+as_array_object::index_requested(const std::string& name)
 {
        as_value temp;
        temp.set_string(name.c_str());
@@ -311,9 +311,9 @@
 
 }
 
-/* virtual public, overriding as_object::set_member */
+/* virtual public, overriding as_object::get_member */
 bool
-as_array_object::get_member(const tu_stringi& name, as_value *val)
+as_array_object::get_member(const std::string& name, as_value *val)
 {
        if ( name == "length" ) 
        {
@@ -334,7 +334,7 @@
 
 /* virtual public, overriding as_object::set_member */
 void
-as_array_object::set_member(const tu_stringi& name,
+as_array_object::set_member(const std::string& name,
                const as_value& val )
 {
        if ( name == "length" ) 
@@ -784,26 +784,26 @@
        // we don't need an explicit member here,
        // we will be handling 'length' requests
        // within overridden get_member()
-       //proto->set_member("length", &array_length);
+       //proto->init_member("length", &array_length);
 
-       proto.set_member("join", &array_join);
-       proto.set_member("concat", &array_concat);
-       proto.set_member("slice", &array_slice);
-       proto.set_member("push", &array_push);
-       proto.set_member("unshift", &array_unshift);
-       proto.set_member("pop", &array_pop);
-       proto.set_member("shift", &array_shift);
-       proto.set_member("splice", &array_splice);
-       proto.set_member("sort", &array_sort);
-       proto.set_member("size", &array_size);
-       proto.set_member("sortOn", &array_sortOn);
-       proto.set_member("reverse", &array_reverse);
-       proto.set_member("toString", &array_to_string);
-       proto.set_member("CASEINSENSITIVE", as_array_object::fCaseInsensitive);
-       proto.set_member("DESCENDING", as_array_object::fDescending);
-       proto.set_member("UNIQUESORT", as_array_object::fUniqueSort);
-       proto.set_member("RETURNINDEXEDARRAY", 
as_array_object::fReturnIndexedArray);
-       proto.set_member("NUMERIC", as_array_object::fNumeric);
+       proto.init_member("join", &array_join);
+       proto.init_member("concat", &array_concat);
+       proto.init_member("slice", &array_slice);
+       proto.init_member("push", &array_push);
+       proto.init_member("unshift", &array_unshift);
+       proto.init_member("pop", &array_pop);
+       proto.init_member("shift", &array_shift);
+       proto.init_member("splice", &array_splice);
+       proto.init_member("sort", &array_sort);
+       proto.init_member("size", &array_size);
+       proto.init_member("sortOn", &array_sortOn);
+       proto.init_member("reverse", &array_reverse);
+       proto.init_member("toString", &array_to_string);
+       proto.init_member("CASEINSENSITIVE", as_array_object::fCaseInsensitive);
+       proto.init_member("DESCENDING", as_array_object::fDescending);
+       proto.init_member("UNIQUESORT", as_array_object::fUniqueSort);
+       proto.init_member("RETURNINDEXEDARRAY", 
as_array_object::fReturnIndexedArray);
+       proto.init_member("NUMERIC", as_array_object::fNumeric);
 }
 
 static as_object*
@@ -838,7 +838,7 @@
        }
 
        // Register _global.Array
-       glob.set_member("Array", ar.get());
+       glob.init_member("Array", ar.get());
 }
 
 

Index: server/array.h
===================================================================
RCS file: /sources/gnash/gnash/server/array.h,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -b -r1.18 -r1.19
--- server/array.h      24 Nov 2006 09:04:24 -0000      1.18
+++ server/array.h      18 Jan 2007 22:53:21 -0000      1.19
@@ -124,10 +124,12 @@
        std::auto_ptr<as_array_object> sorted_indexes(as_function& comparator, 
uint8_t flags);
 
        /// Overridden to provide 'length' member
-       virtual bool get_member(const tu_stringi& name, as_value* val);
+       //
+       /// TODO: use a property for handling 'length'
+       virtual bool get_member(const std::string& name, as_value* val);
 
        /// Overridden to provide array[#]=x semantic
-       virtual void set_member(const tu_stringi& name,
+       virtual void set_member(const std::string& name,
                const as_value& val );
 
 private:
@@ -137,7 +139,7 @@
        // this function is used internally by set_member and get_member
        // it takes a string that is the member name of the array and returns -1
        // if the string does not refer to an index, or an appropriate int if 
the string does refer to an index
-       int index_requested(const tu_stringi& name);
+       int index_requested(const std::string& name);
 
 };
 

Index: server/as_function.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/as_function.cpp,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -b -r1.16 -r1.17
--- server/as_function.cpp      2 Jan 2007 12:51:32 -0000       1.16
+++ server/as_function.cpp      18 Jan 2007 22:53:21 -0000      1.17
@@ -77,8 +77,8 @@
        if ( proto.get() == NULL ) {
                // Initialize Function prototype
                proto = new as_object();
-               proto->set_member("apply", &function_apply);
-               proto->set_member("call", &function_call);
+               proto->init_member("apply", &function_apply);
+               proto->init_member("call", &function_call);
        }
 
        return proto.get();
@@ -110,25 +110,23 @@
        {
                _properties = new as_object();
        }
-       _properties->set_member("constructor", this); 
-       _properties->set_member_flags("constructor", 1);
-       set_member("prototype", as_value(_properties.get()));
+       _properties->init_member("constructor", this); 
+       init_member("prototype", as_value(_properties.get()));
 }
 
 void
 as_function::setPrototype(as_object* proto)
 {
        _properties = proto;
-       set_member("prototype", as_value(_properties.get()));
+       init_member("prototype", as_value(_properties.get()));
 }
 
 void
 as_function::extends(as_function& superclass)
 {
        _properties = new as_object(superclass.getPrototype());
-       _properties->set_member("constructor", &superclass); 
-       _properties->set_member_flags("constructor", 1);
-       set_member("prototype", as_value(_properties.get()));
+       _properties->init_member("constructor", &superclass); 
+       init_member("prototype", as_value(_properties.get()));
 }
 
 as_object*
@@ -164,7 +162,7 @@
                );
 
        // Register _global.Function
-       global.set_member("Function", func.get());
+       global.init_member("Function", func.get());
 
 }
 

Index: server/as_object.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/as_object.cpp,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -b -r1.23 -r1.24
--- server/as_object.cpp        2 Jan 2007 12:51:32 -0000       1.23
+++ server/as_object.cpp        18 Jan 2007 22:53:21 -0000      1.24
@@ -37,13 +37,6 @@
 
 namespace gnash {
 
-/*public virtual*/
-bool
-as_object::get_member(const tu_stringi& name, as_value* val)
-{
-       return get_member_default(name, val);
-}
-
 bool
 as_object::add_property(const std::string& key, as_function& getter,
                as_function& setter)
@@ -62,24 +55,16 @@
 
 /*protected*/
 bool
-as_object::get_member_default(const tu_stringi& namei, as_value* val)
+as_object::get_member_default(const std::string& name, as_value* val)
 {
        assert(val);
 
-       // temp hack, should really update this method's interface instead
-       std::string name = namei.c_str();
-
-       if ( _vm.getSWFVersion() < 7 )
-       {
-               boost::to_lower(name, _vm.getLocale());
-       }
-
        //log_msg("Getting member %s (SWF version:%d)", name.c_str(), 
vm.getSWFVersion());
 
        // TODO: inspect wheter it is possible to make __proto__ a
        //       getter/setter property instead, to take this into account
        //
-       if (namei == "__proto__")
+       if (name == "__proto__")
        {
                if ( ! m_prototype )
                {
@@ -145,12 +130,6 @@
 
 }
 
-void
-as_object::set_member(const tu_stringi& name, const as_value& val)
-{
-       return set_member_default(name, val);
-}
-
 /*protected*/
 void
 as_object::set_prototype(as_object* proto)
@@ -159,17 +138,10 @@
 }
 
 void
-as_object::set_member_default(const tu_stringi& name, const as_value& val )
+as_object::set_member_default(const std::string& key, const as_value& val )
 {
 
-        std::string key = name.c_str();
-
-       if ( _vm.getSWFVersion() < 7 )
-       {
-               boost::to_lower(key, _vm.getLocale());
-       }
-
-       //log_msg("Setting member %s (SWF version:%d)", key.c_str(), 
vm.getSWFVersion());
+       //log_msg("set_member_default( %s ) ", key.c_str() );
 
        // TODO: make __proto__ a getter/setter ?
        if (key == "__proto__") 
@@ -203,17 +175,80 @@
 
 }
 
-bool
-as_object::set_member_flags(const tu_stringi& name_tu,
-               int setTrue, int setFalse)
+void
+as_object::init_member(const std::string& key, const as_value& val )
 {
-       std::string name(name_tu.c_str());
 
+       //log_msg("Setting member %s (SWF version:%d)", key.c_str(), 
vm.getSWFVersion());
+       //log_msg("Found NO getter/setter property for key %s", key.c_str());
+
+       VM& vm = _vm;
+
+       int flags = as_prop_flags::dontDelete||as_prop_flags::dontEnum;
+
+       if ( vm.getSWFVersion() < 7 )
+       {
+               std::string keylower = key;
+               boost::to_lower(keylower, vm.getLocale());
+
+               // Set (or create) a SimpleProperty 
+               if ( ! _members.setValue(keylower, val, *this) )
+               {
+                       log_error("Attempt to initialize Read-Only property 
``%s''"
+                               " (%s) on object ``%p''",
+                               keylower.c_str(), key.c_str(), (void*)this);
+                       // We shouldn't attempt to initialize a member twice, 
should we ?
+                       assert(0);
+               }
+               // TODO: optimize this, don't scan again !
+               _members.setFlags(keylower, flags, 0);
+       }
+       else
+       {
+               // Set (or create) a SimpleProperty 
+               if ( ! _members.setValue(key, val, *this) )
+               {
+                       log_error("Attempt to initialize Read-Only property 
``%s''"
+                               " on object ``%p''",
+                               key.c_str(), (void*)this);
+                       // We shouldn't attempt to initialize a member twice, 
should we ?
+                       assert(0);
+               }
+               // TODO: optimize this, don't scan again !
+               _members.setFlags(key, flags, 0);
+       }
+
+
+
+
+}
+
+void
+as_object::init_property(const std::string& key, as_function& getter,
+               as_function& setter)
+{
+       bool success;
        if ( _vm.getSWFVersion() < 7 )
        {
+               std::string name = key;
                boost::to_lower(name, _vm.getLocale());
+               success = _members.addGetterSetter(name, getter, setter);
+               log_msg("Initialized property '%s'", name.c_str());
        }
+       else
+       {
+               success = _members.addGetterSetter(key, getter, setter);
+               log_msg("Initialized property '%s'", key.c_str());
+       }
+
+       // We shouldn't attempt to initialize a property twice, should we ?
+       assert(success);
+}
 
+bool
+as_object::set_member_flags(const std::string& name,
+               int setTrue, int setFalse)
+{
        // TODO: accept a std::string directly
        return _members.setFlags(name, setTrue, setFalse);
 }

Index: server/as_object.h
===================================================================
RCS file: /sources/gnash/gnash/server/as_object.h,v
retrieving revision 1.29
retrieving revision 1.30
diff -u -b -r1.29 -r1.30
--- server/as_object.h  2 Jan 2007 12:51:32 -0000       1.29
+++ server/as_object.h  18 Jan 2007 22:53:21 -0000      1.30
@@ -150,10 +150,52 @@
        /// NOTE: This might change in the near future trough use of
        ///       getter/setter properties instead..
        ///
-       /// TODO: take a std::string rather then a tu_stringi
+       virtual void set_member(const std::string& name, const as_value& val)
+       {
+               return set_member_default(name, val);
+       }
+
+       /// Initialize a member value
+       //
+       /// This method has to be used by built-in classes initialization
+       /// (VM initialization in general) as will avoid to scan the
+       /// inheritance chain and perform lowercase conversion when
+       /// VM version is initialized at versions < 7.
+       /// Also, members initialized by calling this function will
+       /// be protected from deletion and not shown in enumeration
+       /// TODO: provide an additional argument to prevent 'protection' ?
+       ///
+       /// @param name
+       ///     Name of the member.
+       ///     Will be converted to lowercase if VM is initialized for SWF6 or 
lower.
+       ///
+       /// @param val
+       ///     Value to assign to the member.
        ///
-       virtual void set_member(const tu_stringi& name,
-                       const as_value& val );
+       void init_member(const std::string& name, const as_value& val);
+
+       /// \brief
+       /// Initialize a getter/setter property
+       //
+       /// This method has to be used by built-in classes initialization
+       /// (VM initialization in general) as will avoid to scan the
+       /// inheritance chain and perform lowercase conversion when
+       /// VM version is initialized at versions < 7.
+       ///
+       /// @param key
+       ///     Name of the property.
+       ///     Will be converted to lowercase if VM is initialized for SWF6 or 
lower.
+       ///
+       /// @param getter
+       ///     A function to invoke when this property value is requested.
+       ///     add_ref will be called on the function.
+       ///
+       /// @param setter
+       ///     A function to invoke when setting this property's value.
+       ///     add_ref will be called on the function.
+       ///
+       void init_property(const std::string& key, as_function& getter,
+               as_function& setter);
 
        /// Get a member as_value by name
        //
@@ -168,9 +210,10 @@
        ///      that the 'getter' won't change this object trough
        ///      use of the 'this' reference.
        ///
-       /// TODO: take a std::string rather then a tu_stringi
-       ///
-       virtual bool get_member(const tu_stringi& name, as_value* val);
+       virtual bool get_member(const std::string& name, as_value* val)
+       {
+               return get_member_default(name, val);
+       }
 
        /// Delete a property of this object, unless protected from deletion.
        //
@@ -207,7 +250,7 @@
        /// @return true on success, false on failure
        ///     (non-existent or protected member)
        ///
-       bool set_member_flags(const tu_stringi& name,
+       bool set_member_flags(const std::string& name,
                        int setTrue, int setFalse=0);
 
        /// Cast to a sprite, or return NULL
@@ -301,17 +344,17 @@
        ///      that the 'getter' won't change this object trough
        ///      use of the 'this' reference.
        ///
-       /// TODO: take a std::string rather then a tu_stringi
-       ///
        /// @param name
        ///     Name of the property.
        ///     Case insensitive up to SWF6,
        ///     case *sensitive* from SWF7 up.
+       ///     TODO: be *always* case-sensitive, and delegate
+       ///           convertion to lowercase to callers
        ///
        /// @param val
        ///     The as_value to store a found variable's value in.
        ///
-       bool get_member_default(const tu_stringi& name, as_value* val);
+       bool get_member_default(const std::string& name, as_value* val);
 
        /// Set a member value
        //
@@ -330,7 +373,7 @@
        ///     Case insensitive up to SWF6,
        ///     case *sensitive* from SWF7 up.
        ///
-       void set_member_default(const tu_stringi& name, const as_value& val);
+       void set_member_default(const std::string& name, const as_value& val);
 
        /// Set this object's '__proto__' member
        //

Index: server/button_character_instance.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/button_character_instance.cpp,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -b -r1.23 -r1.24
--- server/button_character_instance.cpp        12 Dec 2006 22:41:05 -0000      
1.23
+++ server/button_character_instance.cpp        18 Jan 2007 22:53:21 -0000      
1.24
@@ -546,7 +546,7 @@
 //
 
 void
-button_character_instance::set_member(const tu_stringi& name,
+button_character_instance::set_member(const std::string& name,
                const as_value& val)
 {
 
@@ -644,7 +644,7 @@
 }
 
 bool
-button_character_instance::get_member(const tu_stringi& name, as_value* val)
+button_character_instance::get_member(const std::string& name, as_value* val)
 {
        // TODO: pull these up into a base class, to
        // share as much as possible with sprite_instance.

Index: server/button_character_instance.h
===================================================================
RCS file: /sources/gnash/gnash/server/button_character_instance.h,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -b -r1.9 -r1.10
--- server/button_character_instance.h  12 Dec 2006 19:48:04 -0000      1.9
+++ server/button_character_instance.h  18 Jan 2007 22:53:21 -0000      1.10
@@ -5,7 +5,7 @@
 
 // SWF buttons.  Mouse-sensitive update/display, actions, etc.
 
-/* $Id: button_character_instance.h,v 1.9 2006/12/12 19:48:04 strk Exp $ */
+/* $Id: button_character_instance.h,v 1.10 2007/01/18 22:53:21 strk Exp $ */
 
 #ifndef GNASH_BUTTON_CHARACTER_INSTANCE_H
 #define GNASH_BUTTON_CHARACTER_INSTANCE_H
@@ -103,9 +103,9 @@
        // ActionScript overrides
        //
 
-       virtual void set_member(const tu_stringi& name, const as_value& val);
+       virtual void set_member(const std::string& name, const as_value& val);
 
-       virtual bool get_member(const tu_stringi& name, as_value* val);
+       virtual bool get_member(const std::string& name, as_value* val);
        
        void get_invalidated_bounds(rect* bounds, bool force);
        

Index: server/edit_text_character.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/edit_text_character.cpp,v
retrieving revision 1.41
retrieving revision 1.42
diff -u -b -r1.41 -r1.42
--- server/edit_text_character.cpp      8 Dec 2006 14:41:33 -0000       1.41
+++ server/edit_text_character.cpp      18 Jan 2007 22:53:21 -0000      1.42
@@ -15,7 +15,7 @@
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
 
-/* $Id: edit_text_character.cpp,v 1.41 2006/12/08 14:41:33 strk Exp $ */
+/* $Id: edit_text_character.cpp,v 1.42 2007/01/18 22:53:21 strk Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -34,9 +34,11 @@
 #include "VM.h"
 #include "builtin_function.h" // for getter/setter properties
 #include "font.h" // for using the _font member
+#include "VM.h"
 
 #include <algorithm>
 #include <string>
+#include <boost/algorithm/string/case_conv.hpp>
 
 namespace gnash {
 
@@ -95,7 +97,7 @@
        // SWF6 or higher
        boost::intrusive_ptr<builtin_function> variable_getter(new 
builtin_function(&textfield_get_variable, NULL));
        boost::intrusive_ptr<builtin_function> variable_setter(new 
builtin_function(&textfield_set_variable, NULL));
-       o.add_property("variable", *variable_getter, *variable_setter);
+       o.init_property("variable", *variable_getter, *variable_setter);
        if ( target_version  < 7 ) return;
 
        // SWF7 or higher
@@ -111,8 +113,7 @@
        {
                proto = new as_object();
                attachTextFieldInterface(*proto);
-               proto->set_member("constructor", &textfield_ctor); 
-               proto->set_member_flags("constructor", 1);
+               proto->init_member("constructor", &textfield_ctor); 
        }
        return proto.get();
 }
@@ -416,6 +417,9 @@
        }
 
        format_text();
+
+       //log_msg("Text set to %s", new_text.c_str());
+
 }
 
 const char*
@@ -433,10 +437,10 @@
 }
 
 void
-edit_text_character::set_member(const tu_stringi& name,
+edit_text_character::set_member(const std::string& name,
                const as_value& val)
 {
-       //log_msg("edit_text_character.set_member(%s, %s)", name.c_str(), 
val.to_string());
+       log_msg("edit_text_character.set_member(%s, %s)", name.c_str(), 
val.to_string());
 
        // FIXME: Turn all standard members into getter/setter properties
        //        of the TextField class. See attachTextFieldInterface()
@@ -515,7 +519,7 @@
 }
 
 bool
-edit_text_character::get_member(const tu_stringi& name, as_value* val)
+edit_text_character::get_member(const std::string& name, as_value* val)
 {
        //log_msg("edit_text_character.get_member(%s)", name.c_str());
 
@@ -965,9 +969,7 @@
                return;
        }
 
-       const std::string& var_str = _variable_name;
-
-       if ( var_str.empty() )
+       if ( _variable_name.empty() )
        {
 #ifdef DEBUG_DYNTEXT_VARIABLES
                log_msg(" string is empty, consider as registered");
@@ -976,7 +978,15 @@
                return;
        }
 
+       std::string var_str = _variable_name;
+       VM& vm = VM::get();
+       if ( vm.getSWFVersion() < 7 )
+       {
+               boost::to_lower( var_str, vm.getLocale() );
+       }
+
        const char* varname = var_str.c_str();
+
 #ifdef DEBUG_DYNTEXT_VARIABLES
        log_msg(" VariableName: %s", var_str.c_str());
 #endif
@@ -1018,7 +1028,7 @@
        // check if the VariableName already has a value,
        // in that case update text value
        as_value val;
-       if ( sprite->get_member(tu_stringi(varname), &val) )
+       if ( sprite->get_member(varname, &val) )
        {
 #ifdef DEBUG_DYNTEXT_VARIABLES
                log_msg("target sprite (%p) does have a member named %s", 
(void*)sprite, varname);

Index: server/edit_text_character.h
===================================================================
RCS file: /sources/gnash/gnash/server/edit_text_character.h,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -b -r1.21 -r1.22
--- server/edit_text_character.h        12 Dec 2006 19:48:04 -0000      1.21
+++ server/edit_text_character.h        18 Jan 2007 22:53:21 -0000      1.22
@@ -74,9 +74,9 @@
        virtual const char* get_text_value() const;
 
        /// We have a "text" member.
-       void set_member(const tu_stringi& name, const as_value& val);
+       void set_member(const std::string& name, const as_value& val);
 
-       bool get_member(const tu_stringi& name, as_value* val);
+       bool get_member(const std::string& name, as_value* val);
 
        /// Draw the dynamic string.
        void    display();

Index: server/event_id.h
===================================================================
RCS file: /sources/gnash/gnash/server/event_id.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- server/event_id.h   20 Nov 2006 23:21:43 -0000      1.2
+++ server/event_id.h   18 Jan 2007 22:53:21 -0000      1.3
@@ -29,12 +29,13 @@
 
 #include <cwchar>
 
-class tu_string; // for get_function_name
-
 namespace gnash {
 
 
 /// For keyDown and stuff like that.
+//
+/// Implementation is currently in action.cpp
+///
 class DSOEXPORT event_id
 {
 public:
@@ -121,7 +122,7 @@
 
        /// Return the name of a method-handler function
        /// corresponding to this event.
-       const tu_string&        get_function_name() const;
+       const std::string& get_function_name() const;
 
        /// \brief
        /// Return true if this is a mouse event

Index: server/gnash.h
===================================================================
RCS file: /sources/gnash/gnash/server/gnash.h,v
retrieving revision 1.82
retrieving revision 1.83
diff -u -b -r1.82 -r1.83
--- server/gnash.h      10 Jan 2007 17:28:49 -0000      1.82
+++ server/gnash.h      18 Jan 2007 22:53:21 -0000      1.83
@@ -17,7 +17,7 @@
 // 
 //
 
-/* $Id: gnash.h,v 1.82 2007/01/10 17:28:49 strk Exp $ */
+/* $Id: gnash.h,v 1.83 2007/01/18 22:53:21 strk Exp $ */
 
 /// \mainpage
 ///
@@ -136,7 +136,13 @@
 DSOEXPORT void register_fscommand_callback(fscommand_callback handler);
 
 /// Use this to register gnash extension
-void register_component(const tu_stringi& name, as_c_function_ptr handler);
+//
+/// WARNING: does not convert name, make sure to pass a lowercase
+///          name if SWF version is < 7 ! It seems currently no code
+///          calls this function..
+///
+///
+void register_component(const std::string& name, as_c_function_ptr handler);
 
 /// Use this to control how finely curves are subdivided.  1.0
 /// is the default; it's a pretty good value.  Larger values

Index: server/movie_root.h
===================================================================
RCS file: /sources/gnash/gnash/server/movie_root.h,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -b -r1.31 -r1.32
--- server/movie_root.h 7 Dec 2006 10:46:12 -0000       1.31
+++ server/movie_root.h 18 Jan 2007 22:53:21 -0000      1.32
@@ -14,7 +14,7 @@
 // along with this program; if not, write to the Free Software
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
-/* $Id: movie_root.h,v 1.31 2006/12/07 10:46:12 strk Exp $ */
+/* $Id: movie_root.h,v 1.32 2007/01/18 22:53:21 strk Exp $ */
 
 /// \page events_handling Handling of user events
 ///
@@ -128,13 +128,13 @@
 
        /// @@ should this delegate to _movie?  probably !
        void set_member(
-               const tu_stringi& /*name*/,
+               const std::string& /*name*/,
                const as_value& /*val*/)
        {
        }
 
        /// @@ should this delegate to _movie?  probably !
-       bool get_member(const tu_stringi& /*name*/,
+       bool get_member(const std::string& /*name*/,
                        as_value* /*val*/)
        {
                return false;

Index: server/sprite_instance.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/sprite_instance.cpp,v
retrieving revision 1.124
retrieving revision 1.125
diff -u -b -r1.124 -r1.125
--- server/sprite_instance.cpp  15 Jan 2007 00:06:59 -0000      1.124
+++ server/sprite_instance.cpp  18 Jan 2007 22:53:21 -0000      1.125
@@ -52,6 +52,7 @@
 
 #include <functional> // for mem_fun, bind1st
 #include <algorithm> // for for_each
+#include <boost/algorithm/string/case_conv.hpp>
 
 // This needs to be included first for NetBSD systems or we get a weird
 // problem with pthread_t being defined too many times if we use any
@@ -815,10 +816,10 @@
        double yMax = bounds.getMaxY();
 
        boost::intrusive_ptr<as_object> bounds_obj(new as_object());
-       bounds_obj->set_member("xMin", as_value(xMin));
-       bounds_obj->set_member("yMin", as_value(yMin));
-       bounds_obj->set_member("xMax", as_value(xMax));
-       bounds_obj->set_member("yMax", as_value(yMax));
+       bounds_obj->init_member("xMin", as_value(xMin));
+       bounds_obj->init_member("yMin", as_value(yMin));
+       bounds_obj->init_member("xMax", as_value(xMax));
+       bounds_obj->init_member("yMax", as_value(yMax));
 
        // xMin, xMax, yMin, and yMax
        log_error("FIXME: MovieClip.getBounds() not implemented yet (just 
stubbed)");
@@ -1014,43 +1015,43 @@
        int target_version = o.getVM().getSWFVersion();
 
        // SWF5 or higher
-       o.set_member("attachMovie", &sprite_attach_movie);
-       o.set_member("play", &sprite_play);
-       o.set_member("stop", &sprite_stop);
-       o.set_member("gotoAndStop", &sprite_goto_and_stop);
-       o.set_member("gotoAndPlay", &sprite_goto_and_play);
-       o.set_member("nextFrame", &sprite_next_frame);
-       o.set_member("prevFrame", &sprite_prev_frame);
-       o.set_member("getBytesLoaded", &sprite_get_bytes_loaded);
-       o.set_member("getBytesTotal", &sprite_get_bytes_total);
-       o.set_member("loadMovie", &sprite_load_movie);
-       o.set_member("hitTest", &sprite_hit_test);
-       o.set_member("duplicateMovieClip", &sprite_duplicate_movieclip);
-       o.set_member("swapDepths", &sprite_swap_depths);
-       o.set_member("removeMovieClip", &sprite_remove_movieclip);
-       o.set_member("startDrag", &sprite_startDrag);
-       o.set_member("stopDrag", &sprite_stopDrag);
-       o.set_member("getURL", &sprite_getURL);
-       o.set_member("getBounds", &sprite_getBounds);
-       o.set_member("globalToLocal", &sprite_globalToLocal);
+       o.init_member("attachMovie", &sprite_attach_movie);
+       o.init_member("play", &sprite_play);
+       o.init_member("stop", &sprite_stop);
+       o.init_member("gotoAndStop", &sprite_goto_and_stop);
+       o.init_member("gotoAndPlay", &sprite_goto_and_play);
+       o.init_member("nextFrame", &sprite_next_frame);
+       o.init_member("prevFrame", &sprite_prev_frame);
+       o.init_member("getBytesLoaded", &sprite_get_bytes_loaded);
+       o.init_member("getBytesTotal", &sprite_get_bytes_total);
+       o.init_member("loadMovie", &sprite_load_movie);
+       o.init_member("hitTest", &sprite_hit_test);
+       o.init_member("duplicateMovieClip", &sprite_duplicate_movieclip);
+       o.init_member("swapDepths", &sprite_swap_depths);
+       o.init_member("removeMovieClip", &sprite_remove_movieclip);
+       o.init_member("startDrag", &sprite_startDrag);
+       o.init_member("stopDrag", &sprite_stopDrag);
+       o.init_member("getURL", &sprite_getURL);
+       o.init_member("getBounds", &sprite_getBounds);
+       o.init_member("globalToLocal", &sprite_globalToLocal);
        if ( target_version  < 6 ) return;
 
        // SWF6 or higher
-       o.set_member("beginFill", &sprite_beginFill);
-       o.set_member("beginGradientFill", &sprite_beginGradientFill);
-       o.set_member("clear", &sprite_clear);
-       o.set_member("curveTo", &sprite_curveTo);
-       o.set_member("lineStyle", &sprite_lineStyle);
-       o.set_member("lineTo", &sprite_lineTo);
-       o.set_member("endFill", &sprite_endFill);
-       o.set_member("attachAudio", &sprite_attach_audio);
-       o.set_member("createTextField", &sprite_create_text_field);
-       o.set_member("getDepth", &sprite_get_depth);
-       o.set_member("createEmptyMovieClip", &sprite_create_empty_movieclip);
+       o.init_member("beginFill", &sprite_beginFill);
+       o.init_member("beginGradientFill", &sprite_beginGradientFill);
+       o.init_member("clear", &sprite_clear);
+       o.init_member("curveTo", &sprite_curveTo);
+       o.init_member("lineStyle", &sprite_lineStyle);
+       o.init_member("lineTo", &sprite_lineTo);
+       o.init_member("endFill", &sprite_endFill);
+       o.init_member("attachAudio", &sprite_attach_audio);
+       o.init_member("createTextField", &sprite_create_text_field);
+       o.init_member("getDepth", &sprite_get_depth);
+       o.init_member("createEmptyMovieClip", &sprite_create_empty_movieclip);
        if ( target_version  < 7 ) return;
 
        // SWF7 or higher
-       o.set_member("getNextHighestDepth", &sprite_getNextHighestDepth);
+       o.init_member("getNextHighestDepth", &sprite_getNextHighestDepth);
        if ( target_version  < 8 ) return;
 
        // TODO: many more methods, see MovieClip class ...
@@ -1065,8 +1066,7 @@
        {
                proto = new as_object();
                attachMovieClipInterface(*proto);
-               proto->set_member("constructor", &movieclip_ctor); 
-               proto->set_member_flags("constructor", 1);
+               proto->init_member("constructor", &movieclip_ctor); 
        }
        return proto.get();
 }
@@ -1087,7 +1087,7 @@
        }
 
        // Register _global.MovieClip
-       global.set_member("MovieClip", cl.get());
+       global.init_member("MovieClip", cl.get());
 }
 
 
@@ -1211,11 +1211,8 @@
 // Set *val to the value of the named member and
 // return true, if we have the named member.
 // Otherwise leave *val alone and return false.
-bool sprite_instance::get_member(const tu_stringi& name_, as_value* val)
+bool sprite_instance::get_member(const std::string& name, as_value* val)
 {
-       // TODO: take a std::string directly !!
-       std::string name = name_.c_str();
-
        if ( name == "_root" )
        {
                // TODO: handle lockroot
@@ -1235,7 +1232,7 @@
        }
 
        // FIXME: use addProperty interface for these !!
-       as_standard_member std_member = get_standard_member(name.c_str());
+       as_standard_member std_member = get_standard_member(name);
        switch (std_member)
        {
        default:
@@ -1708,7 +1705,13 @@
        {
                // In ActionScript 2.0, event method names are CASE SENSITIVE.
                // In ActionScript 1.0, event method names are CASE INSENSITIVE.
-               const tu_stringi&       method_name = id.get_function_name();
+               // TODO: move to get_function_name directly ?
+               std::string method_name = id.get_function_name();
+               if ( _vm.getSWFVersion() < 7 )
+               {
+                       boost::to_lower(method_name, _vm.getLocale());
+               }
+
                if (method_name.length() > 0)
                {
                        as_value        method;
@@ -1739,7 +1742,7 @@
        return ch; // possibly NULL
 }
 
-void sprite_instance::set_member(const tu_stringi& name,
+void sprite_instance::set_member(const std::string& name,
                const as_value& val)
 {
 #ifdef DEBUG_DYNTEXT_VARIABLES

Index: server/sprite_instance.h
===================================================================
RCS file: /sources/gnash/gnash/server/sprite_instance.h,v
retrieving revision 1.55
retrieving revision 1.56
diff -u -b -r1.55 -r1.56
--- server/sprite_instance.h    11 Jan 2007 17:03:54 -0000      1.55
+++ server/sprite_instance.h    18 Jan 2007 22:53:21 -0000      1.56
@@ -17,7 +17,7 @@
 // 
 //
 
-/* $Id: sprite_instance.h,v 1.55 2007/01/11 17:03:54 strk Exp $ */
+/* $Id: sprite_instance.h,v 1.56 2007/01/18 22:53:21 strk Exp $ */
 
 // Stateful live Sprite instance
 
@@ -438,18 +438,15 @@
        /// Returns address to static buffer. NOT THREAD SAFE!
        virtual const char* get_variable(const char* path_to_var) const;
 
-       // Set *val to the value of the named member and
-       // return true, if we have the named member.
-       // Otherwise leave *val alone and return false.
-       bool get_member(const tu_stringi& name, as_value* val);
+       // See dox in as_object.h
+       bool get_member(const std::string& name, as_value* val);
 
                
        /// Set the named member to the value. 
        //
-       /// Return true if we have
-       /// that member; false otherwise.
-       virtual void set_member(const tu_stringi& name,
-               const as_value& val);
+       /// Return true if we have that member; false otherwise.
+       ///
+       virtual void set_member(const std::string& name, const as_value& val);
 
        /// Overridden to look in DisplayList for a match
        virtual character* get_relative_target(const std::string& name);

Index: server/swf_function.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/swf_function.cpp,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -b -r1.16 -r1.17
--- server/swf_function.cpp     9 Jan 2007 11:02:51 -0000       1.16
+++ server/swf_function.cpp     18 Jan 2007 22:53:21 -0000      1.17
@@ -70,10 +70,10 @@
        //as_object* proto = _properties;
        //proto->add_ref();
 
-       //proto->set_member("constructor", this); //as_value(func));
-       //proto->set_member_flags("constructor", 1);
+       //proto->init_member("constructor", this); //as_value(func));
+       //proto->init_member_flags("constructor", 1);
 
-       //set_member("prototype", as_value(proto));
+       //init_member("prototype", as_value(proto));
 }
 
 /*private static*/
@@ -238,7 +238,7 @@
                        for (int i = 0; i < fn.nargs; i++)
                        {
                                index_number.set_int(i);
-                               arg_array->set_member(index_number.to_string(), 
fn.arg(i));
+                               
arg_array->init_member(index_number.to_string(), fn.arg(i));
                        }
                }
 

Index: server/video_stream_instance.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/video_stream_instance.cpp,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- server/video_stream_instance.cpp    5 Dec 2006 14:26:09 -0000       1.5
+++ server/video_stream_instance.cpp    18 Jan 2007 22:53:21 -0000      1.6
@@ -37,7 +37,8 @@
 //     m_source(NULL)
 {
        assert(m_def);
-       set_member("attachVideo", &attach_video);
+       // FIXME: use new layout
+       init_member("attachVideo", &attach_video);
 }
 
 video_stream_instance::~video_stream_instance()
@@ -77,27 +78,5 @@
        bounds->expand_to_point(1e10f, 1e10f);
 }
 
-//void
-//video_stream_instance::set_member(const tu_stringi& name,    const as_value& 
val)
-//{
-//     if (name == "attachVideo")
-//     {
-//             m_video_source = val.to_object();
-//     }
-//     set_member(name, val);
-//}
-
-//bool
-//video_stream_instance::get_member(const tu_stringi& name, as_value* val)
-//{
-//     if (name == "attachVideo")
-//     {
-//             m_video_source = val->to_object();
-//             val->set_as_object(m_video_source); // 
>set_bool(this->get_visible());
-//             return true;
-//     }
-//     return false;
-//}
-
 } // end of namespace gnash
 

Index: server/video_stream_instance.h
===================================================================
RCS file: /sources/gnash/gnash/server/video_stream_instance.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- server/video_stream_instance.h      12 Dec 2006 19:48:04 -0000      1.4
+++ server/video_stream_instance.h      18 Jan 2007 22:53:21 -0000      1.5
@@ -37,9 +37,6 @@
        // ActionScript overrides
        //
 
-//     virtual void set_member(const tu_stringi& name, const as_value& val);
-//     virtual bool get_member(const tu_stringi& name, as_value* val);
-
        as_object* m_ns;
 
 };

Index: server/asobj/ASSound.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/ASSound.cpp,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -b -r1.6 -r1.7
--- server/asobj/ASSound.cpp    11 Nov 2006 22:44:54 -0000      1.6
+++ server/asobj/ASSound.cpp    18 Jan 2007 22:53:21 -0000      1.7
@@ -115,18 +115,18 @@
 {
     sound_as_object *sound_obj = new sound_as_object;
 
-    sound_obj->set_member("attachsound", &sound_attachsound);
-    sound_obj->set_member("getbytesloaded", &sound_getbytesloaded);
-    sound_obj->set_member("getbytestotal", &sound_getbytestotal);
-    sound_obj->set_member("getpan", &sound_getpan);
-    sound_obj->set_member("gettransform", &sound_gettransform);
-    sound_obj->set_member("getvolume", &sound_getvolume);
-    sound_obj->set_member("loadsound", &sound_loadsound);
-    sound_obj->set_member("setpan", &sound_setpan);
-    sound_obj->set_member("settransform", &sound_settransform);
-    sound_obj->set_member("setvolume", &sound_setvolume);
-    sound_obj->set_member("start", &sound_start);
-    sound_obj->set_member("stop", &sound_stop);
+    sound_obj->init_member("attachSound", &sound_attachsound);
+    sound_obj->init_member("getBytesLoaded", &sound_getbytesloaded);
+    sound_obj->init_member("getBytesTotal", &sound_getbytestotal);
+    sound_obj->init_member("getPan", &sound_getpan);
+    sound_obj->init_member("getTransform", &sound_gettransform);
+    sound_obj->init_member("getVolume", &sound_getvolume);
+    sound_obj->init_member("loadSound", &sound_loadsound);
+    sound_obj->init_member("setPan", &sound_setpan);
+    sound_obj->init_member("setTransform", &sound_settransform);
+    sound_obj->init_member("setVolume", &sound_setvolume);
+    sound_obj->init_member("start", &sound_start);
+    sound_obj->init_member("stop", &sound_stop);
 
     fn.result->set_as_object(sound_obj);
 }

Index: server/asobj/Boolean.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/Boolean.cpp,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- server/asobj/Boolean.cpp    25 Nov 2006 14:40:37 -0000      1.4
+++ server/asobj/Boolean.cpp    18 Jan 2007 22:53:21 -0000      1.5
@@ -36,8 +36,8 @@
 static void
 attachBooleanInterface(as_object& o)
 {
-       o.set_member("toString", &boolean_tostring);
-       o.set_member("valueOf", &boolean_valueof);
+       o.init_member("toString", &boolean_tostring);
+       o.init_member("valueOf", &boolean_valueof);
 }
 
 static as_object*
@@ -126,7 +126,7 @@
        }
 
        // Register _global.Boolean
-       global.set_member("Boolean", cl.get());
+       global.init_member("Boolean", cl.get());
 
 }
 

Index: server/asobj/Camera.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/Camera.cpp,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- server/asobj/Camera.cpp     20 Nov 2006 21:28:58 -0000      1.3
+++ server/asobj/Camera.cpp     18 Jan 2007 22:53:21 -0000      1.4
@@ -38,10 +38,10 @@
 static void
 attachCameraInterface(as_object& o)
 {
-       o.set_member("get", &camera_get);
-       o.set_member("setmode", &camera_setmode);
-       o.set_member("setmotionlevel", &camera_setmotionlevel);
-       o.set_member("setquality", &camera_setquality);
+       o.init_member("get", &camera_get);
+       o.init_member("setmode", &camera_setmode);
+       o.init_member("setmotionlevel", &camera_setmotionlevel);
+       o.init_member("setquality", &camera_setquality);
 }
 
 static as_object*
@@ -110,7 +110,7 @@
        }
 
        // Register _global.Camera
-       global.set_member("Camera", cl.get());
+       global.init_member("Camera", cl.get());
 
 }
 

Index: server/asobj/Color.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/Color.cpp,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- server/asobj/Color.cpp      12 Jan 2007 10:27:34 -0000      1.4
+++ server/asobj/Color.cpp      18 Jan 2007 22:53:21 -0000      1.5
@@ -38,10 +38,10 @@
 static void
 attachColorInterface(as_object& o)
 {
-       o.set_member("getRGB", &color_getrgb);
-       o.set_member("getTransform", &color_gettransform);
-       o.set_member("setRGB", &color_setrgb);
-       o.set_member("setTransform", &color_settransform);
+       o.init_member("getRGB", &color_getrgb);
+       o.init_member("getTransform", &color_gettransform);
+       o.init_member("setRGB", &color_setrgb);
+       o.init_member("setTransform", &color_settransform);
 }
 
 static as_object*
@@ -110,7 +110,7 @@
        }
 
        // Register _global.Color
-       global.set_member("Color", cl.get());
+       global.init_member("Color", cl.get());
 
 }
 

Index: server/asobj/ContextMenu.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/ContextMenu.cpp,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- server/asobj/ContextMenu.cpp        11 Jan 2007 12:15:02 -0000      1.5
+++ server/asobj/ContextMenu.cpp        18 Jan 2007 22:53:21 -0000      1.6
@@ -36,8 +36,8 @@
 static void
 attachContextMenuInterface(as_object& o)
 {
-       o.set_member("copy", &contextmenu_copy);
-       o.set_member("hideBuiltInItems", &contextmenu_hidebuiltinitems);
+       o.init_member("copy", &contextmenu_copy);
+       o.init_member("hideBuiltInItems", &contextmenu_hidebuiltinitems);
 }
 
 static as_object*
@@ -100,7 +100,7 @@
        }
 
        // Register _global.ContextMenu
-       global.set_member("ContextMenu", cl.get());
+       global.init_member("ContextMenu", cl.get());
 
 }
 

Index: server/asobj/CustomActions.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/CustomActions.cpp,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- server/asobj/CustomActions.cpp      20 Nov 2006 21:28:58 -0000      1.3
+++ server/asobj/CustomActions.cpp      18 Jan 2007 22:53:21 -0000      1.4
@@ -38,10 +38,10 @@
 static void
 attachCustomActionsInterface(as_object& o)
 {
-       o.set_member("get", &customactions_get);
-       o.set_member("install", &customactions_install);
-       o.set_member("list", &customactions_list);
-       o.set_member("uninstall", &customactions_uninstall);
+       o.init_member("get", &customactions_get);
+       o.init_member("install", &customactions_install);
+       o.init_member("list", &customactions_list);
+       o.init_member("uninstall", &customactions_uninstall);
 }
 
 static as_object*
@@ -110,7 +110,7 @@
        }
 
        // Register _global.CustomActions
-       global.set_member("CustomActions", cl.get());
+       global.init_member("CustomActions", cl.get());
 
 }
 

Index: server/asobj/Date.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/Date.cpp,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- server/asobj/Date.cpp       24 Nov 2006 15:41:14 -0000      1.5
+++ server/asobj/Date.cpp       18 Jan 2007 22:53:21 -0000      1.6
@@ -302,43 +302,43 @@
 
        date_as_object *date_obj = new date_as_object;
 
-       date_obj->set_member("getDate", &date_getdate);
-       date_obj->set_member("getDay", &date_getday);
-       date_obj->set_member("getFullYear", &date_getfullyear);
-       date_obj->set_member("getHours", &date_gethours);
-       date_obj->set_member("getMilliseconds", &date_getmilliseconds);
-       date_obj->set_member("getMinutes", &date_getminutes);
-       date_obj->set_member("getMonth", &date_getmonth);
-       date_obj->set_member("getSeconds", &date_getseconds);
-       date_obj->set_member("getTime", &date_gettime);
-       date_obj->set_member("getTimezoneOffset", &date_gettimezoneoffset);
-       date_obj->set_member("getUTCDate", &date_getutcdate);
-       date_obj->set_member("getUTCDay", &date_getutcday);
-       date_obj->set_member("getUTCFullYear", &date_getutcfullyear);
-       date_obj->set_member("getUTCHours", &date_getutchours);
-       date_obj->set_member("getUTCMilliseconds", &date_getutcmilliseconds);
-       date_obj->set_member("getUTCMinutes", &date_getutcminutes);
-       date_obj->set_member("getUTCMonth", &date_getutcmonth);
-       date_obj->set_member("getUTCSeconds", &date_getutcseconds);
-       date_obj->set_member("getYear", &date_getyear);
-       date_obj->set_member("setDate", &date_setdate);
-       date_obj->set_member("setFullYear", &date_setfullyear);
-       date_obj->set_member("setHours", &date_sethours);
-       date_obj->set_member("setMilliseconds", &date_setmilliseconds);
-       date_obj->set_member("setMinutes", &date_setminutes);
-       date_obj->set_member("setMonth", &date_setmonth);
-       date_obj->set_member("setSeconds", &date_setseconds);
-       date_obj->set_member("setTime", &date_settime);
-       date_obj->set_member("setUTCDate", &date_setutcdate);
-       date_obj->set_member("setUTCFullYear", &date_setutcfullyear);
-       date_obj->set_member("setUTCHours", &date_setutchours);
-       date_obj->set_member("setUTCMilliseconds", &date_setutcmilliseconds);
-       date_obj->set_member("setUTCMinutes", &date_setutcminutes);
-       date_obj->set_member("setUTCMonth", &date_setutcmonth);
-       date_obj->set_member("setUTCSeconds", &date_setutcseconds);
-       date_obj->set_member("setYear", &date_setyear);
-       date_obj->set_member("toString", &date_tostring);
-       date_obj->set_member("UTC", &date_utc);
+       date_obj->init_member("getDate", &date_getdate);
+       date_obj->init_member("getDay", &date_getday);
+       date_obj->init_member("getFullYear", &date_getfullyear);
+       date_obj->init_member("getHours", &date_gethours);
+       date_obj->init_member("getMilliseconds", &date_getmilliseconds);
+       date_obj->init_member("getMinutes", &date_getminutes);
+       date_obj->init_member("getMonth", &date_getmonth);
+       date_obj->init_member("getSeconds", &date_getseconds);
+       date_obj->init_member("getTime", &date_gettime);
+       date_obj->init_member("getTimezoneOffset", &date_gettimezoneoffset);
+       date_obj->init_member("getUTCDate", &date_getutcdate);
+       date_obj->init_member("getUTCDay", &date_getutcday);
+       date_obj->init_member("getUTCFullYear", &date_getutcfullyear);
+       date_obj->init_member("getUTCHours", &date_getutchours);
+       date_obj->init_member("getUTCMilliseconds", &date_getutcmilliseconds);
+       date_obj->init_member("getUTCMinutes", &date_getutcminutes);
+       date_obj->init_member("getUTCMonth", &date_getutcmonth);
+       date_obj->init_member("getUTCSeconds", &date_getutcseconds);
+       date_obj->init_member("getYear", &date_getyear);
+       date_obj->init_member("setDate", &date_setdate);
+       date_obj->init_member("setFullYear", &date_setfullyear);
+       date_obj->init_member("setHours", &date_sethours);
+       date_obj->init_member("setMilliseconds", &date_setmilliseconds);
+       date_obj->init_member("setMinutes", &date_setminutes);
+       date_obj->init_member("setMonth", &date_setmonth);
+       date_obj->init_member("setSeconds", &date_setseconds);
+       date_obj->init_member("setTime", &date_settime);
+       date_obj->init_member("setUTCDate", &date_setutcdate);
+       date_obj->init_member("setUTCFullYear", &date_setutcfullyear);
+       date_obj->init_member("setUTCHours", &date_setutchours);
+       date_obj->init_member("setUTCMilliseconds", &date_setutcmilliseconds);
+       date_obj->init_member("setUTCMinutes", &date_setutcminutes);
+       date_obj->init_member("setUTCMonth", &date_setutcmonth);
+       date_obj->init_member("setUTCSeconds", &date_setutcseconds);
+       date_obj->init_member("setYear", &date_setyear);
+       date_obj->init_member("toString", &date_tostring);
+       date_obj->init_member("UTC", &date_utc);
 
        struct tm *ti;
        if (fn.nargs == 0) {

Index: server/asobj/Error.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/Error.cpp,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- server/asobj/Error.cpp      11 Jan 2007 11:26:50 -0000      1.4
+++ server/asobj/Error.cpp      18 Jan 2007 22:53:21 -0000      1.5
@@ -35,7 +35,9 @@
 static void
 attachErrorInterface(as_object& o)
 {
-       o.set_member("toString", &error_tostring);
+       // is this really needed ? shouldn't toString be
+       // derived from Object inheritance ?
+       o.init_member("toString", &error_tostring);
 }
 
 static as_object*
@@ -95,7 +97,7 @@
        }
 
        // Register _global.Error
-       global.set_member("Error", cl.get());
+       global.init_member("Error", cl.get());
 
 }
 

Index: server/asobj/Global.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/Global.cpp,v
retrieving revision 1.32
retrieving revision 1.33
diff -u -b -r1.32 -r1.33
--- server/asobj/Global.cpp     18 Jan 2007 16:28:10 -0000      1.32
+++ server/asobj/Global.cpp     18 Jan 2007 22:53:21 -0000      1.33
@@ -18,7 +18,7 @@
 
 // Implementation of the Global ActionScript Object
 
-/* $Id: Global.cpp,v 1.32 2007/01/18 16:28:10 strk Exp $ */
+/* $Id: Global.cpp,v 1.33 2007/01/18 22:53:21 strk Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -418,10 +418,7 @@
        //-------------------------------------------------
 
        // ASSetPropFlags
-       set_member("ASSetPropFlags", as_global_assetpropflags);
-
-       // See: http://sephiroth.it/reference.php?id=717&cat=1
-       textsnapshot_class_init(*this);
+       init_member("ASSetPropFlags", as_global_assetpropflags);
 
        // System and Function were added in Player Version 6, but
        // seem to be available even if SWF target version is
@@ -441,7 +438,7 @@
        // SWF4
        //-----------------------
 
-       set_member("trace", as_value(as_global_trace));
+       init_member("trace", as_value(as_global_trace));
        // The methods of the Math class are available
        // as global methods in SWF4 and as members of
        // the Math class from SWF5 up
@@ -455,34 +452,36 @@
        boolean_class_init(*this);
        color_class_init(*this);
        selection_class_init(*this); // Selection
-       set_member("Sound", as_value(sound_new));
+       init_member("Sound", as_value(sound_new));
+       init_member("XMLSocket", as_value(xmlsocket_new));
+       init_member("Date", as_value(date_new));
        xml_class_init(*this);
        xmlnode_class_init(*this);
-       set_member("XMLSocket", as_value(xmlsocket_new));
-       set_member("Date", as_value(date_new));
        mouse_class_init(*this);
        object_class_init(*this);
        number_class_init(*this); 
        string_class_init(*this); 
        array_class_init(*this);
        // unescape
-       set_member("unescape", as_global_unescape);
+       init_member("unescape", as_global_unescape);
        // parseFloat
-       set_member("parseFloat", as_global_parsefloat);
+       init_member("parseFloat", as_global_parsefloat);
        // parseInt
-       set_member("parseInt", as_global_parseint);
+       init_member("parseInt", as_global_parseint);
        // isNan
-       set_member("isNaN", as_global_isnan);
+       init_member("isNaN", as_global_isnan);
        // isFinite
-       set_member("isFinite", as_global_isfinite);
+       init_member("isFinite", as_global_isfinite);
 
        if ( vm.getSWFVersion() < 6 ) goto extscan;
        //-----------------------
        // SWF6
        //-----------------------
 
-       set_member("LocalConnection", as_value(localconnection_new));
-       set_member("TextFormat", as_value(textformat_new));
+       // See: http://sephiroth.it/reference.php?id=717&cat=1
+       textsnapshot_class_init(*this);
+       init_member("LocalConnection", as_value(localconnection_new));
+       init_member("TextFormat", as_value(textformat_new));
        key_class_init(*this); // Key
        video_class_init(*this); // Video
        camera_class_init(*this); // Camera
@@ -497,8 +496,8 @@
        // SWF7
        //-----------------------
 
-       set_member("NetConnection", as_value(netconnection_new));
-       set_member("NetStream", as_value(netstream_new));
+       init_member("NetConnection", as_value(netconnection_new));
+       init_member("NetStream", as_value(netstream_new));
        contextmenu_class_init(*this);
        moviecliploader_class_init(*this);
        // sephiroth.it refers this to be introduced in SWF7

Index: server/asobj/Key.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/Key.cpp,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -b -r1.7 -r1.8
--- server/asobj/Key.cpp        21 Dec 2006 11:34:49 -0000      1.7
+++ server/asobj/Key.cpp        18 Jan 2007 22:53:21 -0000      1.8
@@ -77,12 +77,12 @@
 {
     key_as_object *key_obj = new key_as_object;
 
-    key_obj->set_member("addlistener", &key_addlistener);
-    key_obj->set_member("getascii", &key_getascii);
-    key_obj->set_member("getcode", &key_getcode);
-    key_obj->set_member("isdown", &key_isdown);
-    key_obj->set_member("istoggled", &key_istoggled);
-    key_obj->set_member("removelistener", &key_removelistener);
+    key_obj->init_member("addlistener", &key_addlistener);
+    key_obj->init_member("getascii", &key_getascii);
+    key_obj->init_member("getcode", &key_getcode);
+    key_obj->init_member("isdown", &key_isdown);
+    key_obj->init_member("istoggled", &key_istoggled);
+    key_obj->init_member("removelistener", &key_removelistener);
 
     fn.result->set_as_object(key_obj);
 }
@@ -175,8 +175,9 @@
            notify_listeners(event_id(event_id::KEY_UP).get_function_name());
 }
 
+// TODO: take a std::string
 void
-key_as_object::notify_listeners(const tu_stringi& funcname)
+key_as_object::notify_listeners(const std::string& funcname)
 {
     // Notify listeners.
     for (std::vector<boost::intrusive_ptr<as_object> >::iterator iter = 
m_listeners.begin();
@@ -187,7 +188,7 @@
       boost::intrusive_ptr<as_object>  listener = *iter; // Hold an owning 
reference.
       as_value method;
 
-      if (listener->get_member(funcname, &method))
+      if (listener->get_member(funcname.c_str(), &method))
         call_method(method, NULL /* or root? */, listener.get(), 0, 0);
     }
 }
@@ -347,7 +348,7 @@
        as_object* global = VM::get().getGlobal();
        // This isn't very performant... do we allow user override
        // of _global.Key, btw ?
-       global->get_member("Key", &kval);
+       global->init_member("Key", &kval);
        if (kval.is_object() )
        {
            key_as_object*      ko = static_cast<key_as_object*>( 
kval.to_object() );
@@ -392,15 +393,19 @@
     KEY_CONST(TAB);
     KEY_CONST(UP);
 
+    // FIXME: is this function even called/allowed ?
+    //        if so we shouldn't ever explicitly set
+    //        these methods, but rather rely on inheritance
+
     // methods
-    key_obj->set_member("addListener", &key_add_listener);
-    key_obj->set_member("getAscii", &key_get_ascii);
-    key_obj->set_member("getCode", &key_get_code);
-    key_obj->set_member("isDown", &key_is_down);
-    key_obj->set_member("isToggled", &key_is_toggled);
-    key_obj->set_member("removeListener", &key_remove_listener);
+    key_obj->init_member("addListener", &key_add_listener);
+    key_obj->init_member("getAscii", &key_get_ascii);
+    key_obj->init_member("getCode", &key_get_code);
+    key_obj->init_member("isDown", &key_is_down);
+    key_obj->init_member("isToggled", &key_is_toggled);
+    key_obj->init_member("removeListener", &key_remove_listener);
 
-    global.set_member("Key", key_obj);
+    global.init_member("Key", key_obj);
 }
 
 } // end of gnash namespace

Index: server/asobj/Key.h
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/Key.h,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -b -r1.10 -r1.11
--- server/asobj/Key.h  24 Nov 2006 14:50:30 -0000      1.10
+++ server/asobj/Key.h  18 Jan 2007 22:53:21 -0000      1.11
@@ -16,7 +16,7 @@
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 // 
 
-/* $Id: Key.h,v 1.10 2006/11/24 14:50:30 strk Exp $ */
+/* $Id: Key.h,v 1.11 2007/01/18 22:53:21 strk Exp $ */
 
 #ifndef __KEY_H__
 #define __KEY_H__
@@ -99,8 +99,10 @@
        std::vector<boost::intrusive_ptr<as_object> >   m_listeners;
        int     m_last_key_pressed;
 
-       void notify_listeners(const tu_stringi& funcname);
+       void notify_listeners(const std::string& funcname);
+
 public:
+
        key_as_object();
 
        bool is_key_down(int code);

Index: server/asobj/LoadVars.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/LoadVars.cpp,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- server/asobj/LoadVars.cpp   11 Jan 2007 11:26:50 -0000      1.4
+++ server/asobj/LoadVars.cpp   18 Jan 2007 22:53:21 -0000      1.5
@@ -42,14 +42,14 @@
 static void
 attachLoadVarsInterface(as_object& o)
 {
-       o.set_member("addRequestHeader", &loadvars_addrequestheader);
-       o.set_member("decode", &loadvars_decode);
-       o.set_member("getBytesLoaded", &loadvars_getbytesloaded);
-       o.set_member("getBytesTotal", &loadvars_getbytestotal);
-       o.set_member("load", &loadvars_load);
-       o.set_member("send", &loadvars_send);
-       o.set_member("sendAndLoad", &loadvars_sendandload);
-       o.set_member("toString", &loadvars_tostring);
+       o.init_member("addRequestHeader", &loadvars_addrequestheader);
+       o.init_member("decode", &loadvars_decode);
+       o.init_member("getBytesLoaded", &loadvars_getbytesloaded);
+       o.init_member("getBytesTotal", &loadvars_getbytestotal);
+       o.init_member("load", &loadvars_load);
+       o.init_member("send", &loadvars_send);
+       o.init_member("sendAndLoad", &loadvars_sendandload);
+       o.init_member("toString", &loadvars_tostring);
 }
 
 static as_object*
@@ -130,7 +130,7 @@
        }
 
        // Register _global.LoadVars
-       global.set_member("LoadVars", cl.get());
+       global.init_member("LoadVars", cl.get());
 
 }
 

Index: server/asobj/LocalConnection.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/LocalConnection.cpp,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- server/asobj/LocalConnection.cpp    29 Oct 2006 18:34:12 -0000      1.5
+++ server/asobj/LocalConnection.cpp    18 Jan 2007 22:53:21 -0000      1.6
@@ -103,16 +103,16 @@
 {
     localconnection_as_object *localconnection_obj = new 
localconnection_as_object;
 
-    localconnection_obj->set_member("close", &localconnection_close);
-    localconnection_obj->set_member("connect", &localconnection_connect);
-    localconnection_obj->set_member("domain", &localconnection_domain);
-    localconnection_obj->set_member("send", &localconnection_send);
+    localconnection_obj->init_member("close", &localconnection_close);
+    localconnection_obj->init_member("connect", &localconnection_connect);
+    localconnection_obj->init_member("domain", &localconnection_domain);
+    localconnection_obj->init_member("send", &localconnection_send);
 //#ifdef ENABLE_TESTING
 #ifndef NETWORK_CONN
-    localconnection_obj->set_member("getname",  &shm_getname);
-    localconnection_obj->set_member("getsize",  &shm_getsize);
-    localconnection_obj->set_member("getallocated",  &shm_getallocated);
-    localconnection_obj->set_member("exists",  &shm_exists);
+    localconnection_obj->init_member("getname",  &shm_getname);
+    localconnection_obj->init_member("getsize",  &shm_getsize);
+    localconnection_obj->init_member("getallocated",  &shm_getallocated);
+    localconnection_obj->init_member("exists",  &shm_exists);
 #endif
 
     fn.result->set_as_object(localconnection_obj);

Index: server/asobj/Math.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/Math.cpp,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -b -r1.13 -r1.14
--- server/asobj/Math.cpp       24 Nov 2006 14:50:30 -0000      1.13
+++ server/asobj/Math.cpp       18 Jan 2007 22:53:21 -0000      1.14
@@ -16,7 +16,7 @@
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 //
 
-/* $Id: Math.cpp,v 1.13 2006/11/24 14:50:30 strk Exp $ */
+/* $Id: Math.cpp,v 1.14 2007/01/18 22:53:21 strk Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -171,7 +171,7 @@
     // Create built-in math object.
     as_object* math_obj = new math_as_object;
 
-    global.set_member("Math", math_obj);
+    global.init_member("Math", math_obj);
 }
 
 //
@@ -260,36 +260,38 @@
        as_object()
 {
 
+       // TODO: rely on ineritance, use init_property ?
+
        // constant
-       set_member("e", 2.7182818284590452354);
-       set_member("ln2", 0.69314718055994530942);
-       set_member("log2e", 1.4426950408889634074);
-       set_member("ln10", 2.30258509299404568402);
-       set_member("log10e", 0.43429448190325182765);
-       set_member("pi", 3.14159265358979323846);
-       set_member("sqrt1_2", 0.7071067811865475244);
-       set_member("sqrt2", 1.4142135623730950488);
+       init_member("e", 2.7182818284590452354);
+       init_member("ln2", 0.69314718055994530942);
+       init_member("log2e", 1.4426950408889634074);
+       init_member("ln10", 2.30258509299404568402);
+       init_member("log10e", 0.43429448190325182765);
+       init_member("pi", 3.14159265358979323846);
+       init_member("sqrt1_2", 0.7071067811865475244);
+       init_member("sqrt2", 1.4142135623730950488);
 
        // math methods
-       set_member("abs", &math_abs);
-       set_member("acos", &math_acos);
-       set_member("asin", &math_asin);
-       set_member("atan", &math_atan);
-       set_member("ceil", &math_ceil);
-       set_member("cos", &math_cos);
-       set_member("exp", &math_exp);
-       set_member("floor", &math_floor);
-       set_member("log", &math_log);
-       set_member("random", &math_random);
-       set_member("round", &math_round);
-       set_member("sin", &math_sin);
-       set_member("sqrt", &math_sqrt);
-       set_member("tan", &math_tan);
-
-       set_member("atan2", &math_atan2);
-       set_member("max", &math_max);
-       set_member("min", &math_min);
-       set_member("pow", &math_pow);
+       init_member("abs", &math_abs);
+       init_member("acos", &math_acos);
+       init_member("asin", &math_asin);
+       init_member("atan", &math_atan);
+       init_member("ceil", &math_ceil);
+       init_member("cos", &math_cos);
+       init_member("exp", &math_exp);
+       init_member("floor", &math_floor);
+       init_member("log", &math_log);
+       init_member("random", &math_random);
+       init_member("round", &math_round);
+       init_member("sin", &math_sin);
+       init_member("sqrt", &math_sqrt);
+       init_member("tan", &math_tan);
+
+       init_member("atan2", &math_atan2);
+       init_member("max", &math_max);
+       init_member("min", &math_min);
+       init_member("pow", &math_pow);
 }
 
 void

Index: server/asobj/Microphone.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/Microphone.cpp,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- server/asobj/Microphone.cpp 20 Nov 2006 21:38:11 -0000      1.3
+++ server/asobj/Microphone.cpp 18 Jan 2007 22:53:21 -0000      1.4
@@ -39,11 +39,11 @@
 static void
 attachMicrophoneInterface(as_object& o)
 {
-       o.set_member("get", &microphone_get);
-       o.set_member("setgain", &microphone_setgain);
-       o.set_member("setrate", &microphone_setrate);
-       o.set_member("setsilencelevel", &microphone_setsilencelevel);
-       o.set_member("setuseechosuppression", 
&microphone_setuseechosuppression);
+       o.init_member("get", &microphone_get);
+       o.init_member("setgain", &microphone_setgain);
+       o.init_member("setrate", &microphone_setrate);
+       o.init_member("setsilencelevel", &microphone_setsilencelevel);
+       o.init_member("setuseechosuppression", 
&microphone_setuseechosuppression);
 }
 
 static as_object*
@@ -115,7 +115,7 @@
        }
 
        // Register _global.Microphone
-       global.set_member("Microphone", cl.get());
+       global.init_member("Microphone", cl.get());
 
 }
 

Index: server/asobj/Mouse.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/Mouse.cpp,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- server/asobj/Mouse.cpp      20 Nov 2006 21:38:11 -0000      1.3
+++ server/asobj/Mouse.cpp      18 Jan 2007 22:53:21 -0000      1.4
@@ -38,10 +38,10 @@
 static void
 attachMouseInterface(as_object& o)
 {
-       o.set_member("addlistener", &mouse_addlistener);
-       o.set_member("hide", &mouse_hide);
-       o.set_member("removelistener", &mouse_removelistener);
-       o.set_member("show", &mouse_show);
+       o.init_member("addlistener", &mouse_addlistener);
+       o.init_member("hide", &mouse_hide);
+       o.init_member("removelistener", &mouse_removelistener);
+       o.init_member("show", &mouse_show);
 }
 
 static as_object*
@@ -110,7 +110,7 @@
        }
 
        // Register _global.Mouse
-       global.set_member("Mouse", cl.get());
+       global.init_member("Mouse", cl.get());
 
 }
 

Index: server/asobj/MovieClipLoader.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/MovieClipLoader.cpp,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -b -r1.14 -r1.15
--- server/asobj/MovieClipLoader.cpp    21 Dec 2006 11:34:49 -0000      1.14
+++ server/asobj/MovieClipLoader.cpp    18 Jan 2007 22:53:21 -0000      1.15
@@ -54,17 +54,12 @@
 static void
 attachMovieClipLoaderInterface(as_object& o)
 {
-       o.set_member("loadClip", &moviecliploader_loadclip);
-       o.set_member_flags("loadClip", 1); // hidden
-       o.set_member("unloadClip", &moviecliploader_unloadclip);
-       o.set_member_flags("unloadClip", 1); // hidden
-       o.set_member("getProgress", &moviecliploader_getprogress);
-       o.set_member_flags("getProgress", 1); // hidden
-
-       o.set_member("addListener", &moviecliploader_addlistener);
-       o.set_member_flags("addListener", 1); // hidden
-       o.set_member("removeListener", &moviecliploader_removelistener);
-       o.set_member_flags("removeListener", 1); // hidden
+       o.init_member("loadClip", &moviecliploader_loadclip);
+       o.init_member("unloadClip", &moviecliploader_unloadclip);
+       o.init_member("getProgress", &moviecliploader_getprogress);
+
+       o.init_member("addListener", &moviecliploader_addlistener);
+       o.init_member("removeListener", &moviecliploader_removelistener);
 
 #if 0
        // Load the default event handlers. These should really never
@@ -428,8 +423,8 @@
 
   mcl_as_object *mcl_obj = new mcl_as_object;
 
-  mcl_obj->set_member("bytesLoaded", mcl_data->bytes_loaded);
-  mcl_obj->set_member("bytesTotal",  mcl_data->bytes_total);
+  mcl_obj->init_member("bytesLoaded", mcl_data->bytes_loaded);
+  mcl_obj->init_member("bytesTotal",  mcl_data->bytes_total);
   
   fn.result->set_as_object(mcl_obj); // will store in a boost::intrusive_ptr
 }
@@ -470,7 +465,7 @@
 void
 moviecliploader_class_init(as_object& global)
 {
-       global.set_member("MovieClipLoader", as_value(moviecliploader_new));
+       global.init_member("MovieClipLoader", as_value(moviecliploader_new));
 }
 
 } // end of gnash namespace

Index: server/asobj/NetConnection.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/NetConnection.cpp,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -b -r1.16 -r1.17
--- server/asobj/NetConnection.cpp      18 Jan 2007 11:53:37 -0000      1.16
+++ server/asobj/NetConnection.cpp      18 Jan 2007 22:53:21 -0000      1.17
@@ -14,7 +14,7 @@
 // along with this program; if not, write to the Free Software
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
-/* $Id: NetConnection.cpp,v 1.16 2007/01/18 11:53:37 tgc Exp $ */
+/* $Id: NetConnection.cpp,v 1.17 2007/01/18 22:53:21 strk Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -164,7 +164,7 @@
 /// Open a connection to stream FLV files.
 //
 /// \param arg is the URL
-/// \return nothing
+/// \return true on success, false on error.
 /// \note Older Flash movies can only take a NULL value as
 /// the parameter, which therefor only connects to the localhost using
 /// RTMP. Newer Flash movies have a parameter to connect which is a
@@ -270,7 +270,9 @@
        }
        fill_cache(50000); // pre-cache 50 Kbytes
 
+       return true;
 }
+
 /*public*/
 bool
 NetConnection::eof()
@@ -320,7 +322,8 @@
         
     netconnection_as_object *netconnection_obj = new netconnection_as_object;
 
-    netconnection_obj->set_member("connect", &netconnection_connect);
+    // FIXME: rely on inheritance
+    netconnection_obj->init_member("connect", &netconnection_connect);
 
     fn.result->set_as_object(netconnection_obj);
 }

Index: server/asobj/NetStream.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/NetStream.cpp,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -b -r1.21 -r1.22
--- server/asobj/NetStream.cpp  12 Jan 2007 09:35:58 -0000      1.21
+++ server/asobj/NetStream.cpp  18 Jan 2007 22:53:21 -0000      1.22
@@ -18,7 +18,7 @@
 //
 //
 
-/* $Id: NetStream.cpp,v 1.21 2007/01/12 09:35:58 strk Exp $ */
+/* $Id: NetStream.cpp,v 1.22 2007/01/18 22:53:21 strk Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -44,11 +44,12 @@
 {
     netstream_as_object *netstream_obj = new netstream_as_object;
 
-    netstream_obj->set_member("close", &netstream_close);
-    netstream_obj->set_member("pause", &netstream_pause);
-    netstream_obj->set_member("play", &netstream_play);
-    netstream_obj->set_member("seek", &netstream_seek);
-    netstream_obj->set_member("setBufferTime", &netstream_setbuffertime);
+    // FIXME: rely on inheritance
+    netstream_obj->init_member("close", &netstream_close);
+    netstream_obj->init_member("pause", &netstream_pause);
+    netstream_obj->init_member("play", &netstream_play);
+    netstream_obj->init_member("seek", &netstream_seek);
+    netstream_obj->init_member("setBufferTime", &netstream_setbuffertime);
 
     fn.result->set_as_object(netstream_obj);
 

Index: server/asobj/NetStream.h
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/NetStream.h,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -b -r1.16 -r1.17
--- server/asobj/NetStream.h    13 Jan 2007 20:06:17 -0000      1.16
+++ server/asobj/NetStream.h    18 Jan 2007 22:53:21 -0000      1.17
@@ -18,7 +18,7 @@
 //
 //
 
-/*  $Id: NetStream.h,v 1.16 2007/01/13 20:06:17 tgc Exp $ */
+/*  $Id: NetStream.h,v 1.17 2007/01/18 22:53:21 strk Exp $ */
 
 #ifndef __NETSTREAM_H__
 #define __NETSTREAM_H__
@@ -88,8 +88,6 @@
 
        NetStream obj;
 
-//     virtual void set_member(const tu_stringi& name, const as_value& val);
-//     virtual bool get_member(const tu_stringi& name, as_value* val);
 };
 
 void netstream_new(const fn_call& fn);

Index: server/asobj/NetStreamFfmpeg.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/NetStreamFfmpeg.cpp,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -b -r1.6 -r1.7
--- server/asobj/NetStreamFfmpeg.cpp    18 Jan 2007 11:53:37 -0000      1.6
+++ server/asobj/NetStreamFfmpeg.cpp    18 Jan 2007 22:53:21 -0000      1.7
@@ -14,7 +14,7 @@
 // along with this program; if not, write to the Free Software
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
-/* $Id: NetStreamFfmpeg.cpp,v 1.6 2007/01/18 11:53:37 tgc Exp $ */
+/* $Id: NetStreamFfmpeg.cpp,v 1.7 2007/01/18 22:53:21 strk Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -74,7 +74,7 @@
 {
        if (m_netstream_object)
        {
-               //m_netstream_object->set_member("onStatus_Code", code);
+               //m_netstream_object->init_member("onStatus_Code", code);
                //push_video_event(m_netstream_object);
        }
 }

Index: server/asobj/NetStreamGst.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/NetStreamGst.cpp,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- server/asobj/NetStreamGst.cpp       15 Jan 2007 20:58:53 -0000      1.3
+++ server/asobj/NetStreamGst.cpp       18 Jan 2007 22:53:21 -0000      1.4
@@ -68,7 +68,7 @@
 {
        if (m_netstream_object)
        {
-               //m_netstream_object->set_member("onStatus_Code", code);
+               //m_netstream_object->init_member("onStatus_Code", code);
                //push_video_event(m_netstream_object);
        }
 }

Index: server/asobj/Number.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/Number.cpp,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -b -r1.8 -r1.9
--- server/asobj/Number.cpp     15 Dec 2006 21:25:59 -0000      1.8
+++ server/asobj/Number.cpp     18 Jan 2007 22:53:21 -0000      1.9
@@ -18,7 +18,7 @@
 //
 //
 
-/* $Id: Number.cpp,v 1.8 2006/12/15 21:25:59 rsavoye Exp $ */
+/* $Id: Number.cpp,v 1.9 2007/01/18 22:53:21 strk Exp $ */
 
 // Implementation of ActionScript Number class.
 
@@ -124,7 +124,7 @@
        }
 
        // Register _global.Number
-       global.set_member("Number", cl.get());
+       global.init_member("Number", cl.get());
 
 }
 

Index: server/asobj/Object.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/Object.cpp,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -b -r1.10 -r1.11
--- server/asobj/Object.cpp     11 Jan 2007 17:03:54 -0000      1.10
+++ server/asobj/Object.cpp     18 Jan 2007 22:53:21 -0000      1.11
@@ -18,7 +18,7 @@
 //
 //
 
-/* $Id: Object.cpp,v 1.10 2007/01/11 17:03:54 strk Exp $ */
+/* $Id: Object.cpp,v 1.11 2007/01/18 22:53:21 strk Exp $ */
 
 // Implementation of ActionScript Object class.
 
@@ -49,9 +49,9 @@
 attachObjectInterface(as_object& o)
 {
        // FIXME: add Object interface here:
-       o.set_member("addProperty", &object_addproperty);
+       o.init_member("addProperty", &object_addproperty);
        o.set_member_flags("addProperty", 1); // hidden
-       o.set_member("registerClass", &object_registerClass);
+       o.init_member("registerClass", &object_registerClass);
        o.set_member_flags("registerClass", 1); // hidden
 }
 
@@ -133,7 +133,7 @@
        }
 
        // Register _global.Object
-       global.set_member("Object", cl.get());
+       global.init_member("Object", cl.get());
 
 }
 

Index: server/asobj/Selection.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/Selection.cpp,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- server/asobj/Selection.cpp  12 Jan 2007 09:53:58 -0000      1.4
+++ server/asobj/Selection.cpp  18 Jan 2007 22:53:21 -0000      1.5
@@ -42,14 +42,14 @@
 static void
 attachSelectionInterface(as_object& o)
 {
-       o.set_member("addListener", &selection_addlistener);
-       o.set_member("getBeginIndex", &selection_getbeginindex);
-       o.set_member("getCaretIndex", &selection_getcaretindex);
-       o.set_member("getEndIndex", &selection_getendindex);
-       o.set_member("getFocus", &selection_getfocus);
-       o.set_member("removeListener", &selection_removelistener);
-       o.set_member("setFocus", &selection_setfocus);
-       o.set_member("setSelection", &selection_setselection);
+       o.init_member("addListener", &selection_addlistener);
+       o.init_member("getBeginIndex", &selection_getbeginindex);
+       o.init_member("getCaretIndex", &selection_getcaretindex);
+       o.init_member("getEndIndex", &selection_getendindex);
+       o.init_member("getFocus", &selection_getfocus);
+       o.init_member("removeListener", &selection_removelistener);
+       o.init_member("setFocus", &selection_setfocus);
+       o.init_member("setSelection", &selection_setselection);
 }
 
 static as_object*
@@ -122,7 +122,7 @@
 
        static boost::intrusive_ptr<as_object> obj = new as_object();
        attachSelectionInterface(*obj);
-       global.set_member("Selection", obj.get());
+       global.init_member("Selection", obj.get());
 
 }
 

Index: server/asobj/SharedObject.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/SharedObject.cpp,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- server/asobj/SharedObject.cpp       11 Jan 2007 11:56:20 -0000      1.4
+++ server/asobj/SharedObject.cpp       18 Jan 2007 22:53:21 -0000      1.5
@@ -39,10 +39,10 @@
 attachSharedObjectInterface(as_object& o)
 {
        // TODO: clear, flush and getSize not in SWF<6 , it seems
-       o.set_member("clear", &sharedobject_clear);
-       o.set_member("flush", &sharedobject_flush);
-       o.set_member("getLocal", &sharedobject_getlocal);
-       o.set_member("getSize", &sharedobject_getsize);
+       o.init_member("clear", &sharedobject_clear);
+       o.init_member("flush", &sharedobject_flush);
+       o.init_member("getLocal", &sharedobject_getlocal);
+       o.init_member("getSize", &sharedobject_getsize);
 }
 
 static as_object*
@@ -111,7 +111,7 @@
        }
 
        // Register _global.SharedObject
-       global.set_member("SharedObject", cl.get());
+       global.init_member("SharedObject", cl.get());
 
 }
 

Index: server/asobj/Stage.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/Stage.cpp,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- server/asobj/Stage.cpp      11 Jan 2007 12:47:26 -0000      1.4
+++ server/asobj/Stage.cpp      18 Jan 2007 22:53:21 -0000      1.5
@@ -36,8 +36,8 @@
 static void
 attachStageInterface(as_object& o)
 {
-       o.set_member("addListener", &stage_addlistener);
-       o.set_member("removeListener", &stage_removelistener);
+       o.init_member("addListener", &stage_addlistener);
+       o.init_member("removeListener", &stage_removelistener);
 }
 
 static as_object*
@@ -90,25 +90,7 @@
 
        static boost::intrusive_ptr<as_object> obj = new as_object();
        attachStageInterface(*obj);
-       global.set_member("Stage", obj.get());
-
-#if 0 // Stage is NOT a class, but a simple object, see Stage.as
-
-       // This is going to be the global Stage "class"/"function"
-       static boost::intrusive_ptr<builtin_function> cl;
-
-       if ( cl == NULL )
-       {
-               cl=new builtin_function(&stage_ctor, getStageInterface());
-               // replicate all interface to class, to be able to access
-               // all methods as static functions
-               attachStageInterface(*cl);
-                    
-       }
-
-       // Register _global.Stage
-       global.set_member("Stage", cl.get());
-#endif
+       global.init_member("Stage", obj.get());
 
 }
 

Index: server/asobj/System.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/System.cpp,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -b -r1.7 -r1.8
--- server/asobj/System.cpp     12 Jan 2007 10:15:13 -0000      1.7
+++ server/asobj/System.cpp     18 Jan 2007 22:53:21 -0000      1.8
@@ -73,12 +73,12 @@
        if ( proto == NULL )
        {
                proto = new as_object();
-               proto->set_member("allowDomain", &system_security_allowdomain);
+               proto->init_member("allowDomain", &system_security_allowdomain);
 
                // TODO: only available when SWF >= 7 
-               proto->set_member("allowInsecureDomain", 
&system_security_allowinsecuredomain);
+               proto->init_member("allowInsecureDomain", 
&system_security_allowinsecuredomain);
 
-               proto->set_member("loadPolicyFile", 
&system_security_loadpolicyfile);
+               proto->init_member("loadPolicyFile", 
&system_security_loadpolicyfile);
        }
        return proto.get();
 }
@@ -90,7 +90,7 @@
        if ( proto == NULL )
        {
                proto = new as_object();
-               proto->set_member("version", "Gnash-" VERSION);
+               proto->init_member("version", "Gnash-" VERSION);
        }
        return proto.get();
 }
@@ -99,10 +99,10 @@
 attachSystemInterface(as_object& proto)
 {
        // Initialize Function prototype
-       proto.set_member("security", getSystemSecurityInterface());
-       proto.set_member("capabilities", getSystemCapabilitiesInterface());
-       proto.set_member("setClipboard", &system_setclipboard);
-       proto.set_member("showSettings", &system_showsettings);
+       proto.init_member("security", getSystemSecurityInterface());
+       proto.init_member("capabilities", getSystemCapabilitiesInterface());
+       proto.init_member("setClipboard", &system_setclipboard);
+       proto.init_member("showSettings", &system_showsettings);
 }
 
 static as_object*
@@ -113,8 +113,7 @@
        {
                proto = new as_object();
                attachSystemInterface(*proto);
-               proto->set_member("constructor", &system_new); 
-               proto->set_member_flags("constructor", 1);
+               proto->init_member("constructor", &system_new); 
        }
        return proto.get();
 }
@@ -160,7 +159,7 @@
 
        static boost::intrusive_ptr<as_object> obj = new as_object();
        attachSystemInterface(*obj);
-       global.set_member("System", obj.get());
+       global.init_member("System", obj.get());
 }
 
 

Index: server/asobj/TextSnapshot.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/TextSnapshot.cpp,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- server/asobj/TextSnapshot.cpp       15 Jan 2007 17:00:14 -0000      1.4
+++ server/asobj/TextSnapshot.cpp       18 Jan 2007 22:53:22 -0000      1.5
@@ -42,14 +42,17 @@
 static void
 attachTextSnapshotInterface(as_object& o)
 {
-       o.set_member("findText", &textsnapshot_findtext);
-       o.set_member("getCount", &textsnapshot_getcount);
-       o.set_member("getSelected", &textsnapshot_getselected);
-       o.set_member("getSelectedText", &textsnapshot_getselectedtext);
-       o.set_member("getText", &textsnapshot_gettext);
-       o.set_member("hitTestTextNearPos", &textsnapshot_hittesttextnearpos);
-       o.set_member("setSelectColor", &textsnapshot_setselectcolor);
-       o.set_member("setSelected", &textsnapshot_setselected);
+       // FIXME: check name case of all methods, and only initialize
+       //        the ones expected to be found based on SWF version
+
+       o.init_member("findText", &textsnapshot_findtext);
+       o.init_member("getCount", &textsnapshot_getcount);
+       o.init_member("getSelected", &textsnapshot_getselected);
+       o.init_member("getSelectedText", &textsnapshot_getselectedtext);
+       o.init_member("getText", &textsnapshot_gettext);
+       o.init_member("hitTestTextNearPos", &textsnapshot_hittesttextnearpos);
+       o.init_member("setSelectColor", &textsnapshot_setselectcolor);
+       o.init_member("setSelected", &textsnapshot_setselected);
 }
 
 static as_object*
@@ -130,7 +133,7 @@
        }
 
        // Register _global.TextSnapshot
-       global.set_member("TextSnapshot", cl.get());
+       global.init_member("TextSnapshot", cl.get());
 
 }
 

Index: server/asobj/Video.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/Video.cpp,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- server/asobj/Video.cpp      27 Nov 2006 10:00:44 -0000      1.5
+++ server/asobj/Video.cpp      18 Jan 2007 22:53:22 -0000      1.6
@@ -36,8 +36,8 @@
 static void
 attachVideoInterface(as_object& o)
 {
-       o.set_member("attachVideo", &video_attachvideo);
-       o.set_member("clear", &video_clear);
+       o.init_member("attachVideo", &video_attachvideo);
+       o.init_member("clear", &video_clear);
 }
 
 static as_object*
@@ -100,7 +100,7 @@
        }
 
        // Register _global.Video
-       global.set_member("Video", cl.get());
+       global.init_member("Video", cl.get());
 
 }
 

Index: server/asobj/gen-asclass.sh
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/gen-asclass.sh,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -b -r1.6 -r1.7
--- server/asobj/gen-asclass.sh 25 Nov 2006 14:43:47 -0000      1.6
+++ server/asobj/gen-asclass.sh 18 Jan 2007 22:53:22 -0000      1.7
@@ -166,7 +166,7 @@
     # DO NOT CONVERT CASE, SWF7+ is case-sensitive 
     newi=`echo $i | sed -e 's/()//g'` # | tr '[A-Z]' '[a-z]'
     cat <<EOF>>${srcname}
-       o.set_member("${newi}", &${lowname}_${newi});
+       o.init_member("${newi}", &${lowname}_${newi});
 EOF
 done
 cat <<EOF>>${srcname}
@@ -239,7 +239,7 @@
        }
 
        // Register _global.${asname}
-       global.set_member("${asname}", cl.get());
+       global.init_member("${asname}", cl.get());
 
 }
 

Index: server/asobj/string.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/string.cpp,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -b -r1.12 -r1.13
--- server/asobj/string.cpp     12 Dec 2006 16:58:31 -0000      1.12
+++ server/asobj/string.cpp     18 Jan 2007 22:53:22 -0000      1.13
@@ -18,7 +18,7 @@
 //
 //
 
-/* $Id: string.cpp,v 1.12 2006/12/12 16:58:31 strk Exp $ */
+/* $Id: string.cpp,v 1.13 2007/01/18 22:53:22 strk Exp $ */
 
 // Implementation of ActionScript String class.
 
@@ -60,23 +60,23 @@
 attachStringInterface(as_object& o)
 {
        // TODO fill in the rest
-       o.set_member("concat", &string_concat);
-       o.set_member("slice", &string_slice);
-       o.set_member("split", &string_split);
-       o.set_member("lastIndexOf", &string_last_index_of);
-       o.set_member("substr", &string_sub_str);
-       o.set_member("substring", &string_sub_string);
-       o.set_member("indexOf", &string_index_of);
-       o.set_member("toString", &string_to_string);
-       o.set_member("fromCharCode", &string_from_char_code);
-       o.set_member("charAt", &string_char_at);
-       o.set_member("charCodeAt", &string_char_code_at);
-       o.set_member("toUpperCase", &string_to_upper_case);
-       o.set_member("toLowerCase", &string_to_lower_case);
+       o.init_member("concat", &string_concat);
+       o.init_member("slice", &string_slice);
+       o.init_member("split", &string_split);
+       o.init_member("lastIndexOf", &string_last_index_of);
+       o.init_member("substr", &string_sub_str);
+       o.init_member("substring", &string_sub_string);
+       o.init_member("indexOf", &string_index_of);
+       o.init_member("toString", &string_to_string);
+       o.init_member("fromCharCode", &string_from_char_code);
+       o.init_member("charAt", &string_char_at);
+       o.init_member("charCodeAt", &string_char_code_at);
+       o.init_member("toUpperCase", &string_to_upper_case);
+       o.init_member("toLowerCase", &string_to_lower_case);
        
        boost::intrusive_ptr<builtin_function> length_getter(new 
builtin_function(&string_get_length,NULL));
        boost::intrusive_ptr<builtin_function> length_setter(new 
builtin_function(&string_set_length,NULL));
-       o.add_property(std::string("length"),*length_getter,*length_setter);
+       o.init_property("length", *length_getter, *length_setter);
 
 }
 
@@ -514,7 +514,7 @@
        }
 
        // Register _global.String
-       global.set_member("String", cl.get());
+       global.init_member("String", cl.get());
 
 }
 

Index: server/asobj/xml.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/xml.cpp,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -b -r1.11 -r1.12
--- server/asobj/xml.cpp        18 Jan 2007 19:38:05 -0000      1.11
+++ server/asobj/xml.cpp        18 Jan 2007 22:53:22 -0000      1.12
@@ -14,7 +14,7 @@
 // along with this program; if not, write to the Free Software
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
-/* $Id: xml.cpp,v 1.11 2007/01/18 19:38:05 bjacques Exp $ */
+/* $Id: xml.cpp,v 1.12 2007/01/18 22:53:22 strk Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -1082,39 +1082,39 @@
 attachXMLInterface(as_object& o)
 {
        // FIXME: this doesn't appear to exist in the MM player, should it ?
-       o.set_member("loaded", &xml_loaded);
+       o.init_member("loaded", &xml_loaded);
        
-        o.set_member("addRequestHeader", &xml_addrequestheader);
-        o.set_member("appendChild", &xml_appendchild);
-        o.set_member("cloneNode", &xml_clonenode);
-        o.set_member("createElement", &xml_createelement);
-        o.set_member("createTextNode", &xml_createtextnode);
-        o.set_member("getBytesLoaded", &xml_getbytesloaded);
-        o.set_member("getBytesTotal", &xml_getbytestotal);
-        o.set_member("hasChildNodes", &xml_haschildnodes);
-        o.set_member("insertBefore", &xml_insertbefore);
-        o.set_member("load", &xml_load);
-        o.set_member("parseXML", &xml_parsexml);
-        o.set_member("removeNode", &xml_removenode);
-        o.set_member("send", &xml_send);
-        o.set_member("sendAndLoad", &xml_sendandload);
-        o.set_member("toString", &xml_tostring);
+        o.init_member("addRequestHeader", &xml_addrequestheader);
+        o.init_member("appendChild", &xml_appendchild);
+        o.init_member("cloneNode", &xml_clonenode);
+        o.init_member("createElement", &xml_createelement);
+        o.init_member("createTextNode", &xml_createtextnode);
+        o.init_member("getBytesLoaded", &xml_getbytesloaded);
+        o.init_member("getBytesTotal", &xml_getbytestotal);
+        o.init_member("hasChildNodes", &xml_haschildnodes);
+        o.init_member("insertBefore", &xml_insertbefore);
+        o.init_member("load", &xml_load);
+        o.init_member("parseXML", &xml_parsexml);
+        o.init_member("removeNode", &xml_removenode);
+        o.init_member("send", &xml_send);
+        o.init_member("sendAndLoad", &xml_sendandload);
+        o.init_member("toString", &xml_tostring);
 
        // Properties
 
        boost::intrusive_ptr<builtin_function> gettersetter;
 
        gettersetter = new builtin_function(&xml_nodename, NULL);
-       o.add_property("nodeName", *gettersetter, *gettersetter);
+       o.init_property("nodeName", *gettersetter, *gettersetter);
 
        gettersetter = new builtin_function(&xml_nodevalue, NULL);
-       o.add_property("nodeValue", *gettersetter, *gettersetter);
+       o.init_property("nodeValue", *gettersetter, *gettersetter);
 
        gettersetter = new builtin_function(&xml_firstchild, NULL);
-       o.add_property("firstChild", *gettersetter, *gettersetter);
+       o.init_property("firstChild", *gettersetter, *gettersetter);
 
        gettersetter = new builtin_function(&xml_childnodes, NULL);
-       o.add_property("childNodes", *gettersetter, *gettersetter);
+       o.init_property("childNodes", *gettersetter, *gettersetter);
 }
 
 static as_object*
@@ -1478,7 +1478,7 @@
        }
 
        // Register _global.String
-       global.set_member("XML", cl.get());
+       global.init_member("XML", cl.get());
 
 }
 

Index: server/asobj/xmlnode.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/xmlnode.cpp,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- server/asobj/xmlnode.cpp    18 Jan 2007 15:30:53 -0000      1.5
+++ server/asobj/xmlnode.cpp    18 Jan 2007 22:53:22 -0000      1.6
@@ -18,7 +18,7 @@
 //
 //
 
-/* $Id: xmlnode.cpp,v 1.5 2007/01/18 15:30:53 strk Exp $ */
+/* $Id: xmlnode.cpp,v 1.6 2007/01/18 22:53:22 strk Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -310,12 +310,12 @@
 void
 attachXMLNodeInterface(as_object& o)
 {
-    o.set_member("appendChild", &xmlnode_appendchild);
-    o.set_member("cloneNode", &xmlnode_clonenode);
-    o.set_member("hasChildNodes", &xmlnode_haschildnodes);
-    o.set_member("insertBefore", &xmlnode_insertbefore);
-    o.set_member("removeNode", &xmlnode_removenode);
-    o.set_member("toString", &xmlnode_tostring);
+    o.init_member("appendChild", &xmlnode_appendchild);
+    o.init_member("cloneNode", &xmlnode_clonenode);
+    o.init_member("hasChildNodes", &xmlnode_haschildnodes);
+    o.init_member("insertBefore", &xmlnode_insertbefore);
+    o.init_member("removeNode", &xmlnode_removenode);
+    o.init_member("toString", &xmlnode_tostring);
 
     // Properties - FIXME: use addProperty !
 
@@ -325,14 +325,14 @@
     o.add_property("nodeValue", *gettersetter, *gettersetter);
 
     gettersetter = new builtin_function(&xmlnode_nodename, NULL);
-    o.add_property("nodeName", *gettersetter, *gettersetter);
+    o.init_property("nodeName", *gettersetter, *gettersetter);
 
     gettersetter = new builtin_function(&xmlnode_nodetype, NULL);
-    o.add_property("nodeType", *gettersetter, *gettersetter);
+    o.init_property("nodeType", *gettersetter, *gettersetter);
 
     // These two return an array of objects
-    o.set_member("attributes", as_value(""));
-    o.set_member("childNodes", as_value(""));
+    o.init_member("attributes", as_value(""));
+    o.init_member("childNodes", as_value(""));
 
     /// \fn MLNode::firstChild
     /// \brief XMLNode::firstChild property
@@ -345,7 +345,7 @@
     /// manipulate child nodes; use the appendChild(), insertBefore(),
     /// and removeNode() methods to manipulate child nodes. 
     gettersetter = new builtin_function(&xmlnode_firstchild, NULL);
-    o.add_property("firstChild", *gettersetter, *gettersetter);
+    o.init_property("firstChild", *gettersetter, *gettersetter);
 
     /// \fn MLNode::lastChild
     /// \brief XMLNode::lastChild property 
@@ -357,15 +357,15 @@
     /// insertBefore(), and removeNode() methods to manipulate child
     /// nodes.
     gettersetter = new builtin_function(&xmlnode_lastchild, NULL);
-    o.add_property("lastChild", *gettersetter, *gettersetter);
+    o.init_property("lastChild", *gettersetter, *gettersetter);
 
     gettersetter = new builtin_function(&xmlnode_nextsibling, NULL);
-    o.add_property("nextSibling", *gettersetter, *gettersetter);
+    o.init_property("nextSibling", *gettersetter, *gettersetter);
 
     gettersetter = new builtin_function(&xmlnode_previoussibling, NULL);
-    o.add_property("previousSibling", *gettersetter, *gettersetter);
+    o.init_property("previousSibling", *gettersetter, *gettersetter);
 
-    o.set_member("parentNode",  as_value().set_null());
+    o.init_member("parentNode",  as_value().set_null());
 
 }
 
@@ -645,7 +645,7 @@
        }
 
        // Register _global.String
-       global.set_member("XMLNode", cl.get());
+       global.init_member("XMLNode", cl.get());
 
 }
 

Index: server/asobj/xmlsocket.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/xmlsocket.cpp,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- server/asobj/xmlsocket.cpp  9 Jan 2007 15:14:20 -0000       1.2
+++ server/asobj/xmlsocket.cpp  18 Jan 2007 22:53:22 -0000      1.3
@@ -583,10 +583,10 @@
   
   as_object*   xmlsock_obj = new xmlsocket_as_object;
   //log_msg("\tCreated New XMLSocket object at 0x%X\n", (unsigned 
int)xmlsock_obj);
-  xmlsock_obj->set_member("connect", &xmlsocket_connect);
-  xmlsock_obj->set_member("send", &xmlsocket_send);
-  xmlsock_obj->set_member("close", &xmlsocket_close);
-  xmlsock_obj->set_member("Connected", true);
+  xmlsock_obj->init_member("connect", &xmlsocket_connect);
+  xmlsock_obj->init_member("send", &xmlsocket_send);
+  xmlsock_obj->init_member("close", &xmlsocket_close);
+  xmlsock_obj->init_member("Connected", true);
   // swf_event*        ev = new swf_event;
   // m_event_handlers.push_back(ev);
   // Setup event handlers
@@ -604,12 +604,16 @@
   
   
 #if 1
+  //
   //as_c_function_ptr int_handler = (as_c_function_ptr)&timer_setinterval;
   //env->set_member("setInterval", int_handler);
+  // TODO:  check this, sounds suspicious
   fn.env->set_member("setInterval", timer_setinterval);
   
   //as_c_function_ptr clr_handler = timer_clearinterval;
+  // TODO:  check this, sounds suspicious
   fn.env->set_member("clearInterval", timer_clearinterval);
+
   //env->set_variable("setInterval", int_handler, 0);
   //xmlsock_obj->set_event_handler(event_id::TIMER,
   //       (as_c_function_ptr)&timer_expire);

Index: server/vm/ASHandlers.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/vm/ASHandlers.cpp,v
retrieving revision 1.30
retrieving revision 1.31
diff -u -b -r1.30 -r1.31
--- server/vm/ASHandlers.cpp    15 Jan 2007 14:46:24 -0000      1.30
+++ server/vm/ASHandlers.cpp    18 Jan 2007 22:53:22 -0000      1.31
@@ -16,7 +16,7 @@
 
 //
 
-/* $Id: ASHandlers.cpp,v 1.30 2007/01/15 14:46:24 strk Exp $ */
+/* $Id: ASHandlers.cpp,v 1.31 2007/01/18 22:53:22 strk Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -141,6 +141,10 @@
        {
             // Set up the prototype.
             as_value   proto;
+           // We can safaly call as_object::get_member here as member name is 
+           // a literal string in lowercase. (we should likely avoid calling
+           // get_member as a whole actually, and use a getProto() or similar
+           // method directly instead) TODO
             bool func_has_prototype = ctor_as_func->get_member("prototype", 
&proto);
             assert(func_has_prototype);
             
@@ -1097,8 +1101,11 @@
                if ( prop_number < get_property_names().size() )
                {
                        as_value val;
-                       
target->get_member(get_property_names()[prop_number].c_str(),
-                               &val);
+                       // TODO: check if get_propery_names() can return a 
std::string
+                       //       directly.
+                       std::string propname = 
get_property_names()[prop_number].c_str();
+                       //target->get_member(propname &val);
+                       thread.getObjectMember(*target, propname, val);
                        env.top(1) = val;
                }
                else
@@ -1136,10 +1143,13 @@
 //        set_property(target, prop_number, env.top(0));
         if ( prop_number < get_property_names().size() )
        {
-           target->set_member(get_property_names()[prop_number].c_str(), 
prop_val);
+           // TODO: check if get_property_names() return a std::string&
+           std::string member_name = get_property_names()[prop_number].c_str();
+           thread.setObjectMember(*target, member_name, prop_val);
        }
        else
        {
+           // Malformed SWF ? (don't think this is possible to do with 
syntactically valid ActionScript)
            log_error("invalid set_property, property number %d", prop_number);
        }
         
@@ -2293,7 +2303,8 @@
     for (int i = 0; i < array_size; i++) {
         // @@ TODO a set_member that takes an int or as_value?
         index_number.set_int(i);
-        ao->set_member(index_number.to_string(), env.pop());
+        //ao->set_member(index_number.to_string(), env.pop());
+        thread.setObjectMember(*ao, index_number.to_std_string(), env.pop());
     }
     
     env.push(result);
@@ -2329,8 +2340,9 @@
     // 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);
+       std::string member_name = env.pop().to_std_string();
+        //new_obj_ptr->set_member(member_name, member_value);
+       thread.setObjectMember(*new_obj_ptr, member_name, member_value);
     }
     
     // @@ TODO
@@ -2534,7 +2546,8 @@
         int len = target.to_tu_string_versioned(version).utf8_length();
         env.top(1).set_int(len); 
     } else {
-        if (!obj->get_member(member_name.to_tu_string(), &(env.top(1)))) {
+        if ( ! thread.getObjectMember(*obj, member_name.to_std_string(), 
env.top(1)) )
+       {
             env.top(1).set_undefined();
         }
         
@@ -2557,26 +2570,28 @@
        thread.ensureStack(3); // value, member, object
 
        as_object*      obj = env.top(2).to_object();
-
+       std::string member_name = env.top(1).to_std_string();
+       const as_value& member_value = env.top(0);
 
        if (obj)
        {
-               obj->set_member(env.top(1).to_tu_string(), env.top(0));
+               thread.setObjectMember(*obj, member_name, member_value);
                IF_VERBOSE_ACTION (
                        log_action("-- set_member %s.%s=%s",
                                env.top(2).to_tu_string().c_str(),
-                               env.top(1).to_tu_string().c_str(),
-                               env.top(0).to_tu_string().c_str());
+                               member_name.c_str(),
+                               member_value.to_string());
                );
        }
        else
        {
+               // Malformed SWF ? (don't think this is possible to do with 
ActionScript syntax)
                IF_VERBOSE_ACTION (
                        // Invalid object, can't set.
                        log_action("-- set_member %s.%s=%s on invalid object!",
                                env.top(2).to_tu_string().c_str(),
-                               env.top(1).to_tu_string().c_str(),
-                               env.top(0).to_tu_string().c_str());
+                               member_name.c_str(),
+                               member_value.to_string());
                );
        }
 
@@ -2618,7 +2633,7 @@
     //int version = env.get_version();
 
     // Get name of the method
-    const tu_string &method_name = env.top(0).to_tu_string();
+    std::string method_name = env.top(0).to_std_string();
 
     // Get an object
     as_value& obj_value = env.top(1);
@@ -2650,7 +2665,8 @@
     else
     {
         as_value method;
-        if (obj->get_member(method_name, &method))
+        //if (obj->get_member(method_name, &method))
+        if ( thread.getObjectMember(*obj, method_name, method) )
         {
           if ( ! method.is_function() ) 
           {
@@ -2712,7 +2728,9 @@
        }
 
        as_value method_val;
-       if ( ! obj->get_member(method_name.to_tu_stringi(), &method_val) )
+       std::string method_string = method_name.to_std_string();
+       //if ( ! obj->get_member(method_name.to_tu_stringi(), &method_val) )
+       if ( ! thread.getObjectMember(*obj, method_string, method_val) )
        {
                // SWF integrity check 
                log_warning(

Index: server/vm/ActionExec.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/vm/ActionExec.cpp,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -b -r1.13 -r1.14
--- server/vm/ActionExec.cpp    15 Jan 2007 16:08:02 -0000      1.13
+++ server/vm/ActionExec.cpp    18 Jan 2007 22:53:22 -0000      1.14
@@ -16,7 +16,7 @@
 
 //
 
-/* $Id: ActionExec.cpp,v 1.13 2007/01/15 16:08:02 strk Exp $ */
+/* $Id: ActionExec.cpp,v 1.14 2007/01/18 22:53:22 strk Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -354,6 +354,42 @@
 
 }
 
+void
+ActionExec::setObjectMember(as_object& obj, const std::string& var, const 
as_value& val)
+{
+       VM& vm = VM::get();
+
+       if ( vm.getSWFVersion() < 7 )
+       {
+               std::string vari = var;
+               boost::to_lower(vari, vm.getLocale());
+               obj.set_member(vari, val);
+       }
+       else
+       {
+               obj.set_member(var, val);
+       }
+
+}
+
+bool
+ActionExec::getObjectMember(as_object& obj, const std::string& var, as_value& 
val)
+{
+       VM& vm = VM::get();
+
+       if ( vm.getSWFVersion() < 7 )
+       {
+               std::string vari = var;
+               boost::to_lower(vari, vm.getLocale());
+               return obj.get_member(vari, &val);
+       }
+       else
+       {
+               return obj.get_member(var, &val);
+       }
+
+}
+
 /*private*/
 void
 ActionExec::fixStackUnderrun(size_t required)

Index: server/vm/ActionExec.h
===================================================================
RCS file: /sources/gnash/gnash/server/vm/ActionExec.h,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -b -r1.9 -r1.10
--- server/vm/ActionExec.h      15 Jan 2007 18:07:39 -0000      1.9
+++ server/vm/ActionExec.h      18 Jan 2007 22:53:22 -0000      1.10
@@ -273,6 +273,37 @@
        ///
        as_value getVariable(const std::string& name);
 
+       /// Set an object's member.
+       //
+       /// @param obj
+       ///     The object we want to set the member of.
+       ///
+       /// @param name
+       ///     Name of the variable. Supports slash and dot syntax.
+       ///     Name is converted to lowercase if SWF version is < 7.
+       ///
+       /// @param val
+       ///     The value to assign to the object's member.
+       ///
+       void setObjectMember(as_object& obj, const std::string& name, const 
as_value& val);
+
+       /// Get an object's member.
+       //
+       /// @param obj
+       ///     The object we want to set the member of.
+       ///
+       /// @param name
+       ///     Name of the variable. Supports slash and dot syntax.
+       ///     Name is converted to lowercase if SWF version is < 7.
+       ///
+       /// @param val
+       ///     The as_value to write member value into.
+       ///
+       /// @returns
+       ///     True if the member was found, false otherwise.
+       ///
+       bool getObjectMember(as_object& obj, const std::string& name, as_value& 
val);
+
        /// Execute.
        void operator() ();
 };

Index: server/vm/action.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/vm/action.cpp,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- server/vm/action.cpp        7 Dec 2006 17:22:51 -0000       1.4
+++ server/vm/action.cpp        18 Jan 2007 22:53:22 -0000      1.5
@@ -42,6 +42,7 @@
 #include "as_environment.h"
 #include "fn_call.h"
 #include "VM.h"
+#include "StringPredicates.h"
 
 #ifdef HAVE_LIBXML
 #include "xml.h"
@@ -127,7 +128,7 @@
 // Statics.
 bool   s_inited = false;
 
-void register_component(const tu_stringi& name, as_c_function_ptr handler)
+void register_component(const std::string& name, as_c_function_ptr handler)
 {
        as_object* global = VM::get().getGlobal();
        global->set_member(name, handler);
@@ -478,10 +479,11 @@
 // event_id
 //
 
-const tu_string&
+const std::string&
 event_id::get_function_name() const
 {
-    static tu_string   s_function_names[EVENT_COUNT] =
+       // TODO: use a case-insensitive matching
+       static std::string s_function_names[EVENT_COUNT] =
        {
            "INVALID",           // INVALID
            "onPress",           // PRESS
@@ -549,55 +551,67 @@
 }
 
 // Standard member lookup.
+// TODO: move to character.h ?
+// TODO: case-insensitive search ?
 as_standard_member
-get_standard_member(const tu_stringi& name)
+get_standard_member(const std::string& name)
 {
+       typedef std::map< std::string, as_standard_member>      maptype;
+
     static bool        s_inited = false;
-    static stringi_hash<as_standard_member>    s_standard_member_map;
-    if (!s_inited) {
+       static std::map< std::string, as_standard_member, StringNoCaseLessThen> 
membersMap;
+
+       if (!s_inited)
+       {
        s_inited = true;
        
-       s_standard_member_map.resize(int(AS_STANDARD_MEMBER_COUNT));
+               // worth reserving ?
+               //membersMap.resize(int(AS_STANDARD_MEMBER_COUNT));
        
-       s_standard_member_map.add("_x", M_X);
-       s_standard_member_map.add("_y", M_Y);
-       s_standard_member_map.add("_xscale", M_XSCALE);
-       s_standard_member_map.add("_yscale", M_YSCALE);
-       s_standard_member_map.add("_currentframe", M_CURRENTFRAME);
-       s_standard_member_map.add("_totalframes", M_TOTALFRAMES);
-       s_standard_member_map.add("_alpha", M_ALPHA);
-       s_standard_member_map.add("_visible", M_VISIBLE);
-       s_standard_member_map.add("_width", M_WIDTH);
-       s_standard_member_map.add("_height", M_HEIGHT);
-       s_standard_member_map.add("_rotation", M_ROTATION);
-       s_standard_member_map.add("_target", M_TARGET);
-       s_standard_member_map.add("_framesloaded", M_FRAMESLOADED);
-       s_standard_member_map.add("_name", M_NAME);
-       s_standard_member_map.add("_droptarget", M_DROPTARGET);
-       s_standard_member_map.add("_url", M_URL);
-       s_standard_member_map.add("_highquality", M_HIGHQUALITY);
-       s_standard_member_map.add("_focusrect", M_FOCUSRECT);
-       s_standard_member_map.add("_soundbuftime", M_SOUNDBUFTIME);
-       s_standard_member_map.add("_xmouse", M_XMOUSE);
-       s_standard_member_map.add("_ymouse", M_YMOUSE);
-       s_standard_member_map.add("_parent", M_PARENT);
-       s_standard_member_map.add("text", M_TEXT);
-       s_standard_member_map.add("textWidth", M_TEXTWIDTH);
-       s_standard_member_map.add("textColor", M_TEXTCOLOR);
-       s_standard_member_map.add("onLoad", M_ONLOAD);
-       s_standard_member_map.add("onRollOver", M_ONROLLOVER);
-       s_standard_member_map.add("onRollOut", M_ONROLLOUT);
+               membersMap["_x"] = M_X;
+               membersMap["_y"] = M_Y;
+               membersMap["_xscale"] = M_XSCALE;
+               membersMap["_yscale"] = M_YSCALE;
+               membersMap["_currentframe"] = M_CURRENTFRAME;
+               membersMap["_totalframes"] = M_TOTALFRAMES;
+               membersMap["_alpha"] = M_ALPHA;
+               membersMap["_visible"] = M_VISIBLE;
+               membersMap["_width"] = M_WIDTH;
+               membersMap["_height"] = M_HEIGHT;
+               membersMap["_rotation"] = M_ROTATION;
+               membersMap["_target"] = M_TARGET;
+               membersMap["_framesloaded"] = M_FRAMESLOADED;
+               membersMap["_name"] = M_NAME;
+               membersMap["_droptarget"] = M_DROPTARGET;
+               membersMap["_url"] = M_URL;
+               membersMap["_highquality"] = M_HIGHQUALITY;
+               membersMap["_focusrect"] = M_FOCUSRECT;
+               membersMap["_soundbuftime"] = M_SOUNDBUFTIME;
+               membersMap["_xmouse"] = M_XMOUSE;
+               membersMap["_ymouse"] = M_YMOUSE;
+               membersMap["_parent"] = M_PARENT;
+               membersMap["text"] = M_TEXT;
+               membersMap["textWidth"] = M_TEXTWIDTH;
+               membersMap["textColor"] = M_TEXTCOLOR;
+               membersMap["onLoad"] = M_ONLOAD;
+               membersMap["onRollOver"] = M_ONROLLOVER;
+               membersMap["onRollOut"] = M_ONROLLOUT;
+       }
+    
+       as_standard_member result;
+       maptype::const_iterator it = membersMap.find(name);
+       if ( it == membersMap.end() )
+       {
+               result = M_INVALID_MEMBER;
+       } else {
+               result = it->second;
     }
     
-    as_standard_member result = M_INVALID_MEMBER;
-    s_standard_member_map.get(name, &result);
-    
     return result;
 }
 
 
-
-}
+} // end of namespace gnash
 
 
 // Local Variables:

Index: server/vm/action.h
===================================================================
RCS file: /sources/gnash/gnash/server/vm/action.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- server/vm/action.h  24 Nov 2006 14:50:30 -0000      1.2
+++ server/vm/action.h  18 Jan 2007 22:53:22 -0000      1.3
@@ -140,7 +140,7 @@
 
        /// Return the standard enum, if the arg names a standard member.
        /// Returns M_INVALID_MEMBER if there's no match.
-       as_standard_member      get_standard_member(const tu_stringi& name);
+       as_standard_member      get_standard_member(const std::string& name);
 
        void attach_extern_movie(const char* c_url, const sprite_instance* 
target, const sprite_instance* root_movie);
 

Index: testsuite/actionscript.all/XML.as
===================================================================
RCS file: /sources/gnash/gnash/testsuite/actionscript.all/XML.as,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -b -r1.15 -r1.16
--- testsuite/actionscript.all/XML.as   18 Jan 2007 16:11:27 -0000      1.15
+++ testsuite/actionscript.all/XML.as   18 Jan 2007 22:53:22 -0000      1.16
@@ -22,7 +22,7 @@
 // compile this test case with Ming makeswf, and then
 // execute it like this gnash -1 -r 0 -v out.swf
 
-rcsid="$Id: XML.as,v 1.15 2007/01/18 16:11:27 strk Exp $";
+rcsid="$Id: XML.as,v 1.16 2007/01/18 22:53:22 strk Exp $";
 
 #include "dejagnu.as"
 #include "utils.as"
@@ -201,6 +201,7 @@
 };
 check(XML);
 
+check_equals( typeof(tmp.parseXML), 'function');
 // parseXML doesn't return anything
 tmp.parseXML(xml_in);
 

Index: testsuite/server/GetterSetterTest.cpp
===================================================================
RCS file: /sources/gnash/gnash/testsuite/server/GetterSetterTest.cpp,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- testsuite/server/GetterSetterTest.cpp       6 Dec 2006 10:24:55 -0000       
1.5
+++ testsuite/server/GetterSetterTest.cpp       18 Jan 2007 22:53:22 -0000      
1.6
@@ -52,7 +52,7 @@
        as_object* o = fn.this_ptr;
        assert(fn.nargs == 1);
        as_value& val = fn.arg(0);
-       o->set_member(val.to_string(), val);
+       o->set_member(val.to_std_string(), val);
 }
 
 struct test_object: public as_object {
@@ -67,7 +67,7 @@
        const string& getText() const { return textval; }
 
        const char* get_text_value() const { return textval.c_str(); }
-       void set_member(const tu_stringi& , const as_value& val )
+       void set_member(const std::string& , const as_value& val )
        {
                textval = val.to_string();
        }




reply via email to

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