gnash-commit
[Top][All Lists]
Advanced

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

[Gnash-commit] gnash ChangeLog libbase/string_table.cpp libbas...


From: Chad Musick
Subject: [Gnash-commit] gnash ChangeLog libbase/string_table.cpp libbas...
Date: Wed, 19 Sep 2007 14:20:53 +0000

CVSROOT:        /sources/gnash
Module name:    gnash
Changes by:     Chad Musick <cmusick>   07/09/19 14:20:52

Modified files:
        .              : ChangeLog 
        libbase        : string_table.cpp string_table.h 
        server         : PropertyList.cpp array.cpp as_environment.cpp 
                         as_function.cpp as_object.cpp as_object.h 
                         as_value.cpp character.cpp 
                         edit_text_character.cpp impl.cpp movie_root.cpp 
                         sprite_instance.cpp swf_function.cpp 
                         textformat.cpp timers.cpp 
        server/asobj   : AsBroadcaster.cpp ContextMenu.cpp LoadVars.cpp 
                         MovieClipLoader.cpp NetStream.cpp Object.cpp 
                         Stage.cpp prophelper.h xml.cpp xmlsocket.cpp 
        server/vm      : ASHandlers.cpp ActionExec.cpp VM.cpp VM.h 
                         action.cpp action.h 
        testsuite/misc-ming.all: DefineEditTextVariableNameTest2.c 
                                 KeyTest-Runner.cpp Makefile.am 
                                 attachMovieTestRunner.cpp 
                                 intervalTestRunner.cpp 
                                 key_event_test2runner.cpp 
                                 key_event_test3runner.cpp 
                                 key_event_test5runner.cpp 
                                 key_event_testrunner.cpp 
        testsuite/movies.all: Makefile.am 
                              gravity_embedded-TestRunner.cpp 
        testsuite/server: GetterSetterTest.cpp PropertyListTest.cpp 

Log message:
        Converted most uses of property strings to a use of enums by adding a 
preloaded
        set of values to the string table, with fixed ids.  Removed special 
property
        handling, since any property can be an enum by adding it to the preload 
table.
        
        Changed the string_table to be used as an instance, rather than 
statically --
        this lets a separate string_table be used for AS3 parsing which can be 
discarded
        when the script is done, keeps open the possibility for multiple Vm's.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.4352&r2=1.4353
http://cvs.savannah.gnu.org/viewcvs/gnash/libbase/string_table.cpp?cvsroot=gnash&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/gnash/libbase/string_table.h?cvsroot=gnash&r1=1.2&r2=1.3
http://cvs.savannah.gnu.org/viewcvs/gnash/server/PropertyList.cpp?cvsroot=gnash&r1=1.18&r2=1.19
http://cvs.savannah.gnu.org/viewcvs/gnash/server/array.cpp?cvsroot=gnash&r1=1.79&r2=1.80
http://cvs.savannah.gnu.org/viewcvs/gnash/server/as_environment.cpp?cvsroot=gnash&r1=1.88&r2=1.89
http://cvs.savannah.gnu.org/viewcvs/gnash/server/as_function.cpp?cvsroot=gnash&r1=1.40&r2=1.41
http://cvs.savannah.gnu.org/viewcvs/gnash/server/as_object.cpp?cvsroot=gnash&r1=1.62&r2=1.63
http://cvs.savannah.gnu.org/viewcvs/gnash/server/as_object.h?cvsroot=gnash&r1=1.69&r2=1.70
http://cvs.savannah.gnu.org/viewcvs/gnash/server/as_value.cpp?cvsroot=gnash&r1=1.74&r2=1.75
http://cvs.savannah.gnu.org/viewcvs/gnash/server/character.cpp?cvsroot=gnash&r1=1.55&r2=1.56
http://cvs.savannah.gnu.org/viewcvs/gnash/server/edit_text_character.cpp?cvsroot=gnash&r1=1.116&r2=1.117
http://cvs.savannah.gnu.org/viewcvs/gnash/server/impl.cpp?cvsroot=gnash&r1=1.119&r2=1.120
http://cvs.savannah.gnu.org/viewcvs/gnash/server/movie_root.cpp?cvsroot=gnash&r1=1.92&r2=1.93
http://cvs.savannah.gnu.org/viewcvs/gnash/server/sprite_instance.cpp?cvsroot=gnash&r1=1.346&r2=1.347
http://cvs.savannah.gnu.org/viewcvs/gnash/server/swf_function.cpp?cvsroot=gnash&r1=1.34&r2=1.35
http://cvs.savannah.gnu.org/viewcvs/gnash/server/textformat.cpp?cvsroot=gnash&r1=1.28&r2=1.29
http://cvs.savannah.gnu.org/viewcvs/gnash/server/timers.cpp?cvsroot=gnash&r1=1.37&r2=1.38
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/AsBroadcaster.cpp?cvsroot=gnash&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/ContextMenu.cpp?cvsroot=gnash&r1=1.16&r2=1.17
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/LoadVars.cpp?cvsroot=gnash&r1=1.29&r2=1.30
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/MovieClipLoader.cpp?cvsroot=gnash&r1=1.30&r2=1.31
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/NetStream.cpp?cvsroot=gnash&r1=1.72&r2=1.73
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/Object.cpp?cvsroot=gnash&r1=1.30&r2=1.31
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/Stage.cpp?cvsroot=gnash&r1=1.21&r2=1.22
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/prophelper.h?cvsroot=gnash&r1=1.3&r2=1.4
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/xml.cpp?cvsroot=gnash&r1=1.45&r2=1.46
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/xmlsocket.cpp?cvsroot=gnash&r1=1.33&r2=1.34
http://cvs.savannah.gnu.org/viewcvs/gnash/server/vm/ASHandlers.cpp?cvsroot=gnash&r1=1.134&r2=1.135
http://cvs.savannah.gnu.org/viewcvs/gnash/server/vm/ActionExec.cpp?cvsroot=gnash&r1=1.45&r2=1.46
http://cvs.savannah.gnu.org/viewcvs/gnash/server/vm/VM.cpp?cvsroot=gnash&r1=1.18&r2=1.19
http://cvs.savannah.gnu.org/viewcvs/gnash/server/vm/VM.h?cvsroot=gnash&r1=1.15&r2=1.16
http://cvs.savannah.gnu.org/viewcvs/gnash/server/vm/action.cpp?cvsroot=gnash&r1=1.26&r2=1.27
http://cvs.savannah.gnu.org/viewcvs/gnash/server/vm/action.h?cvsroot=gnash&r1=1.11&r2=1.12
http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/misc-ming.all/DefineEditTextVariableNameTest2.c?cvsroot=gnash&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/misc-ming.all/KeyTest-Runner.cpp?cvsroot=gnash&r1=1.5&r2=1.6
http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/misc-ming.all/Makefile.am?cvsroot=gnash&r1=1.153&r2=1.154
http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/misc-ming.all/attachMovieTestRunner.cpp?cvsroot=gnash&r1=1.13&r2=1.14
http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/misc-ming.all/intervalTestRunner.cpp?cvsroot=gnash&r1=1.7&r2=1.8
http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/misc-ming.all/key_event_test2runner.cpp?cvsroot=gnash&r1=1.6&r2=1.7
http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/misc-ming.all/key_event_test3runner.cpp?cvsroot=gnash&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/misc-ming.all/key_event_test5runner.cpp?cvsroot=gnash&r1=1.3&r2=1.4
http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/misc-ming.all/key_event_testrunner.cpp?cvsroot=gnash&r1=1.7&r2=1.8
http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/movies.all/Makefile.am?cvsroot=gnash&r1=1.8&r2=1.9
http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/movies.all/gravity_embedded-TestRunner.cpp?cvsroot=gnash&r1=1.8&r2=1.9
http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/server/GetterSetterTest.cpp?cvsroot=gnash&r1=1.16&r2=1.17
http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/server/PropertyListTest.cpp?cvsroot=gnash&r1=1.18&r2=1.19

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.4352
retrieving revision 1.4353
diff -u -b -r1.4352 -r1.4353
--- ChangeLog   19 Sep 2007 10:54:09 -0000      1.4352
+++ ChangeLog   19 Sep 2007 14:20:47 -0000      1.4353
@@ -1,3 +1,32 @@
+2007-09-19 Chad Musick <address@hidden>
+
+       * libbase/string_table.cpp,.h: Make member functions non-static and
+         add a facility to pre-load some strings.
+       * server/PropertyList.cpp array.cpp as_environment.cpp as_function.cpp
+         as_object.cpp as_object.h as_value.cpp character.cpp
+         edit_text_character.cpp impl.cpp movie_root.cpp sprite_instance.cpp
+         swf_function.cpp textformat.cpp timers.cpp: Convert string table usage
+         to enum + instance use.
+       * server/asobj/AsBroadcaster.cpp ContextMenu.cpp LoadVars.cpp
+         MovieClipLoader.cpp NetStream.cpp Object.cpp Stage.cpp prophelper.h
+         xml.cpp xmlsocket.cpp: Convert string table usage to enum + instance
+       * server/vm/ASHandlers.cpp ActionExec.cpp: Convert string table usage
+       * server/vm/VM.cpp VM.h: Add pre-load of common property names, convert
+         string table usage, add string table member.
+       * server/vm/action.cpp action.h: Remove enumeration of standard 
properties
+         with the special handler, use string table enumeration instead. 
Unifies
+         handling.
+       * testsuite/misc-ming.all/DefineEditTextVariableNameTest2.c: Success
+       * testsuite/misc-ming.all/KeyTest-Runner.cpp Makefile.am
+         attachMovieTestRunner.cpp intervalTestRunner.cpp
+         key_event_test2runner.cpp key_event_test3runner.cpp
+         key_event_test5runner.cpp key_event_testrunner.cpp: Convert string 
table
+         usage
+       * testsuite/movies.all/Makefile.am gravity_embedded-TestRunner.cpp:
+         Convert string table usage
+       * testsuite/server/GetterSetterTest.cpp PropertyListTest.cpp: Convert
+         string table usage
+
 2007-09-19 Sandro Santilli <address@hidden>
 
        * server/edit_text_character.cpp (set_variable_name): reinitialize

Index: libbase/string_table.cpp
===================================================================
RCS file: /sources/gnash/gnash/libbase/string_table.cpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- libbase/string_table.cpp    16 Sep 2007 16:48:12 -0000      1.1
+++ libbase/string_table.cpp    19 Sep 2007 14:20:48 -0000      1.2
@@ -17,13 +17,10 @@
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
 #include "string_table.h"
+#include <boost/algorithm/string/case_conv.hpp>
 
 using namespace gnash;
 
-string_table::table string_table::mTable;
-// By starting at 0, this can be the 'unknown' value.
-string_table::key string_table::mHighestKey = 0;
-boost::mutex string_table::mLock;
 std::string string_table::mEmpty = "";
 
 string_table::key
@@ -35,15 +32,19 @@
        {
                if (insert_unfound)
                {
+                       svt theSvt;
+
                        // First we lock.
-                       //boost::mutex::scoped_lock aLock(mLock);
+                       boost::mutex::scoped_lock aLock(mLock);
                        // Then we see if someone else managed to sneak past us.
                        i = mTable.get<0>().find(to_find);
                        // If they did, use that value.
                        if (i != mTable.end())
                                return i->mId;
                        // Otherwise, insert it.
-                       return mTable.insert(svt(to_find, 
++mHighestKey)).first->mId;
+                       theSvt.mValue = to_find;
+                       theSvt.mId = ++mHighestKey;
+                       return mTable.insert(theSvt).first->mId;
                }
                else
                        return 0;
@@ -56,13 +57,37 @@
 string_table::insert(const std::string& to_insert)
 {
        boost::mutex::scoped_lock aLock(mLock);
+       svt theSvt;
+       theSvt.mValue = to_insert;
+       theSvt.mId = ++mHighestKey;
 
-       return mTable.insert(svt(to_insert, ++mHighestKey)).first->mId;
+       return mTable.insert(theSvt).first->mId;
+}
+
+void
+string_table::insert_group(svt* pList, std::size_t size)
+{
+       boost::mutex::scoped_lock aLock(mLock);
+
+       for (std::size_t i = 0; i < size; ++i)
+       {
+               if (mSetToLower)
+                       boost::to_lower(pList[i].mValue);
+               // The keys don't have to be consecutive, so any time we find a 
key
+               // that is too big, jump a few keys to avoid rewriting this on 
every item.
+               if (pList[i].mId > mHighestKey)
+                       mHighestKey = pList[i].mId + 256;
+               mTable.insert(pList[i]);
+       }
+       mSetToLower = false;
 }
 
 string_table::key
 string_table::already_locked_insert(const std::string& to_insert, 
boost::mutex&)
 {
-       return mTable.insert(svt(to_insert, ++mHighestKey)).first->mId;
+       svt theSvt;
+       theSvt.mValue = to_insert;
+       theSvt.mId = ++mHighestKey;
+       return mTable.insert(theSvt).first->mId;
 }
 

Index: libbase/string_table.h
===================================================================
RCS file: /sources/gnash/gnash/libbase/string_table.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- libbase/string_table.h      17 Sep 2007 12:41:22 -0000      1.2
+++ libbase/string_table.h      19 Sep 2007 14:20:48 -0000      1.3
@@ -19,7 +19,9 @@
 #ifndef GNASH_STRING_TABLE_H
 #define GNASH_STRING_TABLE_H
 
-// Thread Status: SAFE
+// Thread Status: SAFE, except for group functions.
+// The group functions may have strange behavior when trying to automatically
+// lowercase the additions.
 
 #include <boost/multi_index_container.hpp>
 #include <boost/multi_index/hashed_index.hpp>
@@ -38,13 +40,12 @@
 // that a string table could give significant memory savings.
 class string_table
 {
-private:
+public:
        // A little helper for indexing.
        struct svt
        {
                std::string mValue;
                std::size_t mId;
-               svt(const std::string& a, std::size_t b) : mValue(a), mId(b) 
{/**/}
         };
 
 public:
@@ -60,28 +61,47 @@
 
        // Find a string. If insert_unfound is true, the string will
        // be inserted if the value is not found in the table already.
-       static key find(const std::string& to_find, bool insert_unfound = true);
+       key find(const std::string& to_find, bool insert_unfound = true);
 
        // Find a string by its key.
-       static const std::string& value(key to_find)
-       { table::nth_index<1>::type::iterator r = mTable.get<1>().find(to_find);
-               return (r == mTable.get<1>().end()) ? mEmpty : r->mValue; }
+       const std::string& value(key to_find)
+       { 
+               if (mTable.empty())
+                       return mEmpty;
+               table::nth_index<1>::type::iterator r = 
mTable.get<1>().find(to_find);
+               return (r == mTable.get<1>().end()) ? mEmpty : r->mValue;
+       }
 
        // Insert a string known to not be in the table. Return the new
        // index.
-       static key insert(const std::string& to_insert);
+       key insert(const std::string& to_insert);
+
+       // Insert a group of strings with their ids preset. This allows
+       // for switches and enums and such, but be careful you don't set two
+       // strings with the same id, as this does not check for such 
occurrences.
+       void insert_group(svt* pList, std::size_t size);
+
+       void lower_next_group() { mSetToLower = true; }
 
        // Insert a string when you will handle the locking yourself.
        // Use 'lock_mutex' to obtain the correct mutex to use for this.
-       static key already_locked_insert(const std::string& to_insert, 
boost::mutex& lock);
+       key already_locked_insert(const std::string& to_insert, boost::mutex& 
lock);
+
+       boost::mutex& lock_mutex() { return mLock; }
 
-       static boost::mutex& lock_mutex() { return mLock; }
+       string_table() :
+               mTable(),
+               mLock(),
+               mHighestKey(0),
+               mSetToLower(false)
+       {/**/}
 
 private:
-       static table mTable;
-       static std::string mEmpty;
-       static boost::mutex mLock;
-       static key mHighestKey;
+       table mTable;
+       static std::string mEmpty; // The empty string, universally.
+       boost::mutex mLock;
+       key mHighestKey;
+       bool mSetToLower; // If true, affects the next group addition.
 };
 
 }; /* namespace gnash */

Index: server/PropertyList.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/PropertyList.cpp,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -b -r1.18 -r1.19
--- server/PropertyList.cpp     16 Sep 2007 16:48:13 -0000      1.18
+++ server/PropertyList.cpp     19 Sep 2007 14:20:48 -0000      1.19
@@ -30,6 +30,7 @@
 #include "as_function.h"
 #include "as_environment.h" // for enumerateKeys
 #include "as_value.h" // for enumerateValues
+#include "VM.h" // For string_table
 
 #include <utility> // for std::make_pair
 
@@ -87,7 +88,7 @@
                // create a new member
                SimpleProperty* prop = new SimpleProperty(val);
 #ifdef DEBUG_PROPERTY_ALLOC
-               log_debug("SimpleProperty %s = %p", 
string_table::value(key).c_str(), (void*)prop);
+               log_debug("SimpleProperty %s = %p", 
VM::get().getStringTable().value(key).c_str(), (void*)prop);
 #endif // DEBUG_PROPERTY_ALLOC
                _props[key] = prop;
                return true;
@@ -98,7 +99,7 @@
        if ( prop->isReadOnly() )
        {
                log_error(_("Property %s is read-only, not setting it to %s"), 
-                       string_table::value(key).c_str(), 
val.to_string().c_str());
+                       VM::get().getStringTable().value(key).c_str(), 
val.to_string().c_str());
                return false;
        }
 
@@ -187,26 +188,28 @@
 void
 PropertyList::enumerateKeys(as_environment& env) const
 {
+       string_table& st = VM::get().getStringTable();
        for ( const_iterator i=begin(), ie=end(); i != ie; ++i)
        {
                const Property* prop = i->second;
 
                if ( prop->getFlags().get_dont_enum() ) continue;
 
-               env.push(as_value(string_table::value(i->first).c_str()));
+               env.push(as_value(st.value(i->first).c_str()));
        }
 }
 
 void
 PropertyList::enumerateKeyValue(as_object& this_ptr, std::map<std::string, 
std::string>& to) 
 {
+       string_table& st = VM::get().getStringTable();
        for ( const_iterator i=begin(), ie=end(); i != ie; ++i)
        {
                const Property* prop = i->second;
 
                if ( prop->getFlags().get_dont_enum() ) continue;
 
-               to.insert(make_pair(string_table::value(i->first),
+               to.insert(make_pair(st.value(i->first),
                                prop->getValue(this_ptr).to_string()));
        }
 }
@@ -214,9 +217,10 @@
 void
 PropertyList::dump(as_object& this_ptr)
 {
+       string_table& st = VM::get().getStringTable();
        for ( const_iterator it=begin(), itEnd=end(); it != itEnd; ++it )
        {
-               log_msg("  %s: %s", string_table::value(it->first).c_str(),
+               log_msg("  %s: %s", st.value(it->first).c_str(),
                        it->second->getValue(this_ptr).to_string().c_str());
        }
 }
@@ -252,7 +256,7 @@
 
        GetterSetterProperty* prop = new 
GetterSetterProperty(GetterSetter(getter, setter));
 #ifdef DEBUG_PROPERTY_ALLOC
-       log_debug("GetterSetterProperty %s = %p", 
string_table::value(key).c_str(), (void*)prop);
+       log_debug("GetterSetterProperty %s = %p", 
V::get().getStringTable().value(key).c_str(), (void*)prop);
 #endif // DEBUG_PROPERTY_ALLOC
        _props[key] = prop;
        return true;

Index: server/array.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/array.cpp,v
retrieving revision 1.79
retrieving revision 1.80
diff -u -b -r1.79 -r1.80
--- server/array.cpp    18 Sep 2007 07:35:02 -0000      1.79
+++ server/array.cpp    19 Sep 2007 14:20:48 -0000      1.80
@@ -389,11 +389,12 @@
        bool operator() (const as_value& a, const as_value& b)
        {
                as_value av, bv;
+               string_table& st = VM::get().getStringTable();
                boost::intrusive_ptr<as_object> ao = a.to_object();
                boost::intrusive_ptr<as_object> bo = b.to_object();
                
-               ao->get_member(string_table::find(_prop), &av);
-               bo->get_member(string_table::find(_prop), &bv);
+               ao->get_member(st.find(_prop), &av);
+               bo->get_member(st.find(_prop), &bv);
                return _comp(av, bv);
        }
 };
@@ -418,14 +419,15 @@
        {
                std::deque<as_cmp_fn>::iterator cmp = _cmps.begin();
                std::deque<std::string>::iterator pit;
+               string_table& st = VM::get().getStringTable();
                
                for (pit = _prps.begin(); pit != _prps.end(); ++pit, ++cmp)
                {
                        as_value av, bv;
                        boost::intrusive_ptr<as_object> ao = a.to_object();
                        boost::intrusive_ptr<as_object> bo = b.to_object();
-                       ao->get_member(string_table::find(*pit), &av);
-                       bo->get_member(string_table::find(*pit), &bv);
+                       ao->get_member(st.find(*pit), &av);
+                       bo->get_member(st.find(*pit), &bv);
 
                        if ( (*cmp)(av, bv) ) return true;
                        if ( (*cmp)(bv, av) ) return false;
@@ -451,14 +453,15 @@
        {
                std::deque<as_cmp_fn>::iterator cmp = _cmps.begin();
                std::deque<std::string>::iterator pit;
+               string_table& st = VM::get().getStringTable();
                
                for (pit = _prps.begin(); pit != _prps.end(); ++pit, ++cmp)
                {
                        as_value av, bv;
                        boost::intrusive_ptr<as_object> ao = a.to_object();
                        boost::intrusive_ptr<as_object> bo = b.to_object();
-                       ao->get_member(string_table::find(*pit), &av);
-                       bo->get_member(string_table::find(*pit), &bv);
+                       ao->get_member(st.find(*pit), &av);
+                       bo->get_member(st.find(*pit), &bv);
 
                        if ( !(*cmp)(av, bv) ) return false;
                }
@@ -562,7 +565,7 @@
 int
 as_array_object::index_requested(string_table::key name)
 {
-       string name_str = string_table::value(name);
+       string name_str = VM::get().getStringTable().value(name);
 
        as_value temp;
        temp.set_string(name_str);
@@ -1375,12 +1378,13 @@
                as_value index_number, undef_value;
                int sv = VM::get().getSWFVersion();
                as_environment* env = &(fn.env());
+               string_table& st = VM::get().getStringTable();
 
                undef_value.set_undefined();
                for (int i = 0; i < int(fn.arg(0).to_number()); i++)
                {
                        index_number.set_int(i);
-                       
ao->set_member(string_table::find(index_number.to_string_versioned(sv, env)), 
undef_value);
+                       
ao->set_member(st.find(index_number.to_string_versioned(sv, env)), undef_value);
                }
        }
        else

Index: server/as_environment.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/as_environment.cpp,v
retrieving revision 1.88
retrieving revision 1.89
diff -u -b -r1.88 -r1.89
--- server/as_environment.cpp   16 Sep 2007 16:48:13 -0000      1.88
+++ server/as_environment.cpp   19 Sep 2007 14:20:48 -0000      1.89
@@ -17,7 +17,7 @@
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 //
 
-/* $Id: as_environment.cpp,v 1.88 2007/09/16 16:48:13 cmusick Exp $ */
+/* $Id: as_environment.cpp,v 1.89 2007/09/19 14:20:48 cmusick Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -62,7 +62,7 @@
 
        if (target) {
            as_value    val;
-           target->get_member(string_table::find(var), &val);
+           target->get_member(VM::get().getStringTable().find(var), &val);
            if ( retTarget ) *retTarget = target;
            return val;
        } else {
@@ -111,7 +111,7 @@
     for (size_t i = scopeStack.size(); i > 0; --i) {
         // const_cast needed due to non-const as_object::get_member 
        as_object* obj = const_cast<as_object*>(scopeStack[i-1].get());
-       if (obj && obj->get_member(string_table::find(varname), &val)) {
+       if (obj && obj->get_member(VM::get().getStringTable().find(varname), 
&val)) {
            // Found the var in this context.
            if ( retTarget ) *retTarget = obj;
            return val;
@@ -127,7 +127,7 @@
 
 
     // Check target members.
-    if (m_target->get_member(string_table::find(varname), &val)) {
+    if (m_target->get_member(VM::get().getStringTable().find(varname), &val)) {
        if ( retTarget ) *retTarget = m_target;
        return val;
     }
@@ -162,7 +162,7 @@
        return as_value(global);
     }
 
-    if (global->get_member(string_table::find(varname), &val))
+    if (global->get_member(vm.getStringTable().find(varname), &val))
     {
        if ( retTarget ) *retTarget = global;
        return val;
@@ -188,6 +188,7 @@
        assert(strchr(varname.c_str(), '/') == NULL);
        assert(strchr(varname.c_str(), '.') == NULL);
 
+       string_table::key varkey = VM::get().getStringTable().find(varname);
        as_value        val;
 
        // Check the with-stack.
@@ -197,7 +198,7 @@
                as_object* obj = const_cast<as_object*>(scopeStack[i-1].get());
                if (obj)
                {
-                       std::pair<bool,bool> ret = 
obj->delProperty(string_table::find(varname));
+                       std::pair<bool,bool> ret = obj->delProperty(varkey);
                        if (ret.first)
                        {
                            return ret.second;
@@ -213,7 +214,7 @@
 
 
        // Try target
-       std::pair<bool,bool> ret = 
m_target->delProperty(string_table::find(varname));
+       std::pair<bool,bool> ret = m_target->delProperty(varkey);
        if ( ret.first )
        {
                return ret.second;
@@ -222,7 +223,7 @@
        // TODO: try 'this' ? Add a testcase for it !
 
        // Try _global 
-       return 
VM::get().getGlobal()->delProperty(string_table::find(varname)).second;
+       return VM::get().getGlobal()->delProperty(varkey).second;
 }
 
 // varname must be a plain variable name; no path parsing.
@@ -257,7 +258,7 @@
         target = is_slash_based ? find_object_slashsyntax(path) : 
find_object_dotsyntax(path); 
        if (target)
        {
-           target->set_member(string_table::find(var), val);
+           target->set_member(VM::get().getStringTable().find(var), val);
        }
        else
        {
@@ -288,6 +289,8 @@
     const ScopeStack& scopeStack)
 {
 
+       string_table::key varkey = VM::get().getStringTable().find(varname);
+
        // Check locals for setting them
        // TODO: check if local variable takes precedence over 'with' scope 
when setting
        if ( setLocal(varname, val) )
@@ -301,15 +304,15 @@
                // const_cast needed due to non-const as_object::get_member 
                as_object* obj = const_cast<as_object*>(scopeStack[i-1].get());
                as_value        dummy;
-               if (obj && obj->get_member(string_table::find(varname), 
&dummy)) {
+               if (obj && obj->get_member(varkey, &dummy)) {
                    // This object has the member; so set it here.
-                   obj->set_member(string_table::find(varname), val);
+                   obj->set_member(varkey, val);
                    return;
                }
        }
     
        assert(m_target);
-       m_target->set_member(string_table::find(varname), val);
+       m_target->set_member(varkey, val);
 }
 
 void
@@ -329,6 +332,7 @@
        // stack ?
        assert(_localFrames.size());
 
+       string_table::key varkey = VM::get().getStringTable().find(varname);
        // Is it in the current frame already?
        if ( setLocal(varname, val) )
        {
@@ -341,7 +345,7 @@
                assert(varname.length() > 0);   // null varnames are invalid!
                LocalVars& locals = _localFrames.back().locals;
                //locals.push_back(as_environment::frame_slot(varname, val));
-               locals->set_member(string_table::find(varname), val);
+               locals->set_member(varkey, val);
        }
 }
        
@@ -357,7 +361,7 @@
                assert(varname.length() > 0);   // null varnames are invalid!
                LocalVars& locals = _localFrames.back().locals;
                //locals.push_back(as_environment::frame_slot(varname, 
as_value()));
-               locals->set_member(string_table::find(varname), as_value());
+               locals->set_member(VM::get().getStringTable().find(varname), 
as_value());
        }
 }
        
@@ -436,7 +440,7 @@
         as_object* target_ptr = is_slash_based ? find_object_slashsyntax(path) 
: find_object_dotsyntax(path); 
        if ( ! target_ptr ) return false;
 
-       target_ptr->get_member(string_table::find(var), &val);
+       target_ptr->get_member(VM::get().getStringTable().find(var), &val);
        *target = target_ptr;
        return true;
 }
@@ -662,8 +666,10 @@
        log_msg(_("Invoking get_member(%s) on object %p"), subpart.c_str(), 
(void *)env);
 #endif
        as_value tmp;
+       string_table::key subpartkey = VM::get().getStringTable().find(subpart);
+
        // TODO: make sure sprite_instances know about ".."
-       if (!env->get_member(string_table::find(subpart), &tmp) )
+       if (!env->get_member(subpartkey, &tmp) )
        {
                // Try this and _global, but only at first iteration...
 
@@ -680,7 +686,7 @@
                {
                        tmp.set_as_object(m_target);
                }
-               else if ( ! 
VM::get().getGlobal()->get_member(string_table::find(subpart), &tmp) )
+               else if ( ! VM::get().getGlobal()->get_member(subpartkey, &tmp) 
)
                {
                        IF_VERBOSE_ASCODING_ERRORS(
                        log_aserror(_("Element '%s' of variable '%s' not found 
in object %p nor in _global (dotsyntax)"),
@@ -814,8 +820,9 @@
                log_msg(_("Invoking get_member(%s) on object %p"), 
subpart.c_str(), (void *)env);
 #endif
                as_value tmp;
+               string_table::key subpartkey = 
VM::get().getStringTable().find(subpart);
                // TODO: make sure sprite_instances know about ".."
-               if (!env->get_member(string_table::find(subpart), &tmp) )
+               if (!env->get_member(subpartkey, &tmp) )
                {
                        // Try this and _global, but only at first iteration...
 
@@ -833,7 +840,7 @@
                                tmp.set_as_object(m_target);
                        }
 
-                       else if 
(!VM::get().getGlobal()->get_member(string_table::find(subpart), &tmp) )
+                       else if (!VM::get().getGlobal()->get_member(subpartkey, 
&tmp) )
                        {
                                IF_VERBOSE_ASCODING_ERRORS(
                                log_aserror(_("Element '%s' of variable '%s' 
not found in object %p nor in _global (slashsyntax)"),
@@ -966,14 +973,14 @@
 bool
 as_environment::findLocal(LocalVars& locals, const std::string& name, 
as_value& ret)
 {
-       return locals->get_member(string_table::find(name), &ret);
+       return locals->get_member(VM::get().getStringTable().find(name), &ret);
 }
 
 /* static private */
 bool
 as_environment::delLocal(LocalVars& locals, const std::string& varname)
 {
-       return locals->delProperty(string_table::find(varname)).second;
+       return 
locals->delProperty(VM::get().getStringTable().find(varname)).second;
 }
 
 /* private */
@@ -997,7 +1004,7 @@
 as_environment::setLocal(LocalVars& locals,
                const std::string& varname, const as_value& val)
 {
-       Property* prop = locals->getOwnProperty(string_table::find(varname));
+       Property* prop = 
locals->getOwnProperty(VM::get().getStringTable().find(varname));
        if ( ! prop ) return false;
        prop->setValue(*locals, val);
        return true;
@@ -1043,7 +1050,7 @@
        assert(_localFrames.size());
        LocalVars& locals = _localFrames.back().locals;
        //locals.push_back(frame_slot(varname, val));
-       locals->set_member(string_table::find(varname), val);
+       locals->set_member(VM::get().getStringTable().find(varname), val);
 }
 
 as_environment::CallFrame::CallFrame(as_function* funcPtr)

Index: server/as_function.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/as_function.cpp,v
retrieving revision 1.40
retrieving revision 1.41
diff -u -b -r1.40 -r1.41
--- server/as_function.cpp      16 Sep 2007 16:48:13 -0000      1.40
+++ server/as_function.cpp      19 Sep 2007 14:20:48 -0000      1.41
@@ -140,7 +140,7 @@
        //               this function should likely return the *new*
        //               prototype, not the old !!
        as_value proto;
-       get_member(string_table::find("prototype"), &proto);
+       get_member(as_object::PROP_PROTOTYPE, &proto);
        return proto.to_object();
 }
 
@@ -354,7 +354,7 @@
                // 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 = 
get_member(string_table::find("prototype"), &proto);
+               bool func_has_prototype = get_member(as_object::PROP_PROTOTYPE, 
&proto);
                assert(func_has_prototype);
 
                IF_VERBOSE_ACTION (

Index: server/as_object.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/as_object.cpp,v
retrieving revision 1.62
retrieving revision 1.63
diff -u -b -r1.62 -r1.63
--- server/as_object.cpp        16 Sep 2007 16:48:13 -0000      1.62
+++ server/as_object.cpp        19 Sep 2007 14:20:49 -0000      1.63
@@ -64,7 +64,7 @@
        ///
        void operator() (string_table::key name, const as_value& val)
        {
-               if (name == string_table::find("__proto__")) return;
+               if (name == as_object::PROP_uuPROTOuu) return;
                //log_msg(_("Setting member '%s' to value '%s'"), name.c_str(), 
val.to_debug_string().c_str());
                _tgt.set_member(name, val);
        }
@@ -79,15 +79,16 @@
 as_object::add_property(const std::string& key, as_function& getter,
                as_function& setter)
 {
+       string_table &stringTable = _vm.getStringTable();
        if ( _vm.getSWFVersion() < 7 )
        {
                std::string name = key;
                boost::to_lower(name, _vm.getLocale());
-               return _members.addGetterSetter(string_table::find(name), 
getter, setter);
+               return _members.addGetterSetter(stringTable.find(name), getter, 
setter);
        }
        else
        {
-               return _members.addGetterSetter(string_table::find(key), 
getter, setter);
+               return _members.addGetterSetter(stringTable.find(key), getter, 
setter);
        }
 }
 
@@ -119,7 +120,7 @@
 as_object::findProperty(string_table::key key)
 {
        // don't enter an infinite loop looking for __proto__ ...
-       if (key == string_table::find("__proto__"))
+       if (key == as_object::PROP_uuPROTOuu)
        {
                return _members.getProperty(key);
        }
@@ -146,7 +147,7 @@
 as_object::findGetterSetter(string_table::key key)
 {
        // don't enter an infinite loop looking for __proto__ ...
-       if (key == string_table::find("__proto__"))
+       if (key == as_object::PROP_uuPROTOuu)
        {
                Property* prop = _members.getProperty(key);
                if ( ! prop ) return NULL;
@@ -180,7 +181,7 @@
 void
 as_object::set_prototype(boost::intrusive_ptr<as_object> proto, int flags)
 {
-       static string_table::key key = string_table::find("__proto__");
+       static string_table::key key = as_object::PROP_uuPROTOuu;
 
        // TODO: check what happens if __proto__ is set as a user-defined 
getter/setter
        if (_members.setValue(key, as_value(proto.get()), *this) )
@@ -207,7 +208,7 @@
                        {
                                IF_VERBOSE_ASCODING_ERRORS(
                                        log_aserror(_("Attempt to set read-only 
property '%s'"),
-                                                   
string_table::value(key).c_str());
+                                                   
_vm.getStringTable().value(key).c_str());
                                );
                        } else
                        {
@@ -217,7 +218,7 @@
                }
                catch (ActionException& exc)
                {
-                       log_msg(_("%s: Exception %s.  Will create a new 
member"), string_table::value(key).c_str(), exc.what());
+                       log_msg(_("%s: Exception %s.  Will create a new 
member"), _vm.getStringTable().value(key).c_str(), exc.what());
                }
        }
 
@@ -230,7 +231,7 @@
                IF_VERBOSE_ASCODING_ERRORS(
                log_aserror(_("Attempt to set read-only property ``%s''"
                        " on object ``%p''"),
-                       string_table::value(key).c_str(), (void*)this);
+                       _vm.getStringTable().value(key).c_str(), (void*)this);
                );
        }
 
@@ -250,7 +251,7 @@
                boost::to_lower(keylower, vm.getLocale());
 
                // Set (or create) a SimpleProperty 
-               if (! _members.setValue(string_table::find(keylower), val, 
*this) )
+               if (! _members.setValue(_vm.getStringTable().find(keylower), 
val, *this) )
                {
                        log_error(_("Attempt to initialize read-only property 
``%s''"
                                " (%s) on object ``%p'' twice"),
@@ -259,12 +260,12 @@
                        assert(0);
                }
                // TODO: optimize this, don't scan again !
-               _members.setFlags(string_table::find(keylower), flags, 0);
+               _members.setFlags(_vm.getStringTable().find(keylower), flags, 
0);
        }
        else
        {
                // Set (or create) a SimpleProperty 
-               if ( ! _members.setValue(string_table::find(key1), val, *this) )
+               if ( ! _members.setValue(_vm.getStringTable().find(key1), val, 
*this) )
                {
                        log_error(_("Attempt to initialize read-only property 
``%s''"
                                " on object ``%p'' twice"),
@@ -273,7 +274,7 @@
                        assert(0);
                }
                // TODO: optimize this, don't scan again !
-               _members.setFlags(string_table::find(key1), flags, 0);
+               _members.setFlags(_vm.getStringTable().find(key1), flags, 0);
        }
 }
 
@@ -286,17 +287,17 @@
        {
                std::string name = key;
                boost::to_lower(name, _vm.getLocale());
-               success = _members.addGetterSetter(string_table::find(name), 
getter, setter);
+               success = 
_members.addGetterSetter(_vm.getStringTable().find(name), getter, setter);
                //log_msg(_("Initialized property '%s'"), name.c_str());
                // TODO: optimize this, don't scan again !
-               _members.setFlags(string_table::find(name), flags, 0);
+               _members.setFlags(_vm.getStringTable().find(name), flags, 0);
        }
        else
        {
-               success = _members.addGetterSetter(string_table::find(key), 
getter, setter);
+               success = 
_members.addGetterSetter(_vm.getStringTable().find(key), getter, setter);
                //log_msg(_("Initialized property '%s'"), key.c_str());
                // TODO: optimize this, don't scan again !
-               _members.setFlags(string_table::find(key), flags, 0);
+               _members.setFlags(_vm.getStringTable().find(key), flags, 0);
        }
 
        // We shouldn't attempt to initialize a property twice, should we ?
@@ -308,7 +309,7 @@
 {
        init_property(key, getter, getter, initflags);
 
-       as_prop_flags& flags = 
getOwnProperty(string_table::find(key))->getFlags();
+       as_prop_flags& flags = 
getOwnProperty(_vm.getStringTable().find(key))->getFlags();
 
        // ActionScript must not change the flags of this builtin property.
        flags.set_is_protected(true);
@@ -321,7 +322,7 @@
 std::string
 as_object::asPropName(string_table::key name)
 {
-       std::string orig = string_table::value(name);
+       std::string orig = _vm.getStringTable().value(name);
        if ( _vm.getSWFVersion() < 7 )
        {
                boost::to_lower(orig, _vm.getLocale());
@@ -410,7 +411,7 @@
                        }
 
                        // set_member_flags will take care of case conversion
-                       if (!set_member_flags(string_table::find(prop), 
set_true, set_false) )
+                       if (!set_member_flags(_vm.getStringTable().find(prop), 
set_true, set_false) )
                        {
                                IF_VERBOSE_ASCODING_ERRORS(
                                log_aserror(_("Can't set propflags on object "
@@ -560,9 +561,9 @@
 {
        if ( _vm.getSWFVersion() < 7 )
        {
-               std::string key = string_table::value(name);
+               std::string key = _vm.getStringTable().value(name);
                boost::to_lower(key, _vm.getLocale());
-               return _members.delProperty(string_table::find(key));
+               return _members.delProperty(_vm.getStringTable().find(key));
        }
        else
        {
@@ -575,9 +576,9 @@
 {
        if ( _vm.getSWFVersion() < 7 )
        {
-               std::string key = string_table::value(name);
+               std::string key = _vm.getStringTable().value(name);
                boost::to_lower(key, _vm.getLocale());
-               return _members.getProperty(string_table::find(key));
+               return _members.getProperty(_vm.getStringTable().find(key));
        }
        else
        {
@@ -612,7 +613,7 @@
 boost::intrusive_ptr<as_object>
 as_object::get_prototype()
 {
-       static string_table::key key = string_table::find("__proto__");
+       static string_table::key key = as_object::PROP_uuPROTOuu;
        as_value tmp;
        // I don't think any subclass should override getting __proto__ 
anyway...
        //if ( ! get_member(key, &tmp) ) return NULL;
@@ -646,7 +647,7 @@
                boost::to_lower(handler_name, _vm.getLocale());
        }
 
-       if (get_member(string_table::find(handler_name), &event_handler) )
+       if (get_member(_vm.getStringTable().find(handler_name), &event_handler) 
)
        {
                call_method(event_handler, NULL, this, 0, 0);
                return true;

Index: server/as_object.h
===================================================================
RCS file: /sources/gnash/gnash/server/as_object.h,v
retrieving revision 1.69
retrieving revision 1.70
diff -u -b -r1.69 -r1.70
--- server/as_object.h  16 Sep 2007 16:48:13 -0000      1.69
+++ server/as_object.h  19 Sep 2007 14:20:49 -0000      1.70
@@ -70,6 +70,77 @@
        public ref_counted
 #endif
 {
+public:
+       typedef enum
+       {
+               PROP_ADD_LISTENER = 1,
+               PROP_ALIGN,
+               PROP_uALPHA,
+               PROP_BLOCK_INDENT,
+               PROP_BOLD,
+               PROP_BROADCAST_MESSAGE,
+               PROP_BULLET,
+               PROP_CALLEE,
+               PROP_COLOR,
+               PROP_CONSTRUCTOR,
+               PROP_uuCONSTRUCTORuu,
+               PROP_uCURRENTFRAME,
+               PROP_uDROPTARGET,
+               PROP_ENABLED,
+               PROP_uFOCUSRECT,
+               PROP_uFRAMESLOADED,
+               PROP_uHEIGHT,
+               PROP_uHIGHQUALITY,
+               PROP_HTML_TEXT,
+               PROP_INDENT,
+               PROP_ITALIC,
+               PROP_LEADING,
+               PROP_LEFT_MARGIN,
+               PROP_LENGTH,
+               PROP_uLISTENERS,
+               PROP_LOADED,
+               PROP_uNAME,
+               PROP_ON_LOAD,
+               PROP_ON_RESIZE,
+               PROP_ON_ROLL_OUT,
+               PROP_ON_ROLL_OVER,
+               PROP_ON_SELECT,
+               PROP_ON_STATUS,
+               PROP_uPARENT,
+               PROP_uuPROTOuu,
+               PROP_PROTOTYPE,
+               PROP_PUSH,
+               PROP_REMOVE_LISTENER,
+               PROP_RIGHT_MARGIN,
+               PROP_uROTATION,
+               PROP_SCALE_MODE,
+               PROP_SIZE,
+               PROP_uSOUNDBUFTIME,
+               PROP_SPLICE,
+               PROP_iSTAGE,
+               PROP_STATUS,
+               PROP_uTARGET,
+               PROP_TEXT,
+               PROP_TEXT_COLOR,
+               PROP_TEXT_WIDTH,
+               PROP_TO_STRING,
+               PROP_uTOTALFRAMES,
+               PROP_UNDERLINE,
+               PROP_uURL,
+               PROP_VALUE_OF,
+               PROP_uVISIBLE,
+               PROP_uWIDTH,
+               PROP_X,
+               PROP_uX,
+               PROP_uXMOUSE,
+               PROP_uXSCALE,
+               PROP_Y,
+               PROP_uY,
+               PROP_uYMOUSE,
+               PROP_uYSCALE
+       } standard_properties;
+
+private:
        /// Properties of this objects 
        PropertyList _members;
 

Index: server/as_value.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/as_value.cpp,v
retrieving revision 1.74
retrieving revision 1.75
diff -u -b -r1.74 -r1.75
--- server/as_value.cpp 16 Sep 2007 16:48:13 -0000      1.74
+++ server/as_value.cpp 19 Sep 2007 14:20:49 -0000      1.75
@@ -135,7 +135,7 @@
                        bool gotValidToStringResult = false;
                        if ( env )
                        {
-                               string_table::key methodname = 
string_table::find(PROPNAME("toString")); 
+                               string_table::key methodname = 
as_object::PROP_TO_STRING;
                                as_value method;
                                if ( obj->get_member(methodname, &method) )
                                {
@@ -148,13 +148,13 @@
                                        else
                                        {
                                                log_msg(_("[object %p].%s() did 
not return a string: %s"),
-                                                               (void*)obj, 
string_table::value(methodname).c_str(),
+                                                               (void*)obj, 
VM::get().getStringTable().value(methodname).c_str(),
                                                                
ret.to_debug_string().c_str());
                                        }
                                }
                                else
                                {
-                                       log_msg(_("get_member(%s) returned 
false"), string_table::value(methodname).c_str());
+                                       log_msg(_("get_member(%s) returned 
false"), VM::get().getStringTable().value(methodname).c_str());
                                }
                        }
                        if ( ! gotValidToStringResult )
@@ -211,7 +211,7 @@
        if ( m_type == OBJECT || m_type == AS_FUNCTION )
        {
                as_object* obj = m_object_value;
-               string_table::key methodname = 
string_table::find(PROPNAME("valueOf")); 
+               string_table::key methodname = as_object::PROP_VALUE_OF;
                as_value method;
                if ( obj->get_member(methodname, &method) )
                {
@@ -219,7 +219,7 @@
                }
                else
                {
-                       log_msg(_("get_member(%s) returned false"), 
string_table::value(methodname).c_str());
+                       log_msg(_("get_member(%s) returned false"), 
VM::get().getStringTable().value(methodname).c_str());
                }
        }
 
@@ -290,7 +290,7 @@
                        as_object* obj = m_object_value; 
                        if ( env )
                        {
-                               string_table::key methodname = 
string_table::find(PROPNAME("valueOf")); 
+                               string_table::key methodname = 
as_object::PROP_VALUE_OF;
                                as_value method;
                                if (obj->get_member(methodname, &method) )
                                {
@@ -306,7 +306,7 @@
                                        else
                                        {
                                                log_msg(_("[object %p].%s() did 
not return a number: %s"),
-                                                               (void*)obj, 
string_table::value(methodname).c_str(),
+                                                               (void*)obj, 
VM::get().getStringTable().value(methodname).c_str(),
                                                                
ret.to_debug_string().c_str());
                                                if ( m_type == AS_FUNCTION && 
swfversion < 6 )
                                                {
@@ -320,7 +320,7 @@
                                }
                                else
                                {
-                                       log_msg(_("get_member(%s) returned 
false"), string_table::value(methodname).c_str());
+                                       log_msg(_("get_member(%s) returned 
false"), VM::get().getStringTable().value(methodname).c_str());
                                }
                        }
                        return obj->get_numeric_value(); 

Index: server/character.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/character.cpp,v
retrieving revision 1.55
retrieving revision 1.56
diff -u -b -r1.55 -r1.56
--- server/character.cpp        19 Sep 2007 10:17:03 -0000      1.55
+++ server/character.cpp        19 Sep 2007 14:20:49 -0000      1.56
@@ -17,7 +17,7 @@
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 // 
 
-/* $Id: character.cpp,v 1.55 2007/09/19 10:17:03 strk Exp $ */
+/* $Id: character.cpp,v 1.56 2007/09/19 14:20:49 cmusick Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -751,7 +751,7 @@
 
        // const cast is needed due to getter/setter members possibly
        // modifying this object even when only get !
-       if ( 
const_cast<character*>(this)->get_member(string_table::find(method_name), &tmp) 
)
+       if ( 
const_cast<character*>(this)->get_member(_vm.getStringTable().find(method_name),
 &tmp) )
        {
                func = tmp.to_as_function();
        }

Index: server/edit_text_character.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/edit_text_character.cpp,v
retrieving revision 1.116
retrieving revision 1.117
diff -u -b -r1.116 -r1.117
--- server/edit_text_character.cpp      19 Sep 2007 10:54:09 -0000      1.116
+++ server/edit_text_character.cpp      19 Sep 2007 14:20:49 -0000      1.117
@@ -17,7 +17,7 @@
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 //
 
-/* $Id: edit_text_character.cpp,v 1.116 2007/09/19 10:54:09 strk Exp $ */
+/* $Id: edit_text_character.cpp,v 1.117 2007/09/19 14:20:49 cmusick Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -744,22 +744,18 @@
        //        of the TextField class. See attachTextFieldInterface()
        // @@ TODO need to inherit basic stuff like _x, _y, _xscale, _yscale 
etc ?
 
-
-       as_standard_member      std_member = get_standard_member(name);
-       switch (std_member)
+       switch (name)
        {
        default:
                break;
-       case M_INVALID_MEMBER:
-               break;
-       case M_TEXT:
+       case as_object::PROP_TEXT:
                //if (name == "text")
        {
                int version = 
get_parent()->get_movie_definition()->get_version();
                set_text_value(val.to_string_versioned(version).c_str());
                return;
        }
-       case M_HTMLTEXT:
+       case as_object::PROP_HTML_TEXT:
                //if (name == "htmlText")
        {
                int version = 
get_parent()->get_movie_definition()->get_version();
@@ -767,7 +763,7 @@
                format_text();
                return;
        }
-       case M_X:
+       case as_object::PROP_uX:
                //else if (name == "_x")
        {
                matrix  m = get_matrix();
@@ -778,7 +774,7 @@
                
                return;
        }
-       case M_Y:
+       case as_object::PROP_uY:
                //else if (name == "_y")
        {
                matrix  m = get_matrix();
@@ -789,7 +785,7 @@
                
                return;
        }
-       case M_WIDTH: // _width
+       case as_object::PROP_uWIDTH:
        {
                float nw = PIXELS_TO_TWIPS(val.to_number()); // TODO: pass an 
as_environment !
                if ( _bounds.width() == nw )
@@ -829,7 +825,7 @@
 
                return;
        }
-       case M_HEIGHT: // _height
+       case as_object::PROP_uHEIGHT:
        {
                float nh = PIXELS_TO_TWIPS(val.to_number()); // TODO: pass an 
as_environment !
                if ( _bounds.height() == nh )
@@ -869,13 +865,13 @@
 
                return;
        }
-       case M_VISIBLE:
+       case as_object::PROP_uVISIBLE:
                //else if (name == "_visible")
        {
                set_visible(val.to_bool());
                return;
        }
-       case M_ALPHA:
+       case as_object::PROP_uALPHA:
                //else if (name == "_alpha")
        {
                // @@ TODO this should be generic to class character!
@@ -900,36 +896,29 @@
        // FIXME: Turn all standard members into getter/setter properties
        //        of the TextField class. See attachTextFieldInterface()
        
-       as_standard_member std_member = get_standard_member(name);
-       switch (std_member)
+       switch (name)
        {
        default:
                break;
-       case M_INVALID_MEMBER:
-               if (string_table::value(name) == PROPNAME("htmlText")) {
-                       val->set_string(get_text_value());
-                       return true;
-               }
-               break;
-       case M_TEXT:
+       case as_object::PROP_TEXT:
                //if (name == "text")
        {
                val->set_string(get_text_value());
                return true;
        }
-       case M_HTMLTEXT:
+       case as_object::PROP_HTML_TEXT:
                //if (name == "htmlText")
        {
                val->set_string(get_text_value());
                return true;
        }
-       case M_VISIBLE:
+       case as_object::PROP_uVISIBLE:
                //else if (name == "_visible")
        {
                val->set_bool(get_visible());
                return true;
        }
-       case M_ALPHA:
+       case as_object::PROP_uALPHA:
                //else if (name == "_alpha")
        {
                // @@ TODO this should be generic to class character!
@@ -937,21 +926,21 @@
                val->set_double(cx.m_[3][0] * 100.f);
                return true;
        }
-       case M_X:
+       case as_object::PROP_uX:
                //else if (name == "_x")
        {
                matrix  m = get_matrix();       // @@ get_world_matrix()???
                val->set_double(TWIPS_TO_PIXELS(m.m_[0][2]));
                return true;
        }
-       case M_Y:
+       case as_object::PROP_uY:
                //else if (name == "_y")
        {
                matrix  m = get_matrix();       // @@ get_world_matrix()???
                val->set_double(TWIPS_TO_PIXELS(m.m_[1][2]));
                return true;
        }
-       case M_WIDTH: // _width
+       case as_object::PROP_uWIDTH:
        {
                val->set_double(TWIPS_TO_PIXELS(get_width()));
 #ifdef GNASH_DEBUG_TEXTFIELDS
@@ -959,7 +948,7 @@
 #endif // GNASH_DEBUG_TEXTFIELDS
                return true;
        }
-       case M_HEIGHT: // _height
+       case as_object::PROP_uHEIGHT:
        {
                val->set_double(TWIPS_TO_PIXELS(get_height()));
 #ifdef GNASH_DEBUG_TEXTFIELDS
@@ -967,7 +956,7 @@
 #endif // GNASH_DEBUG_TEXTFIELDS
                return true;
        }
-       case M_TEXTWIDTH:
+       case as_object::PROP_TEXT_WIDTH:
                //else if (name == "textWidth")
        {
                // Return the width, in pixels, of the text as laid out.
@@ -1499,7 +1488,7 @@
        // check if the VariableName already has a value,
        // in that case update text value
        as_value val;
-       if (sprite->get_member(string_table::find(varname), &val) )
+       if (sprite->get_member(VM::get().getStringTable().find(varname), &val) )
        {
 #ifdef DEBUG_DYNTEXT_VARIABLES
                log_msg(_("target sprite (%p) does have a member named %s"), 
(void*)sprite, varname);

Index: server/impl.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/impl.cpp,v
retrieving revision 1.119
retrieving revision 1.120
diff -u -b -r1.119 -r1.120
--- server/impl.cpp     4 Sep 2007 11:27:42 -0000       1.119
+++ server/impl.cpp     19 Sep 2007 14:20:49 -0000      1.120
@@ -17,7 +17,7 @@
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 //
 
-/* $Id: impl.cpp,v 1.119 2007/09/04 11:27:42 cmusick Exp $ */
+/* $Id: impl.cpp,v 1.120 2007/09/19 14:20:49 cmusick Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -930,9 +930,6 @@
 #endif
 }
 
-
-
-
 } // namespace gnash
 
 // Local Variables:

Index: server/movie_root.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/movie_root.cpp,v
retrieving revision 1.92
retrieving revision 1.93
diff -u -b -r1.92 -r1.93
--- server/movie_root.cpp       16 Sep 2007 16:48:13 -0000      1.92
+++ server/movie_root.cpp       19 Sep 2007 14:20:49 -0000      1.93
@@ -235,7 +235,7 @@
        if ( ! VM::isInitialized() ) return NULL;
        as_object* global = VM::get().getGlobal();
        if ( ! global ) return NULL;
-       if (!global->get_member(string_table::find(PROPNAME("Stage")), &v) ) 
return NULL;
+       if (!global->get_member(as_object::PROP_iSTAGE, &v) ) return NULL;
        return boost::dynamic_pointer_cast<Stage>(v.to_object());
 }
                
@@ -306,7 +306,7 @@
                {
                        boost::to_lower(objName, vm.getLocale());
                }
-               if ( global->get_member(string_table::find(objName), &kval) )
+               if (global->get_member(vm.getStringTable().find(objName), 
&kval) )
                {
                        //log_msg("Found member 'Key' in _global: %s", 
kval.to_string());
                        boost::intrusive_ptr<as_object> obj = kval.to_object();

Index: server/sprite_instance.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/sprite_instance.cpp,v
retrieving revision 1.346
retrieving revision 1.347
diff -u -b -r1.346 -r1.347
--- server/sprite_instance.cpp  19 Sep 2007 10:17:03 -0000      1.346
+++ server/sprite_instance.cpp  19 Sep 2007 14:20:49 -0000      1.347
@@ -954,7 +954,7 @@
        float x = 0;
        float y = 0;
 
-       if ( ! obj->get_member(string_table::find("x"), &tmp) )
+       if ( ! obj->get_member(as_object::PROP_X, &tmp) )
        {
                IF_VERBOSE_ASCODING_ERRORS(
                log_aserror(_("MovieClip.globalToLocal(%s): "
@@ -965,7 +965,7 @@
        }
        x = PIXELS_TO_TWIPS(tmp.to_number(&fn.env()));
 
-       if ( ! obj->get_member(string_table::find("y"), &tmp) )
+       if ( ! obj->get_member(as_object::PROP_Y, &tmp) )
        {
                IF_VERBOSE_ASCODING_ERRORS(
                log_aserror(_("MovieClip.globalToLocal(%s): "
@@ -980,8 +980,8 @@
        matrix world_mat = sprite->get_world_matrix();
        world_mat.transform_by_inverse(pt);
 
-       obj->set_member(string_table::find("x"), 
TWIPS_TO_PIXELS(round(pt.m_x)));
-       obj->set_member(string_table::find("y"), 
TWIPS_TO_PIXELS(round(pt.m_y)));
+       obj->set_member(as_object::PROP_X, TWIPS_TO_PIXELS(round(pt.m_x)));
+       obj->set_member(as_object::PROP_Y, TWIPS_TO_PIXELS(round(pt.m_y)));
 
        return ret;
 }
@@ -1016,7 +1016,7 @@
        float x = 0;
        float y = 0;
 
-       if ( ! obj->get_member(string_table::find("x"), &tmp) )
+       if ( ! obj->get_member(as_object::PROP_X, &tmp) )
        {
                IF_VERBOSE_ASCODING_ERRORS(
                log_aserror(_("MovieClip.localToGlobal(%s): "
@@ -1027,7 +1027,7 @@
        }
        x = PIXELS_TO_TWIPS(tmp.to_number(&fn.env()));
 
-       if ( ! obj->get_member(string_table::find("y"), &tmp) )
+       if ( ! obj->get_member(as_object::PROP_Y, &tmp) )
        {
                IF_VERBOSE_ASCODING_ERRORS(
                log_aserror(_("MovieClip.localToGlobal(%s): "
@@ -1042,8 +1042,8 @@
        matrix world_mat = sprite->get_world_matrix();
        world_mat.transform(pt);
 
-       obj->set_member(string_table::find("x"), 
TWIPS_TO_PIXELS(round(pt.m_x)));
-       obj->set_member(string_table::find("y"), 
TWIPS_TO_PIXELS(round(pt.m_y)));
+       obj->set_member(as_object::PROP_X, TWIPS_TO_PIXELS(round(pt.m_x)));
+       obj->set_member(as_object::PROP_Y, TWIPS_TO_PIXELS(round(pt.m_y)));
 
        return ret;
 
@@ -1731,7 +1731,7 @@
 // Otherwise leave *val alone and return false.
 bool sprite_instance::get_member(string_table::key name_key, as_value* val)
 {
-       const std::string& name = string_table::value(name_key);
+       const std::string& name = VM::get().getStringTable().value(name_key);
 
        // FIXME: use addProperty interface for these !!
        // TODO: or at least have a character:: protected method take
@@ -2177,12 +2177,12 @@
                const as_value& val)
 {
 #ifdef DEBUG_DYNTEXT_VARIABLES
-       //log_debug(_("sprite[%p]::set_member(%s, %s)"), (void*)this, 
string_table::value(name).c_str(), val.to_debug_string().c_str());
+       //log_debug(_("sprite[%p]::set_member(%s, %s)"), (void*)this, 
VM::get().getStringTable().value(name), val.to_debug_string().c_str());
 #endif
 
        if ( val.is_function() )
        {
-               checkForKeyOrMouseEvent(string_table::value(name));
+               checkForKeyOrMouseEvent(VM::get().getStringTable().value(name));
        }
 
        // Try textfield variables
@@ -2194,7 +2194,7 @@
        //        property (ie: have a textfield use _x as variable name and
        //        be scared)
        //
-       TextFieldPtrVect* etc = 
get_textfield_variable(string_table::value(name).c_str());
+       TextFieldPtrVect* etc = 
get_textfield_variable(VM::get().getStringTable().value(name).c_str());
        if ( etc )
        {
 #ifdef DEBUG_DYNTEXT_VARIABLES
@@ -3301,10 +3301,10 @@
                //
                if ( swfversion > 5 )
                {
-                       set_member(string_table::find("__constructor__"), ctor);
+                       set_member(as_object::PROP_uuCONSTRUCTORuu, ctor);
                        if ( swfversion == 6 )
                        {
-                               set_member(string_table::find("constructor"), 
ctor);
+                               set_member(as_object::PROP_CONSTRUCTOR, ctor);
                        }
                }
        }
@@ -3437,6 +3437,7 @@
        // TODO: consider adding a setVariables(std::map) for use by this
        //       and by Player class when dealing with -P command-line switch
 
+       string_table& st = _vm.getStringTable();
        LoadVariablesThread::ValuesMap& vals = request.getValues();
        for (LoadVariablesThread::ValuesMap::const_iterator it=vals.begin(),
                        itEnd=vals.end();
@@ -3445,7 +3446,7 @@
                const string& name = it->first;
                const string& val = it->second;
                //log_msg(_("Setting variable '%s' to value '%s'"), 
name.c_str(), val.c_str());
-               set_member(string_table::find(name), val.c_str());
+               set_member(st.find(name), val.c_str());
        }
 }
 
@@ -3475,12 +3476,13 @@
 void
 sprite_instance::setVariables(VariableMap& vars)
 {
+       string_table& st = _vm.getStringTable();
        for (VariableMap::const_iterator it=vars.begin(), itEnd=vars.end();
                it != itEnd; ++it)
        {
                const string& name = it->first;
                const string& val = it->second;
-               set_member(string_table::find(PROPNAME(name)), val.c_str());
+               set_member(st.find(PROPNAME(name)), val.c_str());
        }
 }
 
@@ -3561,7 +3563,7 @@
        as_value enabled;
        // const_cast needed due to get_member being non-const due to the 
        // possibility that a getter-setter would actually modify us ...
-       
const_cast<sprite_instance*>(this)->get_member(string_table::find("enabled"), 
&enabled);
+       const_cast<sprite_instance*>(this)->get_member(as_object::PROP_ENABLED, 
&enabled);
        return enabled.to_bool();
 }
 

Index: server/swf_function.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/swf_function.cpp,v
retrieving revision 1.34
retrieving revision 1.35
diff -u -b -r1.34 -r1.35
--- server/swf_function.cpp     16 Sep 2007 16:48:14 -0000      1.34
+++ server/swf_function.cpp     19 Sep 2007 14:20:49 -0000      1.35
@@ -87,7 +87,7 @@
        //       returning an as_function ?
        //
        as_value ctor;
-       bool ret = proto->get_member(string_table::find("__constructor__"), 
&ctor);
+       bool ret = proto->get_member(as_object::PROP_uuCONSTRUCTORuu, &ctor);
        if ( ! ret )
        {
 #ifdef GNASH_DEBUG_GETSUPER
@@ -114,7 +114,7 @@
 #endif
 
        as_value ctor_proto;
-       ret = ctor_obj->get_member(string_table::find("prototype"), 
&ctor_proto);
+       ret = ctor_obj->get_member(as_object::PROP_PROTOTYPE, &ctor_proto);
        if ( ! ret )
 
        {
@@ -154,7 +154,7 @@
        {
                arguments->push(fn.arg(i));
        }
-       arguments->set_member(string_table::find("callee"), &callee);
+       arguments->set_member(as_object::PROP_CALLEE, &callee);
 
        return arguments;
 

Index: server/textformat.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/textformat.cpp,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -b -r1.28 -r1.29
--- server/textformat.cpp       16 Sep 2007 16:48:14 -0000      1.28
+++ server/textformat.cpp       19 Sep 2007 14:20:49 -0000      1.29
@@ -17,7 +17,7 @@
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 // 
 
-// $Id: textformat.cpp,v 1.28 2007/09/16 16:48:14 cmusick Exp $
+// $Id: textformat.cpp,v 1.29 2007/09/19 14:20:49 cmusick Exp $
 
 #include "log.h"
 #include "textformat.h"
@@ -165,63 +165,63 @@
   //log_msg(_("Change from %f for %f characters for object at %p"), start, 
end, obj);
 
   // Check for the flags that could be set
-  if (obj->get_member(string_table::find("underline"), &method)) {
+  if (obj->get_member(as_object::PROP_UNDERLINE, &method)) {
     //log_msg(_("Underline exists and is set to %d"), method.to_bool());
     obj->obj.underlinedSet(method.to_bool());
   }
   
-  if (obj->get_member(string_table::find("italic"), &method)) {
+  if (obj->get_member(as_object::PROP_ITALIC, &method)) {
     //log_msg(_("Italic exists and is set to %d"), method.to_bool());
     obj->obj.italicedSet(method.to_bool());
   }
   
-  if (obj->get_member(string_table::find("bold"), &method)) {
+  if (obj->get_member(as_object::PROP_BOLD, &method)) {
     //log_msg(_("Bold exists and is set to %d"), method.to_bool());
     obj->obj.boldSet(method.to_bool());
   }
   
-  if (obj->get_member(string_table::find("bullet"), &method)) {
+  if (obj->get_member(as_object::PROP_BULLET, &method)) {
     //log_msg(_("Bullet exists and is set to %d"), method.to_bool());
     obj->obj.bulletSet(method.to_bool());
   }
 
-  if (obj->get_member(string_table::find("color"), &method)) {
+  if (obj->get_member(as_object::PROP_COLOR, &method)) {
     //log_msg(_("Color exists and is set to %f", method.to_number());
     obj->obj.colorSet((uint32_t)method.to_number());
   }
 
-  if (obj->get_member(string_table::find("indent"), &method)) {
+  if (obj->get_member(as_object::PROP_INDENT, &method)) {
     //log_msg(_("Indent exists and is set to %f"), method.to_number());
     obj->obj.indentSet(float(method.to_number()));
   }
 
-  if (obj->get_member(string_table::find("align"), &method)) {
+  if (obj->get_member(as_object::PROP_ALIGN, &method)) {
     //log_msg(_("Align exists and is set to %s"), method.to_string());
     const char* align = method.to_string().c_str();
     if ( align ) obj->obj.alignSet(align);
   }
 
-  if (obj->get_member(string_table::find("blockIndent"), &method)) {
+  if (obj->get_member(as_object::PROP_BLOCK_INDENT, &method)) {
     //log_msg(_("BlockIndent exists and is set to %f"), method.to_number());
     obj->obj.blockIndentSet(float(method.to_number()));
   }
   
-  if (obj->get_member(string_table::find("leading"), &method)) {
+  if (obj->get_member(as_object::PROP_LEADING, &method)) {
     //log_msg(_("Leading exists and is set to %f"), method.to_number());
     obj->obj.leadingSet(float(method.to_number()));
   }
   
-  if (obj->get_member(string_table::find("leftMargin"), &method)) {
+  if (obj->get_member(as_object::PROP_LEFT_MARGIN, &method)) {
     //log_msg(_("LeftMargin exists and is set to %f"), method.to_number());
     obj->obj.leftMarginSet(float(method.to_number()));
   }
   
-  if (obj->get_member(string_table::find("RightMargin"), &method)) {
+  if (obj->get_member(as_object::PROP_RIGHT_MARGIN, &method)) {
     //log_msg(_("RightMargin exists and is set to %f"), method.to_number());
     obj->obj.rightMarginSet(float(method.to_number()));
   }
   
-  if (obj->get_member(string_table::find("size"), &method)) {
+  if (obj->get_member(as_object::PROP_SIZE, &method)) {
     //log_msg(_("Size exists and is set to %f"), method.to_number());
     obj->obj.sizeSet(float(method.to_number()));
   }

Index: server/timers.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/timers.cpp,v
retrieving revision 1.37
retrieving revision 1.38
diff -u -b -r1.37 -r1.38
--- server/timers.cpp   16 Sep 2007 16:48:14 -0000      1.37
+++ server/timers.cpp   19 Sep 2007 14:20:49 -0000      1.38
@@ -19,7 +19,7 @@
 //
 //
 
-/* $Id: timers.cpp,v 1.37 2007/09/16 16:48:14 cmusick Exp $ */
+/* $Id: timers.cpp,v 1.38 2007/09/19 14:20:49 cmusick Exp $ */
 
 #include "timers.h"
 #include "as_function.h" // for class as_function
@@ -188,7 +188,7 @@
        {
                as_value method;
                const std::string& method_name = fn.arg(1).to_string(&fn.env());
-               if (!obj->get_member(string_table::find(method_name), &method) )
+               if 
(!obj->get_member(VM::get().getStringTable().find(method_name), &method) )
                {
                        IF_VERBOSE_ASCODING_ERRORS(
                                std::stringstream ss; fn.dump_args(ss);

Index: server/asobj/AsBroadcaster.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/AsBroadcaster.cpp,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- server/asobj/AsBroadcaster.cpp      16 Sep 2007 16:48:14 -0000      1.4
+++ server/asobj/AsBroadcaster.cpp      19 Sep 2007 14:20:50 -0000      1.5
@@ -77,7 +77,7 @@
                if ( ! o ) return;
 
                as_value method;
-               o->get_member(string_table::find(_eventName), &method);
+               o->get_member(VM::get().getStringTable().find(_eventName), 
&method);
 
                if ( method.is_function() )
                {
@@ -106,20 +106,20 @@
 {
        log_debug("Initializing object %p as an AsBroadcaster", (void*)&o);
        // TODO: reserch on protection flags for these methods
-       o.set_member(string_table::find(PROPNAME("addListener")), new 
builtin_function(AsBroadcaster::addListener_method));
-       o.set_member(string_table::find(PROPNAME("removeListener")), new 
builtin_function(AsBroadcaster::removeListener_method));
-       o.set_member(string_table::find(PROPNAME("broadcastMessage")), new 
builtin_function(AsBroadcaster::broadcastMessage_method));
-       o.set_member(string_table::find("_listeners"), new as_array_object());
+       o.set_member(as_object::PROP_ADD_LISTENER, new 
builtin_function(AsBroadcaster::addListener_method));
+       o.set_member(as_object::PROP_REMOVE_LISTENER, new 
builtin_function(AsBroadcaster::removeListener_method));
+       o.set_member(as_object::PROP_BROADCAST_MESSAGE, new 
builtin_function(AsBroadcaster::broadcastMessage_method));
+       o.set_member(as_object::PROP_uLISTENERS, new as_array_object());
 
 #ifndef NDEBUG
        as_value tmp;
-       assert(o.get_member(string_table::find("_listeners"), &tmp));
+       assert(o.get_member(as_object::PROP_uLISTENERS, &tmp));
        assert(tmp.is_object());
-       assert(o.get_member(string_table::find(PROPNAME("addListener")), &tmp));
+       assert(o.get_member(as_object::PROP_ADD_LISTENER, &tmp));
        assert(tmp.is_function());
-       assert(o.get_member(string_table::find(PROPNAME("removeListener")), 
&tmp));
+       assert(o.get_member(as_object::PROP_REMOVE_LISTENER, &tmp));
        assert(tmp.is_function());
-       assert(o.get_member(string_table::find(PROPNAME("broadcastMessage")), 
&tmp));
+       assert(o.get_member(as_object::PROP_BROADCAST_MESSAGE, &tmp));
        assert(tmp.is_function());
 #endif
 }
@@ -164,7 +164,7 @@
        as_value newListener; assert(newListener.is_undefined());
        if ( fn.nargs ) newListener = fn.arg(0);
 
-       obj->callMethod(string_table::find(PROPNAME("removeListener")), 
fn.env(), newListener);
+       obj->callMethod(as_object::PROP_REMOVE_LISTENER, fn.env(), newListener);
 
        as_value listenersValue;
 
@@ -172,7 +172,7 @@
        //       inheritance chain in case it's own property _listeners 
        //       has been deleted while another one is found in any base
        //       class.
-       if ( ! obj->get_member(string_table::find("_listeners"), 
&listenersValue) )
+       if ( ! obj->get_member(as_object::PROP_uLISTENERS, &listenersValue) )
        {
                IF_VERBOSE_ASCODING_ERRORS(
                log_aserror(_("%p.addListener(%s): this object has no 
_listeners member"),
@@ -205,7 +205,7 @@
                        fn.dump_args().c_str(), 
listenersValue.to_debug_string().c_str());
                );
 
-               listenersObj->callMethod(string_table::find(PROPNAME("push")), 
fn.env(), newListener);
+               listenersObj->callMethod(as_object::PROP_PUSH, fn.env(), 
newListener);
 
        }
        else
@@ -229,7 +229,7 @@
        //       inheritance chain in case it's own property _listeners 
        //       has been deleted while another one is found in any base
        //       class.
-       if (!obj->get_member(string_table::find("_listeners"), &listenersValue) 
)
+       if (!obj->get_member(as_object::PROP_uLISTENERS, &listenersValue) )
        {
                IF_VERBOSE_ASCODING_ERRORS(
                log_aserror(_("%p.addListener(%s): this object has no 
_listeners member"),
@@ -266,15 +266,15 @@
                );
 
                // TODO: implement brute force scan of pseudo-array
-               unsigned int length = 
listenersObj->getMember(string_table::find("length")).to_int(fn.env());
+               unsigned int length = 
listenersObj->getMember(as_object::PROP_LENGTH).to_int(fn.env());
                for (unsigned int i=0; i<length; ++i)
                {
                        as_value iVal(i);
                        std::string n = iVal.to_string(&(fn.env()));
-                       as_value v = 
listenersObj->getMember(string_table::find(n));
+                       as_value v = 
listenersObj->getMember(VM::get().getStringTable().find(n));
                        if ( v.equals(listenerToRemove, fn.env()) )
                        {
-                               
listenersObj->callMethod(string_table::find("splice"), fn.env(), iVal, 
as_value(1));
+                               
listenersObj->callMethod(as_object::PROP_SPLICE, fn.env(), iVal, as_value(1));
                                return as_value(true); 
                        }
                }
@@ -303,7 +303,7 @@
        //       inheritance chain in case it's own property _listeners 
        //       has been deleted while another one is found in any base
        //       class.
-       if ( ! obj->get_member(string_table::find("_listeners"), 
&listenersValue) )
+       if ( ! obj->get_member(as_object::PROP_uLISTENERS, &listenersValue) )
        {
                IF_VERBOSE_ASCODING_ERRORS(
                log_aserror(_("%p.addListener(%s): this object has no 
_listeners member"),

Index: server/asobj/ContextMenu.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/ContextMenu.cpp,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -b -r1.16 -r1.17
--- server/asobj/ContextMenu.cpp        16 Sep 2007 16:48:14 -0000      1.16
+++ server/asobj/ContextMenu.cpp        19 Sep 2007 14:20:50 -0000      1.17
@@ -73,7 +73,7 @@
        as_function* getCallback() 
        {
                as_value tmp;
-               if (get_member(string_table::find("onSelect"), &tmp))
+               if (get_member(as_object::PROP_ON_SELECT, &tmp))
                        return tmp.to_as_function();
                else return NULL;
        }
@@ -86,7 +86,7 @@
        ///
        void setCallback(const as_value& callback)
        {
-               set_member(string_table::find("onSelect"), callback);
+               set_member(as_object::PROP_ON_SELECT, callback);
        }
 
        /// Attach the exported interface of this ActionScript class

Index: server/asobj/LoadVars.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/LoadVars.cpp,v
retrieving revision 1.29
retrieving revision 1.30
diff -u -b -r1.29 -r1.30
--- server/asobj/LoadVars.cpp   16 Sep 2007 16:48:14 -0000      1.29
+++ server/asobj/LoadVars.cpp   19 Sep 2007 14:20:50 -0000      1.30
@@ -382,7 +382,7 @@
        for  (ValuesMap::iterator it=vals.begin(), itEnd=vals.end();
                        it != itEnd; ++it)
        {
-               set_member(string_table::find(it->first), 
as_value(it->second.c_str()));
+               set_member(VM::get().getStringTable().find(it->first), 
as_value(it->second.c_str()));
                //log_msg("Setting %s == %s", it->first.c_str(), 
it->second.c_str());
        }
 

Index: server/asobj/MovieClipLoader.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/MovieClipLoader.cpp,v
retrieving revision 1.30
retrieving revision 1.31
diff -u -b -r1.30 -r1.31
--- server/asobj/MovieClipLoader.cpp    16 Sep 2007 16:48:14 -0000      1.30
+++ server/asobj/MovieClipLoader.cpp    19 Sep 2007 14:20:50 -0000      1.31
@@ -33,6 +33,7 @@
 #include "character.h" // for loadClip (get_parent)
 #include "log.h"
 #include "URL.h" // for url parsing
+#include "VM.h" // for the string table.
 #include "builtin_function.h"
 #include "Object.h" // for getObjectInterface
 
@@ -275,13 +276,14 @@
                event.c_str(), _listeners.size());
 #endif
 
+       string_table& st = VM::get().getStringTable();
        for (iterator it=_listeners.begin(), itEnd=_listeners.end();
                        it != itEnd;
                        ++it)
        {
                boost::intrusive_ptr<as_object> listener = *it;
                as_value method;
-               if (!listener->get_member(string_table::find(event), &method) )
+               if (!listener->get_member(st.find(event), &method) )
                {
 #if GNASH_DEBUG
 log_msg(_("Listener %p doesn't have an %s event to listen for, skipped"),

Index: server/asobj/NetStream.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/NetStream.cpp,v
retrieving revision 1.72
retrieving revision 1.73
diff -u -b -r1.72 -r1.73
--- server/asobj/NetStream.cpp  16 Sep 2007 16:48:14 -0000      1.72
+++ server/asobj/NetStream.cpp  19 Sep 2007 14:20:50 -0000      1.73
@@ -17,7 +17,7 @@
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 //
 
-/* $Id: NetStream.cpp,v 1.72 2007/09/16 16:48:14 cmusick Exp $ */
+/* $Id: NetStream.cpp,v 1.73 2007/09/19 14:20:50 cmusick Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -456,7 +456,7 @@
 {
        // TODO: check for System.onStatus too ! use a private 
getStatusHandler() method for this.
        as_value status;
-       if (!get_member(string_table::find("onStatus"), &status) || ! 
status.is_function())
+       if (!get_member(as_object::PROP_ON_STATUS, &status) || ! 
status.is_function())
        {
                clearStatusQueue();
                return;

Index: server/asobj/Object.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/Object.cpp,v
retrieving revision 1.30
retrieving revision 1.31
diff -u -b -r1.30 -r1.31
--- server/asobj/Object.cpp     16 Sep 2007 16:48:14 -0000      1.30
+++ server/asobj/Object.cpp     19 Sep 2007 14:20:50 -0000      1.31
@@ -17,7 +17,7 @@
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 //
 
-/* $Id: Object.cpp,v 1.30 2007/09/16 16:48:14 cmusick Exp $ */
+/* $Id: Object.cpp,v 1.31 2007/09/19 14:20:50 cmusick Exp $ */
 
 #include "tu_config.h"
 #include "Object.h"
@@ -325,7 +325,7 @@
                );
                return as_value();
        }
-       return 
as_value(fn.this_ptr->getOwnProperty(string_table::find(propname)) != NULL);
+       return 
as_value(fn.this_ptr->getOwnProperty(VM::get().getStringTable().find(propname)) 
!= NULL);
 }
 
 as_value
@@ -349,7 +349,7 @@
                return as_value();
        }
 
-       Property* prop = 
fn.this_ptr->getOwnProperty(string_table::find(propname));
+       Property* prop = 
fn.this_ptr->getOwnProperty(VM::get().getStringTable().find(propname));
        if ( ! prop )
        {
                return as_value(false);

Index: server/asobj/Stage.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/Stage.cpp,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -b -r1.21 -r1.22
--- server/asobj/Stage.cpp      16 Sep 2007 16:48:14 -0000      1.21
+++ server/asobj/Stage.cpp      19 Sep 2007 14:20:50 -0000      1.22
@@ -31,7 +31,6 @@
 #include "Object.h" // for getObjectInterface()
 
 #include <string>
-#include <boost/algorithm/string/case_conv.hpp> // for using PROPNAME
 
 namespace gnash {
 
@@ -71,7 +70,7 @@
 Stage::onResize(as_environment* env)
 {
        as_value v;
-       if (get_member(string_table::find(PROPNAME("scaleMode")), &v) && 
v.to_string(env) == "noScale" )
+       if (get_member(as_object::PROP_SCALE_MODE, &v) && v.to_string(env) == 
"noScale" )
        {
                notifyResize(env);
        }
@@ -92,10 +91,8 @@
 void
 Stage::notifyResize(boost::intrusive_ptr<as_object> obj, as_environment* env)
 {
-       string_table::key eventname = string_table::find(PROPNAME("onResize"));
-
        as_value method;
-       if ( ! obj->get_member(eventname, &method) ) {
+       if ( ! obj->get_member(as_object::PROP_ON_RESIZE, &method) ) {
                // nothing to do
                return;
        }

Index: server/asobj/prophelper.h
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/prophelper.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- server/asobj/prophelper.h   16 Sep 2007 16:48:14 -0000      1.3
+++ server/asobj/prophelper.h   19 Sep 2007 14:20:50 -0000      1.4
@@ -186,7 +186,7 @@
     o.init_member(#sp_name , new builtin_function(sp_code_name))
 
 #define phelp_i_replace(sp_name, sp_code_name) \
-    o.set_member(string_table::find(#sp_name), new 
builtin_function(sp_code_name))
+    o.set_member(VM::get().getStringTable().find(#sp_name), new 
builtin_function(sp_code_name))
 
 #else /* phelp_helper */
 #error phelp_helper must be defined.

Index: server/asobj/xml.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/xml.cpp,v
retrieving revision 1.45
retrieving revision 1.46
diff -u -b -r1.45 -r1.46
--- server/asobj/xml.cpp        16 Sep 2007 16:48:14 -0000      1.45
+++ server/asobj/xml.cpp        19 Sep 2007 14:20:50 -0000      1.46
@@ -17,7 +17,7 @@
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 //
 
-/* $Id: xml.cpp,v 1.45 2007/09/16 16:48:14 cmusick Exp $ */
+/* $Id: xml.cpp,v 1.46 2007/09/19 14:20:50 cmusick Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -135,12 +135,12 @@
 bool
 XML::get_member(string_table::key name, as_value *val)
 {
-        if ( string_table::value(name) == "status" ) 
+        if (name == as_object::PROP_STATUS) 
         {
                 val->set_int(_status);
                 return true;
         }
-        else if ( string_table::value(name) == "loaded" )
+        else if (name == as_object::PROP_LOADED)
         {
                 if ( _loaded < 0 ) val->set_undefined();
                 else val->set_bool(_loaded);
@@ -153,12 +153,12 @@
 void
 XML::set_member(string_table::key name, const as_value& val)
 {
-        if (string_table::value(name) == "status" )
+        if (name == as_object::PROP_STATUS)
        {
                _status = XML::Status(val.to_number());
                return;
        }
-        else if (string_table::value(name) == "loaded" )
+        else if (name == as_object::PROP_LOADED)
         {
                 bool b = val.to_bool();
                log_msg(_("set_member 'loaded' (%s) became boolean %d"), 
val.to_debug_string().c_str(), b);
@@ -197,7 +197,7 @@
 
     if ( method_name1.empty() ) return;
 
-       string_table::key method_name = string_table::find(method_name1);
+       string_table::key method_name = _vm.getStringTable().find(method_name1);
     as_value   method;
     if (!get_member(method_name, &method) ) return;
     if ( method.is_undefined() ) return;
@@ -225,7 +225,7 @@
 
     if ( method_name1.empty() ) return;
 
-       string_table::key method_name = string_table::find(method_name1);
+       string_table::key method_name = _vm.getStringTable().find(method_name1);
     as_value   method;
     if (! get_member(method_name, &method) ) return;
     if ( method.is_undefined() ) return;
@@ -849,7 +849,7 @@
     if ( VM::get().getSWFVersion() < 7 ) propname = "ignorewhite";
     else propname = "ignoreWhite";
 
-       string_table::key propnamekey = string_table::find(propname);
+       string_table::key propnamekey = 
VM::get().getStringTable().find(propname);
     as_value val;
     if (!const_cast<XML*>(this)->get_member(propnamekey, &val) ) return false;
     return val.to_bool();

Index: server/asobj/xmlsocket.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/xmlsocket.cpp,v
retrieving revision 1.33
retrieving revision 1.34
diff -u -b -r1.33 -r1.34
--- server/asobj/xmlsocket.cpp  16 Sep 2007 16:48:14 -0000      1.33
+++ server/asobj/xmlsocket.cpp  19 Sep 2007 14:20:50 -0000      1.34
@@ -642,7 +642,7 @@
                if ( vm.getSWFVersion() < 7 ) boost::to_lower(key, 
vm.getLocale());
 
                as_value tmp;
-               if (!get_member(string_table::find(key), &tmp) ) return ret;
+               if (!get_member(vm.getStringTable().find(key), &tmp) ) return 
ret;
                ret = tmp.to_as_function();
                return ret;
 }

Index: server/vm/ASHandlers.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/vm/ASHandlers.cpp,v
retrieving revision 1.134
retrieving revision 1.135
diff -u -b -r1.134 -r1.135
--- server/vm/ASHandlers.cpp    19 Sep 2007 06:27:46 -0000      1.134
+++ server/vm/ASHandlers.cpp    19 Sep 2007 14:20:50 -0000      1.135
@@ -17,7 +17,7 @@
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 //
 
-/* $Id: ASHandlers.cpp,v 1.134 2007/09/19 06:27:46 strk Exp $ */
+/* $Id: ASHandlers.cpp,v 1.135 2007/09/19 14:20:50 cmusick Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -2432,7 +2432,7 @@
         // Calling super ? 
         boost::intrusive_ptr<as_object> obj = function.to_object();
             this_ptr = thread.getThisPointer();
-        if (!obj->get_member(string_table::find("constructor"), &function) )
+        if (!obj->get_member(as_object::PROP_CONSTRUCTOR, &function) )
         {
             IF_VERBOSE_ASCODING_ERRORS (
             log_aserror(_("Object doensn't have a constructor"));
@@ -3065,7 +3065,7 @@
 
                        // TODO: all this crap should go into an 
as_object::getConstructor instead
                        as_value ctor;
-                       if (!obj->get_member(string_table::find("constructor"), 
&ctor) )
+                       if (!obj->get_member(as_object::PROP_CONSTRUCTOR, 
&ctor) )
                        {
                                IF_VERBOSE_ASCODING_ERRORS(
                                log_aserror(_("ActionCallMethod: object has no 
constructor"));

Index: server/vm/ActionExec.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/vm/ActionExec.cpp,v
retrieving revision 1.45
retrieving revision 1.46
diff -u -b -r1.45 -r1.46
--- server/vm/ActionExec.cpp    16 Sep 2007 16:48:15 -0000      1.45
+++ server/vm/ActionExec.cpp    19 Sep 2007 14:20:51 -0000      1.46
@@ -17,7 +17,7 @@
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 //
 
-/* $Id: ActionExec.cpp,v 1.45 2007/09/16 16:48:15 cmusick Exp $ */
+/* $Id: ActionExec.cpp,v 1.46 2007/09/19 14:20:51 cmusick Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -539,7 +539,7 @@
            boost::to_lower(namei, vm.getLocale());
        } 
 
-       std::pair<bool,bool> ret = obj.delProperty(string_table::find(namei));
+       std::pair<bool,bool> ret = 
obj.delProperty(vm.getStringTable().find(namei));
        return ret.second;
 }
 
@@ -609,9 +609,9 @@
        if ( vm.getSWFVersion() < 7 ) {
            std::string vari = var;
            boost::to_lower(vari, vm.getLocale());
-           obj.set_member(string_table::find(vari), val);
+           obj.set_member(vm.getStringTable().find(vari), val);
        } else {
-           obj.set_member(string_table::find(var), val);
+           obj.set_member(vm.getStringTable().find(var), val);
        }
        
 }
@@ -624,9 +624,9 @@
        if ( vm.getSWFVersion() < 7 ) {
            std::string vari = var;
            boost::to_lower(vari, vm.getLocale());
-           return obj.get_member(string_table::find(vari), &val);
+           return obj.get_member(vm.getStringTable().find(vari), &val);
        } else {
-           return obj.get_member(string_table::find(var), &val);
+           return obj.get_member(vm.getStringTable().find(var), &val);
        }
 
 }

Index: server/vm/VM.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/vm/VM.cpp,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -b -r1.18 -r1.19
--- server/vm/VM.cpp    13 Sep 2007 09:47:32 -0000      1.18
+++ server/vm/VM.cpp    19 Sep 2007 14:20:51 -0000      1.19
@@ -16,7 +16,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: VM.cpp,v 1.18 2007/09/13 09:47:32 strk Exp $ */
+/* $Id: VM.cpp,v 1.19 2007/09/19 14:20:51 cmusick Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -51,6 +51,82 @@
 
        assert(_singleton.get());
 
+// Load up our pre-known properties.
+string_table::svt preload_properties[] =
+{
+       { "addListener", as_object::PROP_ADD_LISTENER },
+       { "align", as_object::PROP_ALIGN },
+       { "_alpha", as_object::PROP_uALPHA },
+       { "blockIndent", as_object::PROP_BLOCK_INDENT },
+       { "bold", as_object::PROP_BOLD },
+       { "broadcastMessage", as_object::PROP_BROADCAST_MESSAGE },
+       { "bullet", as_object::PROP_BULLET },
+       { "callee", as_object::PROP_CALLEE },
+       { "color", as_object::PROP_COLOR },
+       { "constructor", as_object::PROP_CONSTRUCTOR },
+       { "__constructor__", as_object::PROP_uuCONSTRUCTORuu },
+       { "_currentframe", as_object::PROP_uCURRENTFRAME },
+       { "_droptarget", as_object::PROP_uDROPTARGET },
+       { "enabled", as_object::PROP_ENABLED },
+       { "_focusrect", as_object::PROP_uFOCUSRECT },
+       { "_framesloaded", as_object::PROP_uFRAMESLOADED },
+       { "_height", as_object::PROP_uHEIGHT },
+       { "_highquality", as_object::PROP_uHIGHQUALITY },
+       { "htmlText", as_object::PROP_HTML_TEXT },
+       { "indent", as_object::PROP_INDENT },
+       { "italic", as_object::PROP_ITALIC },
+       { "leading", as_object::PROP_LEADING },
+       { "left_margin", as_object::PROP_LEFT_MARGIN },
+       { "length", as_object::PROP_LENGTH },
+       { "_listeners", as_object::PROP_uLISTENERS },
+       { "loaded", as_object::PROP_LOADED },
+       { "_name", as_object::PROP_uNAME },
+       { "onLoad", as_object::PROP_ON_LOAD },
+       { "onResize", as_object::PROP_ON_RESIZE },
+       { "onRollOut", as_object::PROP_ON_ROLL_OUT },
+       { "onRollOver", as_object::PROP_ON_ROLL_OVER },
+       { "onSelect", as_object::PROP_ON_SELECT },
+       { "onStatus", as_object::PROP_ON_STATUS },
+       { "_parent", as_object::PROP_uPARENT },
+       { "__proto__", as_object::PROP_uuPROTOuu },
+       { "prototype", as_object::PROP_PROTOTYPE },
+       { "push", as_object::PROP_PUSH },
+       { "removeListener", as_object::PROP_REMOVE_LISTENER },
+       { "rightMargin", as_object::PROP_RIGHT_MARGIN },
+       { "_rotation", as_object::PROP_uROTATION },
+       { "scaleMode", as_object::PROP_SCALE_MODE },
+       { "size", as_object::PROP_SIZE },
+       { "_soundbuftime", as_object::PROP_uSOUNDBUFTIME },
+       { "splice", as_object::PROP_SPLICE },
+       { "Stage", as_object::PROP_iSTAGE },
+       { "status", as_object::PROP_STATUS },
+       { "_target", as_object::PROP_uTARGET },
+       { "text", as_object::PROP_TEXT },
+       { "textColor", as_object::PROP_TEXT_COLOR },
+       { "textWidth", as_object::PROP_TEXT_WIDTH },
+       { "toString", as_object::PROP_TO_STRING },
+       { "_totalframes", as_object::PROP_uTOTALFRAMES },
+       { "underline", as_object::PROP_UNDERLINE },
+       { "_url", as_object::PROP_uURL },
+       { "valueOf", as_object::PROP_VALUE_OF },
+       { "_visible", as_object::PROP_uVISIBLE },
+       { "_width", as_object::PROP_uWIDTH },
+       { "x", as_object::PROP_X },
+       { "_x", as_object::PROP_uX },
+       { "_xmouse", as_object::PROP_uXMOUSE },
+       { "_xscale", as_object::PROP_uXSCALE },
+       { "y", as_object::PROP_Y },
+       { "_y", as_object::PROP_uY },
+       { "_ymouse", as_object::PROP_uYMOUSE },
+       { "_yscale", as_object::PROP_uYSCALE }
+};
+       if (_singleton->getSWFVersion() < 7)
+       {
+               _singleton->mStringTable.lower_next_group();
+       }
+       _singleton->mStringTable.insert_group(preload_properties,
+               sizeof (preload_properties) / sizeof (string_table::svt));
+
        _singleton->setGlobal(new Global(*_singleton));
        assert(_singleton->getGlobal());
 

Index: server/vm/VM.h
===================================================================
RCS file: /sources/gnash/gnash/server/vm/VM.h,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -b -r1.15 -r1.16
--- server/vm/VM.h      7 Sep 2007 00:11:26 -0000       1.15
+++ server/vm/VM.h      19 Sep 2007 14:20:51 -0000      1.16
@@ -27,6 +27,7 @@
 #include "movie_root.h" // for composition
 #include "tu_types.h"  // for uint64_t
 #include "GC.h" // for ineritance of VmGcRoot
+#include "string_table.h" // for the string table
 
 #include <memory> // for auto_ptr
 #include <locale>
@@ -127,6 +128,8 @@
        ResVect _statics;
 #endif
 
+       mutable string_table mStringTable;
+
 public:
 
        /// \brief
@@ -166,6 +169,8 @@
        /// Get the number of milliseconds since VM was started
        uint64_t getTime();
 
+       string_table& getStringTable() const { return mStringTable; }
+
        /// Get version of the player, in a compatible representation
        //
        /// This information will be used for the System.capabilities.version

Index: server/vm/action.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/vm/action.cpp,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -b -r1.26 -r1.27
--- server/vm/action.cpp        16 Sep 2007 16:48:15 -0000      1.26
+++ server/vm/action.cpp        19 Sep 2007 14:20:51 -0000      1.27
@@ -124,7 +124,7 @@
 void register_component(const std::string& name, as_c_function_ptr handler)
 {
        as_object* global = VM::get().getGlobal();
-       global->set_member(string_table::find(name), handler);
+       global->set_member(VM::get().getStringTable().find(name), handler);
 }
 
 //
@@ -422,79 +422,6 @@
        }
 }
 
-// Standard member lookup.
-// TODO: move to character.h ?
-// TODO: case-insensitive search ?
-as_standard_member
-get_standard_member(string_table::key name)
-{
-       typedef std::map<string_table::key, as_standard_member>  maptype; 
-
-       static bool s_inited = false;
-       static maptype membersMap;
-
-       if (!s_inited)
-       {
-               s_inited = true;
-
-               // worth reserving ?
-               //membersMap.resize(int(AS_STANDARD_MEMBER_COUNT));
-
-               membersMap[string_table::find("_x")] = M_X;
-               membersMap[string_table::find("_y")] = M_Y;
-               membersMap[string_table::find("_xscale")] = M_XSCALE;
-               membersMap[string_table::find("_yscale")] = M_YSCALE;
-               membersMap[string_table::find("_currentframe")] = 
M_CURRENTFRAME;
-               membersMap[string_table::find("_totalframes")] = M_TOTALFRAMES;
-               membersMap[string_table::find("_alpha")] = M_ALPHA;
-               membersMap[string_table::find("_visible")] = M_VISIBLE;
-               membersMap[string_table::find("_width")] = M_WIDTH;
-               membersMap[string_table::find("_height")] = M_HEIGHT;
-               membersMap[string_table::find("_rotation")] = M_ROTATION;
-               membersMap[string_table::find("_target")] = M_TARGET;
-               membersMap[string_table::find("_framesloaded")] = 
M_FRAMESLOADED;
-               membersMap[string_table::find("_name")] = M_NAME;
-               membersMap[string_table::find("_droptarget")] = M_DROPTARGET;
-               membersMap[string_table::find("_url")] = M_URL;
-               membersMap[string_table::find("_highquality")] = M_HIGHQUALITY;
-               membersMap[string_table::find("_focusrect")] = M_FOCUSRECT;
-               membersMap[string_table::find("_soundbuftime")] = 
M_SOUNDBUFTIME;
-               membersMap[string_table::find("_xmouse")] = M_XMOUSE;
-               membersMap[string_table::find("_ymouse")] = M_YMOUSE;
-               membersMap[string_table::find("_parent")] = M_PARENT;
-               membersMap[string_table::find("text")] = M_TEXT;
-               if (VM::get().getSWFVersion() >= 7)
-               {
-                       membersMap[string_table::find("htmlText")] = M_HTMLTEXT;
-                       membersMap[string_table::find("textWidth")] = 
M_TEXTWIDTH;
-                       membersMap[string_table::find("textColor")] = 
M_TEXTCOLOR;
-                       membersMap[string_table::find("onLoad")] = M_ONLOAD;
-                       membersMap[string_table::find("onRollOver")] = 
M_ONROLLOVER;
-                       membersMap[string_table::find("onRollOut")] = 
M_ONROLLOUT;
-               }
-               else
-               {
-                       membersMap[string_table::find("htmltext")] = M_HTMLTEXT;
-                       membersMap[string_table::find("textwidth")] = 
M_TEXTWIDTH;
-                       membersMap[string_table::find("textcolor")] = 
M_TEXTCOLOR;
-                       membersMap[string_table::find("onload")] = M_ONLOAD;
-                       membersMap[string_table::find("onrollover")] = 
M_ONROLLOVER;
-                       membersMap[string_table::find("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;
-       }
-
-       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.11
retrieving revision 1.12
diff -u -b -r1.11 -r1.12
--- server/vm/action.h  16 Sep 2007 16:48:15 -0000      1.11
+++ server/vm/action.h  19 Sep 2007 14:20:51 -0000      1.12
@@ -104,49 +104,6 @@
        // 
        //void register_as_object(const char* object_name, as_c_function_ptr 
handler);
 
-       /// Numerical indices for standard member names.  Can use this
-       /// to help speed up get/set member calls, by using a switch()
-       /// instead of nasty string compares.
-       enum as_standard_member
-       {
-               M_INVALID_MEMBER = -1,
-               M_X,
-               M_Y,
-               M_XSCALE,
-               M_YSCALE,
-               M_CURRENTFRAME,
-               M_TOTALFRAMES,
-               M_ALPHA,
-               M_VISIBLE,
-               M_WIDTH,
-               M_HEIGHT,
-               M_ROTATION,
-               M_TARGET,
-               M_FRAMESLOADED,
-               M_NAME,
-               M_DROPTARGET,
-               M_URL,
-               M_HIGHQUALITY,
-               M_FOCUSRECT,
-               M_SOUNDBUFTIME,
-               M_XMOUSE,
-               M_YMOUSE,
-               M_PARENT,
-               M_TEXT,
-               M_HTMLTEXT,
-               M_TEXTWIDTH,
-               M_TEXTCOLOR,
-               M_ONLOAD,
-               M_ONROLLOVER,
-               M_ONROLLOUT,
-
-               AS_STANDARD_MEMBER_COUNT
-       };
-
-       /// 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(string_table::key name);
-
        // deprecated, use sprite_instance::loadMovie
        //void attach_extern_movie(const char* c_url, const sprite_instance* 
target, const sprite_instance* root_movie);
 

Index: testsuite/misc-ming.all/DefineEditTextVariableNameTest2.c
===================================================================
RCS file: 
/sources/gnash/gnash/testsuite/misc-ming.all/DefineEditTextVariableNameTest2.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- testsuite/misc-ming.all/DefineEditTextVariableNameTest2.c   18 Sep 2007 
14:57:23 -0000      1.4
+++ testsuite/misc-ming.all/DefineEditTextVariableNameTest2.c   19 Sep 2007 
14:20:51 -0000      1.5
@@ -154,7 +154,7 @@
   
   add_actions(mo, "dtext1.variable = 'newName'; ");
   // Maybe 'variable' is the connection point?
-  xcheck_equals(mo, "dtext1.text", "'Hello'");
+  check_equals(mo, "dtext1.text", "'Hello'");
   // Change 'variable' back to its orignal string.
   add_actions(mo, "dtext1.variable = 'edit_text_var'; ");
   check_equals(mo, "dtext1.text", "'Hahaha'");

Index: testsuite/misc-ming.all/KeyTest-Runner.cpp
===================================================================
RCS file: /sources/gnash/gnash/testsuite/misc-ming.all/KeyTest-Runner.cpp,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- testsuite/misc-ming.all/KeyTest-Runner.cpp  16 Sep 2007 16:48:15 -0000      
1.5
+++ testsuite/misc-ming.all/KeyTest-Runner.cpp  19 Sep 2007 14:20:51 -0000      
1.6
@@ -58,33 +58,33 @@
 
        as_value tmp;
 
-       check(mc1->get_member(string_table::find("_x"), &tmp));
+       check(mc1->get_member(as_object::PROP_uX, &tmp));
        check_equals(tmp.to_number(), 0);
 
        tester.advance();
        check_equals(root->get_current_frame(), 2);
 
-       check(mc1->get_member(string_table::find("_x"), &tmp));
+       check(mc1->get_member(as_object::PROP_uX, &tmp));
        check_equals(tmp.to_number(), 200);
 
        tester.pressKey(key::J);
 
-       check(mc1->get_member(string_table::find("_x"), &tmp));
+       check(mc1->get_member(as_object::PROP_uX, &tmp));
        check_equals(tmp.to_number(), 250);
 
        tester.pressKey(key::K);
 
-       check(mc1->get_member(string_table::find("_x"), &tmp));
+       check(mc1->get_member(as_object::PROP_uX, &tmp));
        check_equals(tmp.to_number(), 300);
 
        tester.releaseKey(key::A);
 
-       check(mc1->get_member(string_table::find("_x"), &tmp));
+       check(mc1->get_member(as_object::PROP_uX, &tmp));
        check_equals(tmp.to_number(), 250);
 
        tester.releaseKey(key::B);
 
-       check(mc1->get_member(string_table::find("_x"), &tmp));
+       check(mc1->get_member(as_object::PROP_uX, &tmp));
        check_equals(tmp.to_number(), 200);
 
        // TODO: test pressing and releases keys

Index: testsuite/misc-ming.all/Makefile.am
===================================================================
RCS file: /sources/gnash/gnash/testsuite/misc-ming.all/Makefile.am,v
retrieving revision 1.153
retrieving revision 1.154
diff -u -b -r1.153 -r1.154
--- testsuite/misc-ming.all/Makefile.am 13 Sep 2007 18:33:20 -0000      1.153
+++ testsuite/misc-ming.all/Makefile.am 19 Sep 2007 14:20:51 -0000      1.154
@@ -43,6 +43,8 @@
        -I$(top_srcdir)/backend \
        -I$(top_srcdir)/server  \
        -I$(top_srcdir)/server/parser  \
+       -I$(top_srcdir)/server/vm \
+       -I$(top_srcdir)/server/asobj \
        -I$(top_srcdir)/libgeometry \
        -I$(top_srcdir)/testsuite \
        $(MING_CFLAGS) \

Index: testsuite/misc-ming.all/attachMovieTestRunner.cpp
===================================================================
RCS file: 
/sources/gnash/gnash/testsuite/misc-ming.all/attachMovieTestRunner.cpp,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -b -r1.13 -r1.14
--- testsuite/misc-ming.all/attachMovieTestRunner.cpp   16 Sep 2007 16:48:15 
-0000      1.13
+++ testsuite/misc-ming.all/attachMovieTestRunner.cpp   19 Sep 2007 14:20:51 
-0000      1.14
@@ -26,6 +26,7 @@
 #include "dlist.h"
 #include "container.h"
 #include "log.h"
+#include "VM.h"
 
 #include "check.h"
 #include <string>
@@ -79,23 +80,25 @@
        // check that the pixel under the mouse is white
        check_pixel(100, 30, 2, rgba(255,255,255,255), 2);
 
-       root->get_member(string_table::find("mousedown"), &tmp);
+       string_table& st = VM::get().getStringTable();
+
+       root->get_member(st.find("mousedown"), &tmp);
        check(tmp.is_undefined());
-       root->get_member(string_table::find("mouseup"), &tmp);
+       root->get_member(st.find("mouseup"), &tmp);
        check(tmp.is_undefined());
 
        // Note that we are *not* on an active entity !
        tester.pressMouseButton();
 
-       root->get_member(string_table::find("mousedown"), &tmp);
+       root->get_member(st.find("mousedown"), &tmp);
        check_equals(tmp.to_number(), 1);
-       check ( ! root->get_member(string_table::find("mouseup"), &tmp) );
+       check ( ! root->get_member(st.find("mouseup"), &tmp) );
 
        tester.depressMouseButton();
 
-       root->get_member(string_table::find("mousedown"), &tmp);
+       root->get_member(st.find("mousedown"), &tmp);
        check_equals(tmp.to_number(), 1);
-       root->get_member(string_table::find("mouseup"), &tmp);
+       root->get_member(st.find("mouseup"), &tmp);
        check_equals(tmp.to_number(), 1);
 
        tester.advance();
@@ -152,7 +155,7 @@
        // Note that we are *not* on an active entity !
        tester.pressMouseButton();
 
-       root->get_member(string_table::find("mousedown"), &tmp);
+       root->get_member(st.find("mousedown"), &tmp);
        check_equals(tmp.to_number(), 5);
 
 }

Index: testsuite/misc-ming.all/intervalTestRunner.cpp
===================================================================
RCS file: /sources/gnash/gnash/testsuite/misc-ming.all/intervalTestRunner.cpp,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -b -r1.7 -r1.8
--- testsuite/misc-ming.all/intervalTestRunner.cpp      16 Sep 2007 16:48:15 
-0000      1.7
+++ testsuite/misc-ming.all/intervalTestRunner.cpp      19 Sep 2007 14:20:51 
-0000      1.8
@@ -26,6 +26,7 @@
 #include "dlist.h"
 #include "container.h"
 #include "log.h"
+#include "VM.h"
 
 #include "check.h"
 #include <string>
@@ -60,65 +61,66 @@
 
        // Now timers are set and counters initialized
 
-       root->get_member(string_table::find("this_counter"), &tmp);
+       string_table& st = VM::get().getStringTable();
+       root->get_member(st.find("this_counter"), &tmp);
        check_equals(tmp.to_number(), 0);
-       root->get_member(string_table::find("that_counter"), &tmp);
+       root->get_member(st.find("that_counter"), &tmp);
        check_equals(tmp.to_number(), 0);
 
        usleep(500000); tester.advance(); // run expired timers
 
-       root->get_member(string_table::find("this_counter"), &tmp);
+       root->get_member(st.find("this_counter"), &tmp);
        check_equals(tmp.to_number(), 1);
-       root->get_member(string_table::find("that_counter"), &tmp);
+       root->get_member(st.find("that_counter"), &tmp);
        check_equals(tmp.to_number(), 0);
 
        usleep(500000); tester.advance(); // run expired timers
 
-       root->get_member(string_table::find("this_counter"), &tmp);
+       root->get_member(st.find("this_counter"), &tmp);
        check_equals(tmp.to_number(), 2);
-       root->get_member(string_table::find("that_counter"), &tmp);
+       root->get_member(st.find("that_counter"), &tmp);
        check_equals(tmp.to_number(), 1);
 
        usleep(500000); tester.advance(); // run expired timers
 
-       root->get_member(string_table::find("this_counter"), &tmp);
+       root->get_member(st.find("this_counter"), &tmp);
        check_equals(tmp.to_number(), 3);
-       root->get_member(string_table::find("that_counter"), &tmp);
+       root->get_member(st.find("that_counter"), &tmp);
        check_equals(tmp.to_number(), 1);
 
        usleep(500000); tester.advance(); // run expired timers
 
-       root->get_member(string_table::find("this_counter"), &tmp);
+       root->get_member(st.find("this_counter"), &tmp);
        check_equals(tmp.to_number(), 4);
-       root->get_member(string_table::find("that_counter"), &tmp);
+       root->get_member(st.find("that_counter"), &tmp);
        check_equals(tmp.to_number(), 2);
 
        usleep(1000000); tester.advance(); // run expired timers
 
-       root->get_member(string_table::find("this_counter"), &tmp);
+       root->get_member(st.find("this_counter"), &tmp);
        check_equals(tmp.to_number(), 4);
-       root->get_member(string_table::find("that_counter"), &tmp);
+       root->get_member(st.find("that_counter"), &tmp);
        check_equals(tmp.to_number(), 3);
 
        usleep(1000000); tester.advance(); // run expired timers
 
-       root->get_member(string_table::find("this_counter"), &tmp);
+       root->get_member(st.find("this_counter"), &tmp);
        check_equals(tmp.to_number(), 4);
-       root->get_member(string_table::find("that_counter"), &tmp);
+       root->get_member(st.find("that_counter"), &tmp);
        check_equals(tmp.to_number(), 4);
 
        usleep(500000); tester.advance(); // run expired timers
 
-       root->get_member(string_table::find("this_counter"), &tmp);
+       root->get_member(st.find("this_counter"), &tmp);
        check_equals(tmp.to_number(), 5);
-       root->get_member(string_table::find("that_counter"), &tmp);
+       root->get_member(st.find("that_counter"), &tmp);
        check_equals(tmp.to_number(), 4);
 
-       root->get_member(string_table::find("pushed_args"), &tmp);
+       root->get_member(st.find("pushed_args"), &tmp);
        as_environment env; // needed for proper to_string()
        check_equals(tmp.to_string(&env), std::string("8,9,10"));
 
-       root->get_member(string_table::find("test_completed"), &tmp);
+       root->get_member(st.find("test_completed"), &tmp);
        check_equals(tmp.to_number(), 1);
 
 

Index: testsuite/misc-ming.all/key_event_test2runner.cpp
===================================================================
RCS file: 
/sources/gnash/gnash/testsuite/misc-ming.all/key_event_test2runner.cpp,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -b -r1.6 -r1.7
--- testsuite/misc-ming.all/key_event_test2runner.cpp   16 Sep 2007 16:48:15 
-0000      1.6
+++ testsuite/misc-ming.all/key_event_test2runner.cpp   19 Sep 2007 14:20:51 
-0000      1.7
@@ -25,6 +25,7 @@
 #include "dlist.h"
 #include "container.h"
 #include "log.h"
+#include "VM.h"
 
 #include "check.h"
 #include <string>
@@ -58,7 +59,8 @@
   check(mc);
 
   as_value tmp;
-  check(root->get_member(string_table::find("x1"), &tmp));
+  string_table& st = VM::get().getStringTable();
+  check(root->get_member(st.find("x1"), &tmp));
   check_equals(tmp.to_number(), 0);
   
   // press key 'A' and checks
@@ -66,7 +68,7 @@
   tester.releaseKey(key::A);
 
   // check that KeyDown have been triggered
-  check(root->get_member(string_table::find("x1"), &tmp));
+  check(root->get_member(st.find("x1"), &tmp));
   check_equals(tmp.to_number(), 1);
 
   
@@ -75,7 +77,7 @@
    tester.pressKey(key::A);
    tester.releaseKey(key::A);
   // check that no KeyDown was triggered(no key event handler at frame1);
-  check(root->get_member(string_table::find("x1"), &tmp));
+  check(root->get_member(st.find("x1"), &tmp));
   check_equals(tmp.to_number(), 0);
 
   tester.advance(); // advance to frame2
@@ -87,7 +89,7 @@
   tester.releaseKey(key::A);
 
   // check that KeyDown have been triggered
-  check(root->get_member(string_table::find("x1"), &tmp));
+  check(root->get_member(st.find("x1"), &tmp));
   check_equals(tmp.to_number(), 1); 
 
   tester.advance(); // loop back to frame1 again
@@ -95,7 +97,7 @@
   tester.pressKey(key::A);
   tester.releaseKey(key::A);
   // check that no KeyDown was triggered(no key event handler at frame1);
-  check(root->get_member(string_table::find("x1"), &tmp));
+  check(root->get_member(st.find("x1"), &tmp));
   check_equals(tmp.to_number(), 0);
 
   tester.advance(); // advance to frame2
@@ -107,7 +109,7 @@
   tester.releaseKey(key::A);
 
   // check that KeyDown have been triggered
-  check(root->get_member(string_table::find("x1"), &tmp));
+  check(root->get_member(st.find("x1"), &tmp));
   check_equals(tmp.to_number(), 1);
   
   return 0; 

Index: testsuite/misc-ming.all/key_event_test3runner.cpp
===================================================================
RCS file: 
/sources/gnash/gnash/testsuite/misc-ming.all/key_event_test3runner.cpp,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- testsuite/misc-ming.all/key_event_test3runner.cpp   16 Sep 2007 16:48:15 
-0000      1.4
+++ testsuite/misc-ming.all/key_event_test3runner.cpp   19 Sep 2007 14:20:51 
-0000      1.5
@@ -25,6 +25,7 @@
 #include "dlist.h"
 #include "container.h"
 #include "log.h"
+#include "VM.h"
 
 #include "check.h"
 #include <string>
@@ -55,7 +56,9 @@
   check(mc);
 
   as_value tmp;
-  check(root->get_member(string_table::find("x1"), &tmp));
+  string_table& st = VM::get().getStringTable();
+  string_table::key x1key = st.find("x1");
+  check(root->get_member(x1key, &tmp));
   check_equals(tmp.to_number(), 0);
   
   // press key 'A' and checks
@@ -63,7 +66,7 @@
   tester.releaseKey(key::A);
 
   // check that KeyDown have been triggered
-  check(root->get_member(string_table::find("x1"), &tmp));
+  check(root->get_member(x1key, &tmp));
   check_equals(tmp.to_number(), 1);
 
   
@@ -72,7 +75,7 @@
    tester.pressKey(key::A);
    tester.releaseKey(key::A);
   // check that no KeyDown was triggered(no key event handler at frame1);
-  check(root->get_member(string_table::find("x1"), &tmp));
+  check(root->get_member(x1key, &tmp));
   check_equals(tmp.to_number(), 0); 
 
   tester.advance(); // advance to frame2
@@ -83,7 +86,7 @@
   tester.releaseKey(key::A);
 
   // check that KeyDown have been triggered
-  check(root->get_member(string_table::find("x1"), &tmp));
+  check(root->get_member(x1key, &tmp));
   check_equals(tmp.to_number(), 1); 
 
   tester.advance(); // loop back to frame1 again
@@ -91,7 +94,7 @@
   tester.pressKey(key::A);
   tester.releaseKey(key::A);
   // check that no KeyDown was triggered(no key event handler at frame1);
-  check(root->get_member(string_table::find("x1"), &tmp));
+  check(root->get_member(x1key, &tmp));
   check_equals(tmp.to_number(), 0);
 
   tester.advance(); // advance to frame2
@@ -102,7 +105,7 @@
   tester.releaseKey(key::A);
 
   // check that KeyDown have been triggered
-  check(root->get_member(string_table::find("x1"), &tmp));
+  check(root->get_member(x1key, &tmp));
   check_equals(tmp.to_number(), 1);
   
   return 0; 

Index: testsuite/misc-ming.all/key_event_test5runner.cpp
===================================================================
RCS file: 
/sources/gnash/gnash/testsuite/misc-ming.all/key_event_test5runner.cpp,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- testsuite/misc-ming.all/key_event_test5runner.cpp   16 Sep 2007 16:48:15 
-0000      1.3
+++ testsuite/misc-ming.all/key_event_test5runner.cpp   19 Sep 2007 14:20:51 
-0000      1.4
@@ -25,6 +25,7 @@
 #include "dlist.h"
 #include "container.h"
 #include "log.h"
+#include "VM.h"
 
 #include "check.h"
 #include <string>
@@ -50,9 +51,10 @@
   tester.advance();
   
   as_value tmp;
+  string_table& st = VM::get().getStringTable();
   // Gnash fails because it forget to do the case conversion.
   // A big old bug!
-  xcheck(root->get_member(string_table::find("hasKeyPressed"), &tmp));
+  xcheck(root->get_member(st.find("hasKeyPressed"), &tmp));
   check_equals(tmp.to_number(), 0.0);
   
   // Provide a key event and that's all.
@@ -69,7 +71,7 @@
   
   // Gnash fails because it forget to do the case conversion.
   // A big old bug!
-  xcheck(root->get_member(string_table::find("hasKeyPressed"), &tmp));
+  xcheck(root->get_member(st.find("hasKeyPressed"), &tmp));
   xcheck_equals(tmp.to_number(), 1.0);
   
   // Provide a key event. 

Index: testsuite/misc-ming.all/key_event_testrunner.cpp
===================================================================
RCS file: 
/sources/gnash/gnash/testsuite/misc-ming.all/key_event_testrunner.cpp,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -b -r1.7 -r1.8
--- testsuite/misc-ming.all/key_event_testrunner.cpp    16 Sep 2007 16:48:15 
-0000      1.7
+++ testsuite/misc-ming.all/key_event_testrunner.cpp    19 Sep 2007 14:20:52 
-0000      1.8
@@ -26,6 +26,7 @@
 #include "dlist.h"
 #include "container.h"
 #include "log.h"
+#include "VM.h"
 
 #include "check.h"
 #include <string>
@@ -56,8 +57,10 @@
   check(mc);
 
   as_value tmp;
+  string_table& st = VM::get().getStringTable();
+  string_table::key x1key = st.find("x1");
 
-  check(root->get_member(string_table::find("x1"), &tmp));
+  check(root->get_member(x1key, &tmp));
   check_equals(tmp.to_number(), 0);
   
   // press key 'A' and checks
@@ -65,15 +68,15 @@
   tester.releaseKey(key::A);
 
   // check that onClipKeyUp/KeyDown have been triggered
-  check(root->get_member(string_table::find("x1"), &tmp));
+  check(root->get_member(x1key, &tmp));
   check_equals(tmp.to_string(), "A");
-  check(root->get_member(string_table::find("x2"), &tmp));
+  check(root->get_member(st.find("x2"), &tmp));
   check_equals(tmp.to_number(), key::A);
 
   // check that user defined onKeyUp/KeyDown were not triggered
-  check(root->get_member(string_table::find("x4"), &tmp));
+  check(root->get_member(st.find("x4"), &tmp));
   check_equals(tmp.to_number(), 0);
-  check(root->get_member(string_table::find("x5"), &tmp));
+  check(root->get_member(st.find("x5"), &tmp));
   check_equals(tmp.to_number(), 0);
 
   for(int i=1; i<30; i++)
@@ -89,24 +92,24 @@
   tester.releaseKey(key::C);
 
   // check that onClipKeyUp/KeyDown have been triggered
-  check(root->get_member(string_table::find("x1"), &tmp));
+  check(root->get_member(x1key, &tmp));
   check_equals(tmp.to_string(), "C");
-  check(root->get_member(string_table::find("x2"), &tmp));
+  check(root->get_member(st.find("x2"), &tmp));
   check_equals(tmp.to_number(), key::C);
   
   // check that user defined onKeyUp/KeyDown have been triggered
-  check(root->get_member(string_table::find("x4"), &tmp));
+  check(root->get_member(st.find("x4"), &tmp));
   check_equals(tmp.to_string(), "C");
-  check(root->get_member(string_table::find("x5"), &tmp));
+  check(root->get_member(st.find("x5"), &tmp));
   check_equals(tmp.to_number(), key::C);
        
   // check that user onClipKeyPress and user defined onKeyPress were not 
triggered
   // onClipKeyPress was not triggered because the event handler binds a 
invalid key code
-  check(root->get_member(string_table::find("x3"), &tmp));
+  check(root->get_member(st.find("x3"), &tmp));
   check_equals(tmp.to_number(), 0);
   // onKeyPress was not triggered because I think there is no user defined
   // KeyPress event handler at all( the defined onKeyPress is just a normal 
function).
-  check(root->get_member(string_table::find("x6"), &tmp));
+  check(root->get_member(st.find("x6"), &tmp));
   check_equals(tmp.to_number(), 0);
   
 }

Index: testsuite/movies.all/Makefile.am
===================================================================
RCS file: /sources/gnash/gnash/testsuite/movies.all/Makefile.am,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -b -r1.8 -r1.9
--- testsuite/movies.all/Makefile.am    1 Jul 2007 10:55:09 -0000       1.8
+++ testsuite/movies.all/Makefile.am    19 Sep 2007 14:20:52 -0000      1.9
@@ -42,6 +42,8 @@
         -I$(top_srcdir)/backend \
         -I$(top_srcdir)/server  \
         -I$(top_srcdir)/server/parser  \
+               -I$(top_srcdir)/server/vm \
+               -I$(top_srcdir)/server/asobj \
         -I$(top_srcdir)/libgeometry \
         -I$(top_srcdir)/testsuite \
        $(BOOST_CFLAGS) \

Index: testsuite/movies.all/gravity_embedded-TestRunner.cpp
===================================================================
RCS file: 
/sources/gnash/gnash/testsuite/movies.all/gravity_embedded-TestRunner.cpp,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -b -r1.8 -r1.9
--- testsuite/movies.all/gravity_embedded-TestRunner.cpp        16 Sep 2007 
16:48:15 -0000      1.8
+++ testsuite/movies.all/gravity_embedded-TestRunner.cpp        19 Sep 2007 
14:20:52 -0000      1.9
@@ -26,6 +26,7 @@
 #include "dlist.h"
 #include "container.h"
 #include "log.h"
+#include "VM.h"
 
 #include "check.h"
 #include <string>
@@ -65,8 +66,9 @@
        check(loaded);
        check_equals(loaded->get_parent(), root);
 
-       string_table::key xscale = string_table::find("_xscale");
-       string_table::key yscale = string_table::find("_yscale");
+       string_table& st = VM::get().getStringTable();
+       string_table::key xscale = st.find("_xscale");
+       string_table::key yscale = st.find("_yscale");
        // we need a const_cast as get_member *might* eventually
        // change the character (fetching _x shouldn't change it though)
        check(const_cast<character*>(loaded)->get_member(xscale, &tmp));

Index: testsuite/server/GetterSetterTest.cpp
===================================================================
RCS file: /sources/gnash/gnash/testsuite/server/GetterSetterTest.cpp,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -b -r1.16 -r1.17
--- testsuite/server/GetterSetterTest.cpp       16 Sep 2007 16:48:15 -0000      
1.16
+++ testsuite/server/GetterSetterTest.cpp       19 Sep 2007 14:20:52 -0000      
1.17
@@ -53,7 +53,7 @@
        boost::intrusive_ptr<as_object> o = fn.this_ptr;
        assert(fn.nargs == 1);
        as_value& val = fn.arg(0);
-       o->set_member(string_table::find(val.to_string(&fn.env())), val);
+       
o->set_member(VM::get().getStringTable().find(val.to_string(&fn.env())), val);
        return as_value();
 }
 

Index: testsuite/server/PropertyListTest.cpp
===================================================================
RCS file: /sources/gnash/gnash/testsuite/server/PropertyListTest.cpp,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -b -r1.18 -r1.19
--- testsuite/server/PropertyListTest.cpp       16 Sep 2007 16:48:16 -0000      
1.18
+++ testsuite/server/PropertyListTest.cpp       19 Sep 2007 14:20:52 -0000      
1.19
@@ -64,49 +64,51 @@
        as_value val3("value3");
        as_value ret;
 
+       string_table& st = vm.getStringTable();
+
        check_equals(props.size(), 0);
-       check ( props.setValue(string_table::find("Var0"), val, obj) );
+       check ( props.setValue(st.find("Var0"), val, obj) );
        check_equals(props.size(), 1);
 
-       check ( props.getValue(string_table::find("Var0"), ret, obj) );
+       check ( props.getValue(st.find("Var0"), ret, obj) );
        check_equals ( ret, val );
 
        // search should be case-sensitive
-       check ( ! props.getValue(string_table::find("var0"), ret, obj) );
+       check ( ! props.getValue(st.find("var0"), ret, obj) );
 
        // new value overrides existing value
-       check ( props.setValue(string_table::find("Var0"), val2, obj) );
+       check ( props.setValue(st.find("Var0"), val2, obj) );
        check_equals(props.size(), 1);
-       check ( props.getValue(string_table::find("Var0"), ret, obj) );
+       check ( props.getValue(st.find("Var0"), ret, obj) );
        check_equals ( ret, val2 );
 
        // case-sensitive setting value doesn't overrides existing value
-       check ( props.setValue(string_table::find("var0"), val3, obj) );
+       check ( props.setValue(st.find("var0"), val3, obj) );
        check_equals(props.size(), 2);
-       check ( ! props.getValue(string_table::find("vAr0"), ret, obj) );
+       check ( ! props.getValue(st.find("vAr0"), ret, obj) );
 
        // Now add some new labels
-       check ( props.setValue(string_table::find("var1"), val, obj) );
+       check ( props.setValue(st.find("var1"), val, obj) );
        check_equals(props.size(), 3);
-       check ( props.setValue(string_table::find("var2"), val, obj) );
+       check ( props.setValue(st.find("var2"), val, obj) );
        check_equals(props.size(), 4);
-       check ( props.setValue(string_table::find("var3"), val, obj) );
+       check ( props.setValue(st.find("var3"), val, obj) );
        check_equals(props.size(), 5);
 
        // Test deletion of properties
 
        // this succeeds
-       check(props.delProperty(string_table::find("var3")).second);
+       check(props.delProperty(st.find("var3")).second);
        check_equals(props.size(), 4);
 
        // this fails (non existent property)
-       check(!props.delProperty(string_table::find("non-existent")).first);
+       check(!props.delProperty(st.find("non-existent")).first);
        check_equals(props.size(), 4);
 
        // Set property var2 as protected from deletion!
-       check(props.setFlags(string_table::find("var2"), 
as_prop_flags::dontDelete, 0));
+       check(props.setFlags(st.find("var2"), as_prop_flags::dontDelete, 0));
        // this fails (protected from deletion)
-       std::pair<bool, bool> delpair = 
props.delProperty(string_table::find("var2"));
+       std::pair<bool, bool> delpair = props.delProperty(st.find("var2"));
        check_equals(delpair.first, true); // property was found
        check_equals(delpair.second, false); // property was NOT deleted
        check_equals(props.size(), 4);




reply via email to

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