gnash-commit
[Top][All Lists]
Advanced

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

[Gnash-commit] /srv/bzr/gnash/trunk r11531: Strike another blow for re-e


From: Benjamin Wolsey
Subject: [Gnash-commit] /srv/bzr/gnash/trunk r11531: Strike another blow for re-entrancy by removing the overridden get_member
Date: Thu, 01 Oct 2009 12:39:03 +0200
User-agent: Bazaar (1.16.1)

------------------------------------------------------------
revno: 11531 [merge]
committer: Benjamin Wolsey <address@hidden>
branch nick: trunk
timestamp: Thu 2009-10-01 12:39:03 +0200
message:
  Strike another blow for re-entrancy by removing the overridden get_member
  and set_member in TextField. This involves implementing the 'magic'
  DisplayObject properties (properties not in the inheritance chain) more
  correctly.
  
  To do this, the core must know which objects are DisplayObjects. This
  is done using a flag rather than relying on RTTI.
  
  Approximately 200 more passes in the testsuite from better TextField 
  dimensions handling (though it never has been and still is not even
  nearly correct) and from correct object properties.
  
  TextFields and Buttons now also gain properties that they should have but
  which were absent before.
modified:
  libcore/Button.cpp
  libcore/DisplayObject.cpp
  libcore/DisplayObject.h
  libcore/MovieClip.cpp
  libcore/TextField.cpp
  libcore/TextField.h
  libcore/Video.cpp
  libcore/as_object.cpp
  libcore/as_object.h
  libcore/asobj/flash/display/MovieClip_as.cpp
  testsuite/actionscript.all/MovieClip.as
  testsuite/actionscript.all/TextField.as
  testsuite/misc-haxe.all/classes.all/text/TextField_as.hx
  testsuite/misc-ming.all/DefineEditTextTest.c
  testsuite/misc-ming.all/DeviceFontTest.c
  testsuite/misc-ming.all/EmbeddedFontTest.c
  testsuite/misc-ming.all/NetStream-SquareTest.c
=== modified file 'libcore/Button.cpp'
--- a/libcore/Button.cpp        2009-08-27 05:46:44 +0000
+++ b/libcore/Button.cpp        2009-09-30 15:20:47 +0000
@@ -252,59 +252,15 @@
     return (!ch || (!includeUnloaded && ch->unloaded()));
 }
 
+void
+attachButtonProperties(as_object& o)
+{
+    attachDisplayObjectProperties(o);
+}
+
 static void
 attachButtonInterface(as_object& o)
 {
-
-    as_c_function_ptr gettersetter;
-
-    o.init_property(NSV::PROP_uQUALITY, DisplayObject::quality,
-            DisplayObject::quality);
-    
-    o.init_property(NSV::PROP_uHIGHQUALITY, DisplayObject::highquality,
-            DisplayObject::highquality);
-
-    gettersetter = &DisplayObject::x_getset;
-    o.init_property(NSV::PROP_uX, *gettersetter, *gettersetter);
-
-    gettersetter = &DisplayObject::y_getset;
-    o.init_property(NSV::PROP_uY, *gettersetter, *gettersetter);
-
-    gettersetter = &DisplayObject::xscale_getset;
-    o.init_property(NSV::PROP_uXSCALE, *gettersetter, *gettersetter);
-
-    gettersetter = &DisplayObject::yscale_getset;
-    o.init_property(NSV::PROP_uYSCALE, *gettersetter, *gettersetter);
-
-    gettersetter = &DisplayObject::xmouse_get;
-    o.init_readonly_property(NSV::PROP_uXMOUSE, *gettersetter);
-
-    gettersetter = &DisplayObject::ymouse_get;
-    o.init_readonly_property(NSV::PROP_uYMOUSE, *gettersetter);
-
-    gettersetter = &DisplayObject::alpha_getset;
-    o.init_property(NSV::PROP_uALPHA, *gettersetter, *gettersetter);
-
-    gettersetter = &DisplayObject::visible_getset;
-    o.init_property(NSV::PROP_uVISIBLE, *gettersetter, *gettersetter);
-
-    gettersetter = &DisplayObject::width_getset;
-    o.init_property(NSV::PROP_uWIDTH, *gettersetter, *gettersetter);
-
-    gettersetter = &DisplayObject::height_getset;
-    o.init_property(NSV::PROP_uHEIGHT, *gettersetter, *gettersetter);
-
-    gettersetter = &DisplayObject::rotation_getset;
-    o.init_property(NSV::PROP_uROTATION, *gettersetter, *gettersetter);
-
-    gettersetter = &DisplayObject::parent_getset;
-    o.init_property(NSV::PROP_uPARENT, *gettersetter, *gettersetter);
-    
-    gettersetter = &DisplayObject::target_getset;
-    o.init_property(NSV::PROP_uTARGET, *gettersetter, *gettersetter);
-
-    gettersetter = DisplayObject::name_getset;
-    o.init_property(NSV::PROP_uNAME, gettersetter, gettersetter);
     
     const int unprotected = 0;
     o.init_member(NSV::PROP_ENABLED, true, unprotected);
@@ -324,6 +280,9 @@
 
     set_prototype(getButtonInterface());
 
+    // TODO: should be done in a creation function.
+    attachButtonProperties(*this);
+
     // check up presence Key events
     if (_def->hasKeyPressHandler()) {
         getRoot(*this).add_key_listener(this);

=== modified file 'libcore/DisplayObject.cpp'
--- a/libcore/DisplayObject.cpp 2009-07-14 06:01:56 +0000
+++ b/libcore/DisplayObject.cpp 2009-10-01 08:50:26 +0000
@@ -34,6 +34,7 @@
 #include "namedStrings.h"
 #include "gnash.h" // Quality
 #include "GnashNumeric.h"
+#include "Global_as.h"
 
 #ifdef USE_SWFTREE
 # include "tree.hh"
@@ -55,9 +56,17 @@
     const BlendModeMap& getBlendModeMap();
     bool blendModeMatches(const BlendModeMap::value_type& val,
             const std::string& mode);
+    
+    typedef as_value(*Getter)(DisplayObject&);
+    typedef std::map<string_table::key, Getter> Getters;
+    typedef void(*Setter)(DisplayObject&, const as_value&);
+    typedef std::map<string_table::key, Setter> Setters;
+
+    const Getters displayObjectGetters();
+    const Setters displayObjectSetters();
+
 }
 
-
 // Define static const members.
 const int DisplayObject::lowerAccessibleBound;
 const int DisplayObject::upperAccessibleBound;
@@ -92,6 +101,9 @@
 {
     assert((!parent && m_id == -1) || ((parent) && m_id >= 0));
     assert(m_old_invalidated_ranges.isNull());
+
+    // This informs the core that the object is a DisplayObject.
+    setDisplayObject();
 }
 
 /*protected static*/
@@ -108,8 +120,7 @@
 DisplayObject::getWorldMatrix(bool includeRoot) const
 {
        SWFMatrix m;
-       if (m_parent)
-       {
+       if (m_parent) {
            m = m_parent->getWorldMatrix(includeRoot);
        }
     if (m_parent || includeRoot) m.concatenate(getMatrix());
@@ -268,395 +279,9 @@
        m_old_invalidated_ranges.add(ranges);
 }
 
-//---------------------------------------------------------------------
-//
-// Shared ActionScript getter-setters
-//
-//---------------------------------------------------------------------
-
-as_value
-DisplayObject::quality(const fn_call& fn)
-{
-    boost::intrusive_ptr<DisplayObject> ptr =
-        ensureType<DisplayObject>(fn.this_ptr);
-
-    movie_root& mr = getRoot(*ptr);
-
-    if (!fn.nargs)
-    {
-        switch (mr.getQuality())
-        {
-            case QUALITY_BEST:
-                return as_value("BEST");
-            case QUALITY_HIGH:
-                return as_value("HIGH");
-            case QUALITY_MEDIUM:
-                return as_value("MEDIUM");
-            case QUALITY_LOW:
-                return as_value("LOW");
-        }
-    }
-
-    /// Setter
-
-    if (!fn.arg(0).is_string()) return as_value();
-
-    const std::string& q = fn.arg(0).to_string();
-
-    StringNoCaseEqual noCaseCompare;
-
-    if (noCaseCompare(q, "BEST")) mr.setQuality(QUALITY_BEST);
-    else if (noCaseCompare(q, "HIGH")) {
-        mr.setQuality(QUALITY_HIGH);
-    }
-    else if (noCaseCompare(q, "MEDIUM")) {
-        mr.setQuality(QUALITY_MEDIUM);
-    }
-    else if (noCaseCompare(q, "LOW")) {
-            mr.setQuality(QUALITY_LOW);
-    }
-
-    return as_value();
-}
-
-as_value
-DisplayObject::highquality(const fn_call& fn)
-{
-    boost::intrusive_ptr<DisplayObject> ptr =
-        ensureType<DisplayObject>(fn.this_ptr);
-
-    movie_root& mr = getRoot(*ptr);
-    
-    if (!fn.nargs)
-    {
-        switch (mr.getQuality())
-        {
-            case QUALITY_BEST:
-                return as_value(2.0);
-            case QUALITY_HIGH:
-                return as_value(1.0);
-            case QUALITY_MEDIUM:
-            case QUALITY_LOW:
-                return as_value(0.0);
-        }
-    }
-    
-    double q = fn.arg(0).to_number();
-
-    if (q < 0) mr.setQuality(QUALITY_HIGH);
-    else if (q > 2) mr.setQuality(QUALITY_BEST);
-    else {
-        int i = static_cast<int>(q);
-        switch(i)
-        {
-            case 0:
-                mr.setQuality(QUALITY_LOW);
-                break;
-            case 1:
-                mr.setQuality(QUALITY_HIGH);
-                break;
-            case 2:
-                mr.setQuality(QUALITY_BEST);
-                break;
-        }
-    }
-
-    return as_value();
-}
-
-
-as_value
-DisplayObject::x_getset(const fn_call& fn)
-{
-       boost::intrusive_ptr<DisplayObject> ptr = 
ensureType<DisplayObject>(fn.this_ptr);
-
-       as_value rv;
-       if ( fn.nargs == 0 ) // getter
-       {
-               SWFMatrix m = ptr->getMatrix();
-               rv = as_value(twipsToPixels(m.get_x_translation()));
-       }
-       else // setter
-       {
-        const as_value& val = fn.arg(0);
-
-        // Undefined or null are ignored
-               // NOTE: we explicitly check is_undefined and is_null
-               //       because for SWF4 they result in 0 (not NaN)
-        //       on to_number
-        if (val.is_undefined() || val.is_null() )
-        {
-            IF_VERBOSE_ASCODING_ERRORS(
-                       log_aserror(_("Attempt to set %s._x to %s, refused"),
-                ptr->getTarget(), val);
-                       );
-            return rv;
-        }
-
-               const double newx = val.to_number();
-
-        // NaN is skipped, Infinite isn't
-        if (isNaN(newx))
-        {
-            IF_VERBOSE_ASCODING_ERRORS(
-                       log_aserror(_("Attempt to set %s._x to %s "
-                "(evaluating to number %g) refused"),
-                ptr->getTarget(), val, newx);
-                       );
-            return rv;
-        }
-
-               SWFMatrix m = ptr->getMatrix();
-        // NOTE: infinite_to_zero is wrong here, see 
actionscript.all/setProperty.as
-               m.set_x_translation(pixelsToTwips(infinite_to_zero(newx)));
-               ptr->setMatrix(m); // no need to update caches when only 
changing translation
-               ptr->transformedByScript(); // m_accept_anim_moves = false; 
-       }
-       return rv;
-
-}
-
-as_value
-DisplayObject::y_getset(const fn_call& fn)
-{
-       boost::intrusive_ptr<DisplayObject> ptr = 
ensureType<DisplayObject>(fn.this_ptr);
-
-       as_value rv;
-       if ( fn.nargs == 0 ) // getter
-       {
-               SWFMatrix m = ptr->getMatrix();
-               rv = as_value(twipsToPixels(m.get_y_translation()));
-       }
-       else // setter
-       {
-        const as_value& val = fn.arg(0);
-
-        // Undefined or null are ignored
-               // NOTE: we explicitly check is_undefined and is_null
-               //       because for SWF4 they result in 0 (not NaN)
-        //       on to_number
-        if (val.is_undefined() || val.is_null() )
-        {
-            IF_VERBOSE_ASCODING_ERRORS(
-                       log_aserror(_("Attempt to set %s._y to %s, refused"),
-                ptr->getTarget(), val);
-                       );
-            return rv;
-        }
-
-               const double newy = val.to_number();
-
-        // NaN is skipped, infinite isn't
-        if (isNaN(newy))
-        {
-            IF_VERBOSE_ASCODING_ERRORS(
-                       log_aserror(_("Attempt to set %s._y to %s "
-                "(evaluating to number %g) refused"),
-                ptr->getTarget(), val, newy);
-                       );
-            return rv;
-        }
-
-               SWFMatrix m = ptr->getMatrix();
-        // NOTE: infinite_to_zero is wrong here, 
-        // see actionscript.all/setProperty.as
-               m.set_y_translation(pixelsToTwips(infinite_to_zero(newy)));
-               ptr->setMatrix(m); // no need to update caches when only 
changing translation
-               ptr->transformedByScript(); // m_accept_anim_moves = false; 
-       }
-       return rv;
-
-}
-
-as_value
-DisplayObject::xscale_getset(const fn_call& fn)
-{
-       boost::intrusive_ptr<DisplayObject> ptr = 
ensureType<DisplayObject>(fn.this_ptr);
-
-       as_value rv;
-       if ( fn.nargs == 0 ) // getter
-       {
-               return as_value(ptr->_xscale);
-       }
-       else // setter
-       {
-               const as_value& val = fn.arg(0);
-
-               // Handle bogus values
-               // NOTE: we explicitly check is_undefined and is_null
-               //       because for SWF4 they result in 0 on to_number
-               if (val.is_undefined() || val.is_null())
-               {
-                       IF_VERBOSE_ASCODING_ERRORS(
-                       log_aserror(_("Attempt to set %s._xscale to %s, 
refused"),
-                ptr->getTarget(), val);
-                       );
-                       return as_value();
-               }
-
-               const double scale_percent = val.to_number();
-
-        // NaN is skipped, Infinite is not, see actionscript.all/setProperty.as
-               if (isNaN(scale_percent))
-               {
-                       IF_VERBOSE_ASCODING_ERRORS(
-                       log_aserror(_("Attempt to set %s._xscale to %s "
-                "(evaluating to number %g) refused"),
-                ptr->getTarget(), val, scale_percent);
-                       );
-                       return as_value();
-               }
-
-               // input is in percent
-               ptr->set_x_scale(scale_percent);
-       }
-       return rv;
-
-}
-
-as_value
-DisplayObject::yscale_getset(const fn_call& fn)
-{
-       boost::intrusive_ptr<DisplayObject> ptr = 
ensureType<DisplayObject>(fn.this_ptr);
-
-       as_value rv;
-       if ( fn.nargs == 0 ) // getter
-       {
-               return ptr->_yscale;
-       }
-       else // setter
-       {
-               const as_value& val = fn.arg(0);
-
-        // Undefined or null are ignored
-               // NOTE: we explicitly check is_undefined and is_null
-               //       because for SWF4 they result in 0 (not NaN)
-        //       on to_number
-               if (val.is_undefined() || val.is_null())
-               {
-                       IF_VERBOSE_ASCODING_ERRORS(
-                       log_aserror(_("Attempt to set %s._yscale to %s, 
refused"),
-                ptr->getTarget(), val);
-                       );
-                       return as_value();
-               }
-
-               const double scale_percent = val.to_number();
-
-        // NaN is skipped, Infinite is not, see actionscript.all/setProperty.as
-               if (isNaN(scale_percent))
-               {
-                       IF_VERBOSE_ASCODING_ERRORS(
-                       log_aserror(_("Attempt to set %s._yscale to %s "
-                "(evaluating to number %g) refused"),
-                ptr->getTarget(), val, scale_percent);
-                       );
-                       return as_value();
-               }
-
-
-               // input is in percent
-               ptr->set_y_scale(scale_percent);
-       }
-       return rv;
-
-}
-
-as_value
-DisplayObject::xmouse_get(const fn_call& fn)
-{
-       boost::intrusive_ptr<DisplayObject> ptr =
-        ensureType<DisplayObject>(fn.this_ptr);
-
-       // Local coord of mouse IN PIXELS.
-       boost::int32_t x, y, buttons;
-       getRoot(*ptr).get_mouse_state(x, y, buttons);
-
-       SWFMatrix m = ptr->getWorldMatrix();
-    point a(pixelsToTwips(x), pixelsToTwips(y));
-    
-    m.invert().transform(a);
-    return as_value(twipsToPixels(a.x));
-}
-
-as_value
-DisplayObject::ymouse_get(const fn_call& fn)
-{
-       boost::intrusive_ptr<DisplayObject> ptr =
-        ensureType<DisplayObject>(fn.this_ptr);
-
-       // Local coord of mouse IN PIXELS.
-       boost::int32_t x, y, buttons;
-       getRoot(*ptr).get_mouse_state(x, y, buttons);
-
-       SWFMatrix m = ptr->getWorldMatrix();
-    point a(pixelsToTwips(x), pixelsToTwips(y));
-    m.invert().transform(a);
-    return as_value(twipsToPixels(a.y));
-}
-
-as_value
-DisplayObject::alpha_getset(const fn_call& fn)
-{
-       boost::intrusive_ptr<DisplayObject> ptr =
-        ensureType<DisplayObject>(fn.this_ptr);
-
-       as_value rv;
-       if ( fn.nargs == 0 ) // getter
-       {
-               rv = as_value(ptr->get_cxform().aa / 2.56);
-       }
-       else // setter
-       {
-               const as_value& val = fn.arg(0);
-
-        // Undefined or null are ignored
-               // NOTE: we explicitly check is_undefined and is_null
-               //       because for SWF4 they result in 0 (not NaN)
-        //       on to_number
-        if (val.is_undefined() || val.is_null() )
-        {
-            IF_VERBOSE_ASCODING_ERRORS(
-                       log_aserror(_("Attempt to set %s._alpha to %s, 
refused"),
-                ptr->getTarget(), val);
-                       );
-            return rv;
-        }
-
-        // The new internal alpha value is input / 100.0 * 256.
-        // We test for finiteness later, but the multiplication
-        // won't make any difference.
-               const double newAlpha = val.to_number() * 2.56;
-
-        // NaN is skipped, Infinite is not, see actionscript.all/setProperty.as
-        if (isNaN(newAlpha))
-        {
-            IF_VERBOSE_ASCODING_ERRORS(
-                       log_aserror(_("Attempt to set %s._alpha to %s "
-                "(evaluating to number %g) refused"),
-                ptr->getTarget(), val, newAlpha);
-                       );
-            return rv;
-        }
-
-        cxform cx = ptr->get_cxform();
-
-        // Overflows are *not* truncated, but set to -32768.
-        if (newAlpha > std::numeric_limits<boost::int16_t>::max() ||
-            newAlpha < std::numeric_limits<boost::int16_t>::min())
-        {
-            cx.aa = std::numeric_limits<boost::int16_t>::min();
-        }
-        else
-        {
-            cx.aa = static_cast<boost::int16_t>(newAlpha);
-        }
-
-        ptr->set_cxform(cx);
-               ptr->transformedByScript();  
-       }
-       return rv;
-
+void
+attachDisplayObjectProperties(as_object& o)
+{
 }
 
 as_value
@@ -728,93 +353,6 @@
 
 }
 
-
-/// _visible can be set with true/false, but also
-/// 0 and 1.
-as_value
-DisplayObject::visible_getset(const fn_call& fn)
-{
-       boost::intrusive_ptr<DisplayObject> ptr =
-        ensureType<DisplayObject>(fn.this_ptr);
-
-       as_value rv;
-       if (!fn.nargs) // getter
-       {
-               rv = as_value(ptr->visible());
-       }
-       else // setter
-       {
-        const as_value& val = fn.arg(0);
-
-        // Undefined or null are ignored
-               // NOTE: we explicitly check is_undefined and is_null
-               //       because for SWF4 they result in 0 (not NaN)
-        //       on to_number
-        if (val.is_undefined() || val.is_null() )
-        {
-            IF_VERBOSE_ASCODING_ERRORS(
-                       log_aserror(_("Attempt to set %s._visible to %s, 
refused"),
-                ptr->getTarget(), val);
-                       );
-            return rv;
-        }
-
-        /// We cast to number and rely (mostly) on C++'s automatic
-        /// cast to bool, as string "0" should be converted to
-        /// its numeric equivalent, not interpreted as 'true', which
-        /// SWF7+ does for strings.
-        double d = val.to_number();
-
-        // Infinite or NaN is skipped
-        if (isInf(d) || isNaN(d))
-        {
-            IF_VERBOSE_ASCODING_ERRORS(
-                       log_aserror(_("Attempt to set %s._visible to %s "
-                "(evaluating to number %g) refused"),
-                ptr->getTarget(), val, d);
-                       );
-            return rv;
-        }
-
-               ptr->set_visible(d);
-
-               ptr->transformedByScript();
-       }
-       return rv;
-
-}
-
-as_value
-DisplayObject::width_getset(const fn_call& fn)
-{
-       boost::intrusive_ptr<DisplayObject> ptr = 
ensureType<DisplayObject>(fn.this_ptr);
-
-       // Bounds are used for both getter and setter
-       rect bounds = ptr->getBounds();
-       as_value rv;
-       if ( fn.nargs == 0 ) // getter
-       { 
-               SWFMatrix m = ptr->getMatrix();
-               m.transform(bounds);
-               double w = twipsToPixels( bounds.width() );
-               rv = as_value(w);
-       }
-       else // setter
-       {
-               const double newwidth = pixelsToTwips(fn.arg(0).to_number());
-               if ( newwidth <= 0 )
-               {
-                       IF_VERBOSE_ASCODING_ERRORS(
-                       log_aserror(_("Setting _width=%g of DisplayObject %s 
(%s)"),
-                               newwidth/20, ptr->getTarget(), typeName(*ptr));
-                       );
-               }
-
-               ptr->set_width(newwidth);
-       }
-       return rv;
-}
-
 void
 DisplayObject::set_visible(bool visible)
 {
@@ -830,174 +368,60 @@
     }
     _visible = visible;      
 }
+
 void
-DisplayObject::set_width(double newwidth)
+DisplayObject::setWidth(double newwidth)
 {
-       rect bounds = getBounds();
-#if 0
-       if ( bounds.is_null() ) {
-               log_unimpl("FIXME: when setting _width of null-bounds 
DisplayObject it seems we're supposed to change _yscale too (see 
MovieClip.as)");
-       }
-#endif
+       const rect& bounds = getBounds();
        const double oldwidth = bounds.width();
-       assert(oldwidth >= 0); // can't be negative can it?
-
-        double yscale = std::abs(_yscale / 100.0); // see MovieClip.as. TODO: 
this is likely same as m.get_y_scale..
-        double xscale = oldwidth ? (newwidth / oldwidth) : 0; // avoid 
division by zero
-        double rotation = _rotation * PI / 180.0;
-
-        SWFMatrix m = getMatrix();
-        m.set_scale_rotation(xscale, yscale, rotation);
-        setMatrix(m, true); // let caches be updated
+       assert(oldwidth >= 0); 
+
+    const double xscale = oldwidth ? (newwidth / oldwidth) : 0; 
+    const double rotation = _rotation * PI / 180.0;
+
+    SWFMatrix m = getMatrix();
+    const double yscale = m.get_y_scale(); 
+    m.set_scale_rotation(xscale, yscale, rotation);
+    setMatrix(m, true); 
 }
 
 as_value
-DisplayObject::height_getset(const fn_call& fn)
-{
-       boost::intrusive_ptr<DisplayObject> ptr = 
ensureType<DisplayObject>(fn.this_ptr);
-
-       // Bounds are used for both getter and setter
-       rect bounds = ptr->getBounds();
-       as_value rv;
-       if ( fn.nargs == 0 ) // getter
-       {
-               SWFMatrix m = ptr->getMatrix();
-               m.transform(bounds);
-               double h = twipsToPixels(bounds.height());      
-               rv = as_value(h);
-       }
-       else // setter
-       {
-
-               const double newheight = pixelsToTwips(fn.arg(0).to_number());
-               if ( newheight <= 0 )
-               {
-                       IF_VERBOSE_ASCODING_ERRORS(
-                       log_aserror(_("Setting _height=%g of DisplayObject %s 
(%s)"),
-                                       newheight / 20, ptr->getTarget(), 
typeName(*ptr));
-                       );
-               }
-
-               ptr->set_height(newheight);
-       }
-
-       return rv;
-}
-
-void
-DisplayObject::set_height(double newheight)
-{
-       const rect bounds = getBounds();
-
-#if 0
-       if ( bounds.is_null() ) {
-               log_unimpl("FIXME: when setting _height of null-bounds 
DisplayObject it seems we're supposed to change _xscale too (see 
MovieClip.as)");
-       }
-#endif
+getHeight(DisplayObject& o)
+{
+       rect bounds = o.getBounds();
+    const SWFMatrix m = o.getMatrix();
+    m.transform(bounds);
+    return twipsToPixels(bounds.height());      
+}
+
+void
+setHeight(DisplayObject& o, const as_value& val)
+{
+    const double newheight = pixelsToTwips(val.to_number());
+    if (newheight <= 0) {
+        IF_VERBOSE_ASCODING_ERRORS(
+        log_aserror(_("Setting _height=%g of DisplayObject %s (%s)"),
+                        newheight / 20, o.getTarget(), typeName(o));
+        );
+    }
+    o.setHeight(newheight);
+}
+
+void
+DisplayObject::setHeight(double newheight)
+{
+       const rect& bounds = getBounds();
+
        const double oldheight = bounds.height();
-       assert(oldheight >= 0); // can't be negative can it?
+       assert(oldheight >= 0); 
 
-    double yscale = oldheight ? (newheight / oldheight) : 0; // avoid division 
by zero
-    double xscale = _xscale / 100.0;
-    double rotation = _rotation * PI / 180.0;
+    const double yscale = oldheight ? (newheight / oldheight) : 0;
+    const double rotation = _rotation * PI / 180.0;
 
     SWFMatrix m = getMatrix();
+    const double xscale = m.get_x_scale();
     m.set_scale_rotation(xscale, yscale, rotation);
-    setMatrix(m, true); // let caches be updated
-}
-
-as_value
-DisplayObject::rotation_getset(const fn_call& fn)
-{
-       boost::intrusive_ptr<DisplayObject> ptr = 
ensureType<DisplayObject>(fn.this_ptr);
-
-       as_value rv;
-       if ( fn.nargs == 0 ) // getter
-       {
-               return ptr->_rotation;
-       }
-       else // setter
-       {
-               const as_value& val = fn.arg(0);
-
-        // Undefined or null are ignored
-               // NOTE: we explicitly check is_undefined and is_null
-               //       because for SWF4 they result in 0 (not NaN)
-        //       on to_number
-        if (val.is_undefined() || val.is_null() )
-        {
-            IF_VERBOSE_ASCODING_ERRORS(
-                       log_aserror(_("Attempt to set %s._rotation to %s, 
refused"),
-                ptr->getTarget(), val);
-                       );
-            return rv;
-        }
-
-               // input is in degrees
-               double  rotation_val = val.to_number();
-
-        // NaN is skipped, Infinity isn't
-        if (isNaN(rotation_val))
-        {
-            IF_VERBOSE_ASCODING_ERRORS(
-                       log_aserror(_("Attempt to set %s._rotation to %s "
-                "(evaluating to number %g) refused"),
-                ptr->getTarget(), val, rotation_val);
-                       );
-            return rv;
-        }
-
-               ptr->set_rotation(rotation_val);
-       }
-       return rv;
-}
-
-as_value
-DisplayObject::parent_getset(const fn_call& fn)
-{
-       boost::intrusive_ptr<DisplayObject> ptr = 
ensureType<DisplayObject>(fn.this_ptr);
-
-       boost::intrusive_ptr<as_object> p = ptr->get_parent();
-       as_value rv;
-       if (p)
-       {
-               rv = as_value(p);
-       }
-       return rv;
-}
-
-as_value
-DisplayObject::target_getset(const fn_call& fn)
-{
-       boost::intrusive_ptr<DisplayObject> ptr = 
ensureType<DisplayObject>(fn.this_ptr);
-
-       return as_value(ptr->getTargetPath());
-}
-
-as_value
-DisplayObject::name_getset(const fn_call& fn)
-{
-       boost::intrusive_ptr<DisplayObject> ptr =
-        ensureType<DisplayObject>(fn.this_ptr);
-
-       if ( fn.nargs == 0 ) // getter
-       {
-               const std::string& name = ptr->get_name();
-               if ( getSWFVersion(*ptr) < 6 && name.empty() )
-               {
-                       return as_value();
-               } 
-               else
-               {
-                       return as_value(name);
-               }
-       }
-       else // setter
-       {
-               ptr->set_name(fn.arg(0).to_string().c_str());
-       }
-
-       return as_value();
+    setMatrix(m, true);
 }
 
 void
@@ -1138,6 +562,9 @@
        return func;
 }
 
+/// Set the real and cached x scale.
+//
+/// Cached rotation and y scale are not updated.
 void
 DisplayObject::set_x_scale(double scale_percent)
 {
@@ -1167,25 +594,27 @@
        transformedByScript(); 
 }
 
+/// Set the real and cached rotation.
+//
+/// Cached scale values are not updated.
 void
 DisplayObject::set_rotation(double rot)
 {
        // Translate to the -180 .. 180 range
-       rot = std::fmod (rot, 360.0);
+       rot = std::fmod(rot, 360.0);
        if (rot > 180.0) rot -= 360.0;
        else if (rot < -180.0) rot += 360.0;
 
-       //log_debug("_rotation: %d", rot);
-
        double rotation = rot * PI / 180.0;
 
-       //log_debug("xscale cached: %d, yscale cached: %d", _xscale, _yscale);
-
-    // TODO: check if there's any case we should use _yscale here
     if (_xscale < 0 ) rotation += PI; 
 
        SWFMatrix m = getMatrix();
     m.set_rotation(rotation);
+
+    // Update the matrix from the cached x scale to avoid accumulating
+    // errors.
+    m.set_x_scale(std::abs(scaleX() / 100.0));
        setMatrix(m); // we update the cache ourselves
 
        _rotation = rot;
@@ -1193,6 +622,10 @@
        transformedByScript(); 
 }
 
+
+/// Set the real and cached y scale.
+//
+/// Cached rotation and x scale are not updated.
 void
 DisplayObject::set_y_scale(double scale_percent)
 {
@@ -1494,9 +927,507 @@
     return get_root();
 }
 
+bool
+getDisplayObjectProperty(as_object& obj, string_table::key key,
+        as_value& val)
+{
+
+    const Getters& getters = displayObjectGetters();
+
+    Getters::const_iterator it = getters.find(key);
+    if (it == getters.end()) return false;
+
+    DisplayObject& o = static_cast<DisplayObject&>(obj);
+
+    val = (*it->second)(o);
+    return true;
+}
+    
+
+bool
+setDisplayObjectProperty(as_object& obj, string_table::key key, 
+        const as_value& val)
+{
+
+    const Setters& setters = displayObjectSetters();
+
+    Setters::const_iterator it = setters.find(key);
+    if (it == setters.end()) return false;
+
+    DisplayObject& o = static_cast<DisplayObject&>(obj);
+
+    Setter s = it->second;
+
+    // Read-only.
+    if (!s) return true;
+    
+    if (val.is_undefined() || val.is_null()) {
+        IF_VERBOSE_ASCODING_ERRORS(
+            log_aserror(_("Attempt to set property to %s, refused"),
+                o.getTarget(), val);
+        );
+        return true;
+    }
+
+    (*s)(o, val);
+    return true;
+
+}
 
 namespace {
 
+as_value
+getQuality(DisplayObject& o)
+{
+    movie_root& mr = getRoot(o);
+    switch (mr.getQuality())
+    {
+        case QUALITY_BEST:
+            return as_value("BEST");
+        case QUALITY_HIGH:
+            return as_value("HIGH");
+        case QUALITY_MEDIUM:
+            return as_value("MEDIUM");
+        case QUALITY_LOW:
+            return as_value("LOW");
+    }
+
+    return as_value();
+
+}
+
+void
+setQuality(DisplayObject& o, const as_value& val)
+{
+    movie_root& mr = getRoot(o);
+
+    if (!val.is_string()) return;
+
+    const std::string& q = val.to_string();
+
+    StringNoCaseEqual noCaseCompare;
+
+    if (noCaseCompare(q, "BEST")) mr.setQuality(QUALITY_BEST);
+    else if (noCaseCompare(q, "HIGH")) {
+        mr.setQuality(QUALITY_HIGH);
+    }
+    else if (noCaseCompare(q, "MEDIUM")) {
+        mr.setQuality(QUALITY_MEDIUM);
+    }
+    else if (noCaseCompare(q, "LOW")) {
+            mr.setQuality(QUALITY_LOW);
+    }
+
+    return;
+}
+
+as_value
+getURL(DisplayObject& o)
+{
+    return as_value(o.get_root()->url());
+}
+
+as_value
+getHighQuality(DisplayObject& o)
+{
+    movie_root& mr = getRoot(o);
+    switch (mr.getQuality())
+    {
+        case QUALITY_BEST:
+            return as_value(2.0);
+        case QUALITY_HIGH:
+            return as_value(1.0);
+        case QUALITY_MEDIUM:
+        case QUALITY_LOW:
+            return as_value(0.0);
+    }
+    return as_value();
+}
+
+void
+setHighQuality(DisplayObject& o, const as_value& val)
+{
+    movie_root& mr = getRoot(o);
+
+    const double q = val.to_number();
+
+    if (q < 0) mr.setQuality(QUALITY_HIGH);
+    else if (q > 2) mr.setQuality(QUALITY_BEST);
+    else {
+        int i = static_cast<int>(q);
+        switch(i)
+        {
+            case 0:
+                mr.setQuality(QUALITY_LOW);
+                break;
+            case 1:
+                mr.setQuality(QUALITY_HIGH);
+                break;
+            case 2:
+                mr.setQuality(QUALITY_BEST);
+                break;
+        }
+    }
+
+}
+
+void
+setY(DisplayObject& o, const as_value& val)
+{
+
+    const double newy = val.to_number();
+
+    // NaN is skipped, Infinite isn't
+    if (isNaN(newy))
+    {
+        IF_VERBOSE_ASCODING_ERRORS(
+        log_aserror(_("Attempt to set %s._y to %s "
+            "(evaluating to number %g) refused"),
+            o.getTarget(), val, newy);
+        );
+        return;
+    }
+
+    SWFMatrix m = o.getMatrix();
+    // NOTE: infinite_to_zero is wrong here, see 
actionscript.all/setProperty.as
+    m.set_y_translation(pixelsToTwips(infinite_to_zero(newy)));
+    o.setMatrix(m); 
+    o.transformedByScript();
+}
+
+as_value
+getY(DisplayObject& o)
+{
+    SWFMatrix m = o.getMatrix();
+    return twipsToPixels(m.get_y_translation());
+}
+
+void
+setX(DisplayObject& o, const as_value& val)
+{
+
+    const double newx = val.to_number();
+
+    // NaN is skipped, Infinite isn't
+    if (isNaN(newx))
+    {
+        IF_VERBOSE_ASCODING_ERRORS(
+        log_aserror(_("Attempt to set %s._x to %s "
+            "(evaluating to number %g) refused"),
+            o.getTarget(), val, newx);
+        );
+        return;
+    }
+
+    SWFMatrix m = o.getMatrix();
+    // NOTE: infinite_to_zero is wrong here, see 
actionscript.all/setProperty.as
+    m.set_x_translation(pixelsToTwips(infinite_to_zero(newx)));
+    o.setMatrix(m); 
+    o.transformedByScript();
+}
+
+as_value
+getX(DisplayObject& o)
+{
+    SWFMatrix m = o.getMatrix();
+    return twipsToPixels(m.get_x_translation());
+}
+
+void
+setScaleX(DisplayObject& o, const as_value& val)
+{
+
+    const double scale_percent = val.to_number();
+
+    // NaN is skipped, Infinite is not, see actionscript.all/setProperty.as
+    if (isNaN(scale_percent))
+    {
+        IF_VERBOSE_ASCODING_ERRORS(
+        log_aserror(_("Attempt to set %s._xscale to %s "
+            "(evaluating to number %g) refused"),
+            o.getTarget(), val, scale_percent);
+        );
+        return;
+    }
+
+    // input is in percent
+    o.set_x_scale(scale_percent);
+
+}
+
+as_value
+getScaleX(DisplayObject& o)
+{
+    return o.scaleX();
+}
+
+void
+setScaleY(DisplayObject& o, const as_value& val)
+{
+
+    const double scale_percent = val.to_number();
+
+    // NaN is skipped, Infinite is not, see actionscript.all/setProperty.as
+    if (isNaN(scale_percent))
+    {
+        IF_VERBOSE_ASCODING_ERRORS(
+        log_aserror(_("Attempt to set %s._yscale to %s "
+            "(evaluating to number %g) refused"),
+            o.getTarget(), val, scale_percent);
+        );
+        return;
+    }
+
+    // input is in percent
+    o.set_y_scale(scale_percent);
+
+}
+
+as_value
+getScaleY(DisplayObject& o)
+{
+    return o.scaleY();
+}
+
+as_value
+getVisible(DisplayObject& o)
+{
+    return o.visible();
+}
+
+void
+setVisible(DisplayObject& o, const as_value& val)
+{
+
+    /// We cast to number and rely (mostly) on C++'s automatic
+    /// cast to bool, as string "0" should be converted to
+    /// its numeric equivalent, not interpreted as 'true', which
+    /// SWF7+ does for strings.
+    double d = val.to_number();
+
+    // Infinite or NaN is skipped
+    if (isInf(d) || isNaN(d)) {
+        IF_VERBOSE_ASCODING_ERRORS(
+        log_aserror(_("Attempt to set %s._visible to %s "
+            "(evaluating to number %g) refused"),
+            o.getTarget(), val, d);
+        );
+        return;
+    }
+
+    o.set_visible(d);
+
+    o.transformedByScript();
+}
+
+as_value
+getAlpha(DisplayObject& o)
+{
+    return as_value(o.get_cxform().aa / 2.56);
+}
+
+void
+setAlpha(DisplayObject& o, const as_value& val)
+{
+
+    // The new internal alpha value is input / 100.0 * 256.
+    // We test for finiteness later, but the multiplication
+    // won't make any difference.
+    const double newAlpha = val.to_number() * 2.56;
+
+    // NaN is skipped, Infinite is not, see actionscript.all/setProperty.as
+    if (isNaN(newAlpha)) {
+        IF_VERBOSE_ASCODING_ERRORS(
+        log_aserror(_("Attempt to set %s._alpha to %s "
+            "(evaluating to number %g) refused"),
+            o.getTarget(), val, newAlpha);
+        );
+        return;
+    }
+
+    cxform cx = o.get_cxform();
+
+    // Overflows are *not* truncated, but set to -32768.
+    if (newAlpha > std::numeric_limits<boost::int16_t>::max() ||
+        newAlpha < std::numeric_limits<boost::int16_t>::min()) {
+        cx.aa = std::numeric_limits<boost::int16_t>::min();
+    }
+    else {
+        cx.aa = static_cast<boost::int16_t>(newAlpha);
+    }
+
+    o.set_cxform(cx);
+    o.transformedByScript();  
+
+}
+
+as_value
+getMouseX(DisplayObject& o)
+{
+       // Local coord of mouse IN PIXELS.
+       boost::int32_t x, y, buttons;
+       getRoot(o).get_mouse_state(x, y, buttons);
+
+       SWFMatrix m = o.getWorldMatrix();
+    point a(pixelsToTwips(x), pixelsToTwips(y));
+    
+    m.invert().transform(a);
+    return as_value(twipsToPixels(a.x));
+}
+
+as_value
+getMouseY(DisplayObject& o)
+{
+       // Local coord of mouse IN PIXELS.
+       boost::int32_t x, y, buttons;
+       getRoot(o).get_mouse_state(x, y, buttons);
+
+       SWFMatrix m = o.getWorldMatrix();
+    point a(pixelsToTwips(x), pixelsToTwips(y));
+    m.invert().transform(a);
+    return as_value(twipsToPixels(a.y));
+}
+
+as_value
+getRotation(DisplayObject& o)
+{
+    return o.rotation();
+}
+
+
+void
+setRotation(DisplayObject& o, const as_value& val)
+{
+
+    // input is in degrees
+    const double rotation_val = val.to_number();
+
+    // NaN is skipped, Infinity isn't
+    if (isNaN(rotation_val))
+    {
+        IF_VERBOSE_ASCODING_ERRORS(
+        log_aserror(_("Attempt to set %s._rotation to %s "
+            "(evaluating to number %g) refused"),
+            o.getTarget(), val, rotation_val);
+        );
+        return;
+    }
+    o.set_rotation(rotation_val);
+}
+
+
+as_value
+getParent(DisplayObject& o)
+{
+    as_object* p = o.get_parent();
+    return p ? p : as_value();
+}
+
+as_value
+getTarget(DisplayObject& o)
+{
+    return o.getTargetPath();
+}
+
+as_value
+getNameProperty(DisplayObject& o)
+{
+    const std::string& name = o.get_name();
+    if (getSWFVersion(o) < 6 && name.empty()) return as_value(); 
+    return as_value(name);
+}
+
+void
+setName(DisplayObject& o, const as_value& val)
+{
+    o.set_name(val.to_string().c_str());
+}
+
+void
+setSoundBufTime(DisplayObject& /*o*/, const as_value& /*val*/)
+{
+    LOG_ONCE(log_unimpl("_soundbuftime setting"));
+}
+
+as_value
+getSoundBufTime(DisplayObject& /*o*/)
+{
+    return as_value(0.0);
+}
+
+as_value
+getWidth(DisplayObject& o)
+{
+       rect bounds = o.getBounds();
+    const SWFMatrix& m = o.getMatrix();
+    m.transform(bounds);
+    return twipsToPixels(bounds.width());
+}
+
+void
+setWidth(DisplayObject& o, const as_value& val)
+{
+    const double newwidth = pixelsToTwips(val.to_number());
+    if (newwidth <= 0) {
+        IF_VERBOSE_ASCODING_ERRORS(
+        log_aserror(_("Setting _width=%g of DisplayObject %s (%s)"),
+            newwidth/20, o.getTarget(), typeName(o));
+        );
+    }
+    o.setWidth(newwidth);
+}
+
+const Getters
+displayObjectGetters()
+{
+    static const Getters getters = boost::assign::map_list_of
+        (NSV::PROP_uX, getX)
+        (NSV::PROP_uY, getY)
+        (NSV::PROP_uXSCALE, getScaleX)
+        (NSV::PROP_uYSCALE, getScaleY)
+        (NSV::PROP_uROTATION, getRotation)
+        (NSV::PROP_uHIGHQUALITY, getHighQuality)
+        (NSV::PROP_uQUALITY, getQuality)
+        (NSV::PROP_uALPHA, getAlpha)
+        (NSV::PROP_uWIDTH, getWidth)
+        (NSV::PROP_uURL, getURL)
+        (NSV::PROP_uHEIGHT, getHeight)
+        (NSV::PROP_uNAME, getNameProperty)
+        (NSV::PROP_uVISIBLE, getVisible)
+        (NSV::PROP_uSOUNDBUFTIME, getSoundBufTime)
+        (NSV::PROP_uPARENT, getParent)
+        (NSV::PROP_uTARGET, getTarget)
+        (NSV::PROP_uXMOUSE, getMouseX)
+        (NSV::PROP_uYMOUSE, getMouseY);
+    return getters;
+}
+const Setters
+displayObjectSetters()
+{
+    const Setter n = 0;
+
+    static const Setters setters = boost::assign::map_list_of
+        (NSV::PROP_uX, setX)
+        (NSV::PROP_uY, setY)
+        (NSV::PROP_uXSCALE, setScaleX)
+        (NSV::PROP_uYSCALE, setScaleY)
+        (NSV::PROP_uROTATION, setRotation)
+        (NSV::PROP_uHIGHQUALITY, setHighQuality)
+        (NSV::PROP_uQUALITY, setQuality)
+        (NSV::PROP_uALPHA, setAlpha)
+        (NSV::PROP_uWIDTH, setWidth)
+        (NSV::PROP_uHEIGHT, setHeight)
+        (NSV::PROP_uNAME, setName)
+        (NSV::PROP_uVISIBLE, setVisible)
+        (NSV::PROP_uSOUNDBUFTIME, setSoundBufTime)
+        (NSV::PROP_uPARENT, n)
+        (NSV::PROP_uURL, n)
+        (NSV::PROP_uTARGET, n)
+        (NSV::PROP_uXMOUSE, n)
+        (NSV::PROP_uYMOUSE, n);
+    return setters;
+}
+
 
 const BlendModeMap&
 getBlendModeMap()

=== modified file 'libcore/DisplayObject.h'
--- a/libcore/DisplayObject.h   2009-07-10 15:44:55 +0000
+++ b/libcore/DisplayObject.h   2009-09-30 15:20:47 +0000
@@ -61,6 +61,18 @@
 
 namespace gnash {
 
+/// Attaches common DisplayObject properties such as _height, _x, _visible
+//
+/// This should be called by DisplayObject subclasses to ensure that
+/// the correct properties are attached.
+void attachDisplayObjectProperties(as_object& o);
+
+bool setDisplayObjectProperty(as_object& obj, string_table::key key,
+        const as_value& val);
+
+bool getDisplayObjectProperty(as_object& obj, string_table::key key,
+        as_value& val);
+
 /// DisplayObject is the base class for all DisplayList objects.
 //
 /// It represents a single active element in a movie. This class does not
@@ -245,24 +257,23 @@
     /// Set the width of this DisplayObject, modifying its SWFMatrix
     //
     /// This is used when setting _width
-    /// See width_getset
-    ///
-    /// @param w new width, in TWIPS. TODO: should this be an integer ?
-    ///
-    void set_width(double width);
+    ///
+    /// @param w new width, in TWIPS. 
+    //
+    /// TextField does this differently (caches not updated).
+    virtual void setWidth(double width);
 
     /// Set the height of this DisplayObject, modifying its SWFMatrix
     //
     /// This is used when setting _height
-    /// See height_getset
-    ///
-    /// @param h new height, in TWIPS. TODO: should this be an integer ?
-    ///
-    void set_height(double height);
+    ///
+    /// @param h new height, in TWIPS. 
+    ///
+    virtual void setHeight(double height);
 
     const cxform& get_cxform() const { return m_color_transform; }
 
-    void  set_cxform(const cxform& cx) 
+    void set_cxform(const cxform& cx) 
     {       
         if (cx != m_color_transform) {
             set_invalidated(__FILE__, __LINE__);
@@ -936,59 +947,21 @@
     /// Default is a no-op. TextField implements this function.
     virtual void killFocus() {}
   
-    /// Getter-setter for _highquality.
-    static as_value highquality(const fn_call& fn);
-  
-    /// Getter-setter for _quality.
-    static as_value quality(const fn_call& fn);
-  
+    double rotation() const {
+        return _rotation;
+    }
+
+    double scaleX() const {
+        return _xscale;
+    }
+
+    double scaleY() const {
+        return _yscale;
+    }
+
     /// Getter-setter for blendMode.
     static as_value blendMode(const fn_call& fn);
   
-    /// Getter-setter for _x
-    static as_value x_getset(const fn_call& fn);
-  
-    /// Getter-setter for _y
-    static as_value y_getset(const fn_call& fn);
-  
-    /// Getter-setter for _xscale
-    static as_value xscale_getset(const fn_call& fn);
-  
-    /// Getter-setter for _yscale
-    static as_value yscale_getset(const fn_call& fn);
-  
-    /// Getter-setter for _xmouse
-    static as_value xmouse_get(const fn_call& fn);
-  
-    /// Getter-setter for _ymouse
-    static as_value ymouse_get(const fn_call& fn);
-  
-    /// Getter-setter for _alpha
-    static as_value alpha_getset(const fn_call& fn);
-  
-    /// Getter-setter for _visible
-    static as_value visible_getset(const fn_call& fn);
-  
-    /// Getter-setter for _width
-    static as_value width_getset(const fn_call& fn);
-  
-    /// Getter-setter for _height
-    static as_value height_getset(const fn_call& fn);
-  
-    /// Getter-setter for _rotation
-    static as_value rotation_getset(const fn_call& fn);
-  
-    /// Getter-setter for _parent 
-    static as_value parent_getset(const fn_call& fn);
-  
-    /// Getter-setter for _target 
-    static as_value target_getset(const fn_call& fn);
-  
-    /// Getter-setter for _name
-    static as_value name_getset(const fn_call& fn);
-  
-    /// @} Common ActionScript getter-setters for DisplayObjects
-  
 protected:
 
     /// Register currently computable target as
@@ -1099,6 +1072,7 @@
     /// Will be set by set_invalidated() and used by
     /// get_invalidated_bounds().
     InvalidatedRanges m_old_invalidated_ranges;
+    
 
 private:
 

=== modified file 'libcore/MovieClip.cpp'
--- a/libcore/MovieClip.cpp     2009-09-29 11:09:52 +0000
+++ b/libcore/MovieClip.cpp     2009-09-30 15:20:47 +0000
@@ -548,7 +548,9 @@
         }
         return true;
     }
-
+    
+    if (getDisplayObjectProperty(*this, name_key, *val)) return true;
+    
     // Try items on our display list.
     DisplayObject* ch;
     if (getSWFVersion(*this) >= 7 ) {

=== modified file 'libcore/TextField.cpp'
--- a/libcore/TextField.cpp     2009-08-27 10:18:44 +0000
+++ b/libcore/TextField.cpp     2009-10-01 08:50:53 +0000
@@ -1015,237 +1015,6 @@
     format_text();
 }
 
-bool
-TextField::set_member(string_table::key name,
-        const as_value& val, string_table::key nsname, bool ifFound)
-{
-
-    // FIXME: Turn all standard members into getter/setter properties
-    //        of the TextField class. See attachTextFieldInterface()
-    // @@ TODO need to inherit basic stuff like _x, _y, _xscale, _yscale etc ?
-
-    switch (name)
-    {
-    default:
-        break;
-    case NSV::PROP_uX:
-    {
-        SWFMatrix m = getMatrix();
-        double x = infinite_to_zero( val.to_number() );
-        m.tx = pixelsToTwips(x);    
-        setMatrix(m); // no need to update caches when only changing 
translation
-
-        // m_accept_anim_moves = false;
-        return true;
-    }
-    case NSV::PROP_uY:
-    {
-        SWFMatrix m = getMatrix();
-        double y = infinite_to_zero( val.to_number() );
-        m.ty = pixelsToTwips(y);
-        setMatrix(m); // no need to update caches when only changing 
translation
-
-        // m_accept_anim_moves = false; 
-        return true;
-    }
-    case NSV::PROP_uWIDTH:
-    {
-        double nw = val.to_number(); 
-        if (!isFinite(nw) )
-        {
-            // might be our fault, see the TODO above 
-            // (missing to pass as_environment out..)
-            IF_VERBOSE_ASCODING_ERRORS(
-            log_aserror(_("Attempt to set TextField._width to %g"), nw);
-            );
-            return true;
-        }
-
-        if ( nw < 0 )
-        {
-            IF_VERBOSE_ASCODING_ERRORS(
-            log_aserror(_("Attempt to set TextField._width to a "
-                    "negative number: %g, toggling sign"), nw);
-            );
-            nw = -nw;
-        }
-
-        if ( _bounds.width() == pixelsToTwips(nw) )
-        {
-#ifdef GNASH_DEBUG_TEXTFIELDS
-            log_debug("TextField width already == %g, nothing to do to "
-                    "change it", nw);
-#endif
-            return true; // nothing to do
-        }
-        if ( _bounds.is_null() )
-        {
-#ifdef GNASH_DEBUG_TEXTFIELDS
-            log_debug("NULL TextField bounds : %s", _bounds);
-#endif
-            return true;
-        }
-
-#ifdef GNASH_DEBUG_TEXTFIELDS
-        log_debug("Chaging TextField width to %g", nw);
-#endif
-
-        set_invalidated();
-
-        // Modify TextField drawing rectangle
-        // TODO: check which anchor point we should use !
-        boost::int32_t xmin = _bounds.get_x_min();
-        boost::int32_t ymin = _bounds.get_y_min();
-        boost::int32_t ymax = _bounds.get_y_max();
-        boost::int32_t xmax = xmin + pixelsToTwips(nw);
-
-        assert(xmin <= xmax);
-        _bounds.set_to_rect(xmin, ymin, xmax, ymax);
-        assert( _bounds.width() == pixelsToTwips(nw) );
-
-        // previously truncated text might get visible now
-        // TODO: if nested masks were implemented we would 
-        // not need to reformat text here
-        format_text();
-
-        return true;
-    }
-    case NSV::PROP_uHEIGHT:
-    {
-        double nh = val.to_number(); 
-        if (!isFinite(nh) )
-        {
-            // might be our fault, see the TODO above (missing to pass
-            // as_environment out..)
-            IF_VERBOSE_ASCODING_ERRORS(
-            log_aserror(_("Attempt to set TextField._height to %g"), nh);
-            );
-            return true;
-        }
-
-        if ( nh < 0.0f )
-        {
-            IF_VERBOSE_ASCODING_ERRORS(
-            log_aserror(_("Attempt to set TextField._height to a negative "
-                    "number: %g, toggling sign"), nh);
-            );
-            nh = -nh;
-        }
-
-        if ( _bounds.height() == pixelsToTwips(nh) )
-        {
-#ifdef GNASH_DEBUG_TEXTFIELDS
-            log_debug("TextField height already == %g, nothing to do to "
-                    "change it", nh);
-#endif // GNASH_DEBUG_TEXTFIELDS
-            return true; // nothing to do
-        }
-        if ( _bounds.is_null() )
-        {
-            return true;
-        }
-
-#ifdef GNASH_DEBUG_TEXTFIELDS
-        log_debug("Changing TextField height to %g", nh);
-#endif // GNASH_DEBUG_TEXTFIELDS
-        set_invalidated();
-
-        // Modify TextField drawing rectangle
-        // TODO: check which anchor point we should use !
-        boost::int32_t xmin = _bounds.get_x_min();
-        boost::int32_t xmax = _bounds.get_x_max();
-        boost::int32_t ymin = _bounds.get_y_min();
-        _bounds.set_to_rect(xmin, ymin, xmax, ymin + pixelsToTwips(nh) );
-
-        assert(_bounds.height() == pixelsToTwips(nh));
-
-        // previously truncated text might get visible now
-        // TODO: if nested masks were implemented we would 
-        // not need to reformat text here
-        format_text();
-
-        return true;
-    }
-    case NSV::PROP_uVISIBLE:
-    {
-        set_visible(val.to_bool());
-        return true;
-    }
-    case NSV::PROP_uALPHA:
-    {
-        // @@ TODO this should be generic to class DisplayObject!
-        // Arg is in percent.
-        cxform    cx = get_cxform();
-        cx.aa = (boost::int16_t)(val.to_number() * 2.56);
-        set_cxform(cx);
-        return true;
-    }
-    // @@ TODO see TextField members in Flash MX docs
-    }    // end switch
-
-
-    return as_object::set_member(name, val, nsname, ifFound);
-}
-
-bool
-TextField::get_member(string_table::key name, as_value* val,
-    string_table::key nsname)
-{
-
-    // FIXME: Turn all standard members into getter/setter properties
-    //        of the TextField class. See attachTextFieldInterface()
-
-    switch (name)
-    {
-    default:
-        break;
-    case NSV::PROP_uVISIBLE:
-    {
-        val->set_bool(visible());
-        return true;
-    }
-    case NSV::PROP_uALPHA:
-    {
-        // @@ TODO this should be generic to class DisplayObject!
-        const cxform&    cx = get_cxform();
-        val->set_double(cx.aa / 2.56);
-        return true;
-    }
-    case NSV::PROP_uX:
-    {
-        SWFMatrix    m = getMatrix();    
-        val->set_double(twipsToPixels(m.tx));
-        return true;
-    }
-    case NSV::PROP_uY:
-    {
-        SWFMatrix    m = getMatrix();    
-        val->set_double(twipsToPixels(m.ty));
-        return true;
-    }
-    case NSV::PROP_uWIDTH:
-    {
-        val->set_double(twipsToPixels(get_width()));
-#ifdef GNASH_DEBUG_TEXTFIELDS
-        log_debug("Got TextField width == %s", *val);
-#endif // GNASH_DEBUG_TEXTFIELDS
-        return true;
-    }
-    case NSV::PROP_uHEIGHT:
-    {
-        val->set_double(twipsToPixels(get_height()));
-#ifdef GNASH_DEBUG_TEXTFIELDS
-        log_debug("Got TextField height == %s", *val);
-#endif // GNASH_DEBUG_TEXTFIELDS
-        return true;
-    }
-    }    // end switch
-
-    return as_object::get_member(name, val, nsname);
-    
-}
-    
-
 float
 TextField::align_line(TextAlignment align,
         int last_line_start_record, float x)
@@ -1502,9 +1271,9 @@
             last_line_start_record);
     
     // Expand bounding box to include the whole text (if autoSize)
-    if ( _autoSize != autoSizeNone )
+    if (_autoSize != autoSizeNone)
     {
-        _bounds.expand_to_point(x+PADDING_TWIPS, y+PADDING_TWIPS);
+        _bounds.expand_to_point(x + PADDING_TWIPS, y + PADDING_TWIPS);
     }
 
     // Add the last line to our output.
@@ -1580,8 +1349,7 @@
     // Expand bounding box to include last column of text ...
     if ( _autoSize != autoSizeNone ) 
     {
-        _bounds.expand_to_point(x + PADDING_TWIPS,
-            y + PADDING_TWIPS);
+        _bounds.expand_to_point(x + PADDING_TWIPS, y + PADDING_TWIPS);
     }
 
     // new paragraphs get the indent.
@@ -2680,12 +2448,12 @@
 }
 
 void
-TextField::setWordWrap(bool on)
+TextField::setWordWrap(bool wrap)
 {
-    if ( _wordWrap != on )
-    {
+    if (_wordWrap != wrap) {
+
         set_invalidated();
-        _wordWrap=on;
+        _wordWrap = wrap;
         format_text();
     }
 }
@@ -2984,6 +2752,26 @@
     markDisplayObjectReachable();
 }
 
+void
+TextField::setWidth(double newwidth)
+{
+       const rect& bounds = getBounds();
+    _bounds.set_to_rect(bounds.get_x_min(),
+            bounds.get_y_min(),
+            bounds.get_x_min() + newwidth,
+            bounds.get_y_max());
+}
+
+void
+TextField::setHeight(double newheight)
+{
+       const rect& bounds = getBounds();
+    _bounds.set_to_rect(bounds.get_x_min(),
+            bounds.get_y_min(),
+            bounds.get_x_max(),
+            bounds.get_y_min() + newheight);
+}
+
 /// TextField interface functions
 
 namespace {
@@ -3836,36 +3624,6 @@
     // TextField is an AsBroadcaster
     AsBroadcaster::initialize(o);
 
-    int propFlags = PropFlags::dontDelete
-        |PropFlags::dontEnum
-        |PropFlags::readOnly
-        |PropFlags::isProtected;
-
-    // Parent seems to not be a normal property
-    o.init_property(NSV::PROP_uPARENT, &DisplayObject::parent_getset,
-            &DisplayObject::parent_getset);
-
-    // Target seems to not be a normal property
-    o.init_property(NSV::PROP_uTARGET, &DisplayObject::target_getset,
-            &DisplayObject::target_getset);
-
-    // _name should be a property of the instance, not the prototype
-    o.init_property(NSV::PROP_uNAME, &DisplayObject::name_getset,
-            &DisplayObject::name_getset);
-
-    o.init_property(NSV::PROP_uXMOUSE,
-            DisplayObject::xmouse_get, DisplayObject::xmouse_get, propFlags);
-    o.init_property(NSV::PROP_uYMOUSE,
-            DisplayObject::ymouse_get, DisplayObject::ymouse_get, propFlags);
-    o.init_property(NSV::PROP_uHIGHQUALITY,
-            DisplayObject::highquality, DisplayObject::highquality);
-    o.init_property(NSV::PROP_uQUALITY,
-            DisplayObject::quality, DisplayObject::quality);
-    o.init_property(NSV::PROP_uXSCALE,
-            DisplayObject::xscale_getset, DisplayObject::xscale_getset);
-    o.init_property(NSV::PROP_uYSCALE,
-            DisplayObject::yscale_getset, DisplayObject::yscale_getset);
- 
     // SWF6 or higher
     const int swf6Flags = as_object::DefaultFlags | PropFlags::onlySWF6Up;
 

=== modified file 'libcore/TextField.h'
--- a/libcore/TextField.h       2009-08-27 05:46:44 +0000
+++ b/libcore/TextField.h       2009-09-30 15:20:47 +0000
@@ -196,12 +196,8 @@
     /// end is never less than start.
     void setSelection(int start, int end);
 
-       /// We have a "text" member.
-       bool set_member(string_table::key name, const as_value& val, 
-               string_table::key nsname = 0, bool ifFound=false);
-
-       bool get_member(string_table::key name, as_value* val, 
-               string_table::key nsname = 0);
+    virtual void setWidth(double width);
+    virtual void setHeight(double height);
 
        /// Draw the dynamic string.
        void display(Renderer& renderer);

=== modified file 'libcore/Video.cpp'
--- a/libcore/Video.cpp 2009-08-27 10:47:30 +0000
+++ b/libcore/Video.cpp 2009-09-30 15:20:47 +0000
@@ -67,8 +67,13 @@
 {
 
        set_prototype(getVideoInterface(*this));
+
+    // TODO: For AS2 a genuine Video object can only be created from a 
+    // SWF tag. 
        if (_embeddedStream)
        {
+        // TODO: this should happen using the native creation function
+        // once Video is a Relay.
                attachVideoProperties(*this);
                initializeDecoder();
         
@@ -383,47 +388,7 @@
 void
 attachVideoProperties(as_object& o)
 {
-
-       as_c_function_ptr gettersetter;
-
-       gettersetter = &DisplayObject::x_getset;
-       o.init_property(NSV::PROP_uX, *gettersetter, *gettersetter);
-
-       gettersetter = &DisplayObject::y_getset;
-       o.init_property(NSV::PROP_uY, *gettersetter, *gettersetter);
-
-       gettersetter = &DisplayObject::xscale_getset;
-       o.init_property(NSV::PROP_uXSCALE, *gettersetter, *gettersetter);
-
-       gettersetter = &DisplayObject::yscale_getset;
-       o.init_property(NSV::PROP_uYSCALE, *gettersetter, *gettersetter);
-
-       gettersetter = &DisplayObject::xmouse_get;
-       o.init_readonly_property(NSV::PROP_uXMOUSE, *gettersetter);
-
-       gettersetter = &DisplayObject::ymouse_get;
-       o.init_readonly_property(NSV::PROP_uYMOUSE, *gettersetter);
-
-       gettersetter = &DisplayObject::alpha_getset;
-       o.init_property(NSV::PROP_uALPHA, *gettersetter, *gettersetter);
-
-       gettersetter = &DisplayObject::visible_getset;
-       o.init_property(NSV::PROP_uVISIBLE, *gettersetter, *gettersetter);
-
-       gettersetter = &DisplayObject::width_getset;
-       o.init_property(NSV::PROP_uWIDTH, *gettersetter, *gettersetter);
-
-       gettersetter = &DisplayObject::height_getset;
-       o.init_property(NSV::PROP_uHEIGHT, *gettersetter, *gettersetter);
-
-       gettersetter = &DisplayObject::rotation_getset;
-       o.init_property(NSV::PROP_uROTATION, *gettersetter, *gettersetter);
-
-       gettersetter = &DisplayObject::parent_getset;
-       o.init_property(NSV::PROP_uPARENT, *gettersetter, *gettersetter);
-
-       gettersetter = &DisplayObject::target_getset;
-       o.init_property(NSV::PROP_uTARGET, *gettersetter, *gettersetter);
+    attachDisplayObjectProperties(o);
 }
 
 as_value
@@ -504,13 +469,7 @@
 as_value
 video_ctor(const fn_call& /* fn */)
 {
-       log_debug("new Video() TESTING !");
-
-       // I'm not sure We can rely on the def and parent values being accepted 
-    // as NULL. Not till we add some testing...
-       boost::intrusive_ptr<DisplayObject> obj = new Video(NULL, NULL, -1);
-       obj->setDynamic();
-       return as_value(obj.get()); // will keep alive
+       return as_value(); // will keep alive
 }
 
 } // anonymous namespace

=== modified file 'libcore/as_object.cpp'
--- a/libcore/as_object.cpp     2009-09-29 08:44:54 +0000
+++ b/libcore/as_object.cpp     2009-09-30 15:20:47 +0000
@@ -38,6 +38,7 @@
 #include "as_function.h"
 #include "Global_as.h" 
 #include "GnashAlgorithm.h"
+#include "DisplayObject.h"
 
 #include <set>
 #include <string>
@@ -218,6 +219,7 @@
 
 as_object::as_object(Global_as& gl)
        :
+    _displayObject(false),
     _relay(0),
        _vm(getVM(gl)),
        _members(_vm)
@@ -226,6 +228,7 @@
 
 as_object::as_object()
        :
+    _displayObject(false),
     _relay(0),
        _vm(VM::get()),
        _members(_vm)
@@ -234,6 +237,7 @@
 
 as_object::as_object(as_object* proto)
        :
+    _displayObject(false),
     _relay(0),
        _vm(VM::get()),
        _members(_vm)
@@ -243,6 +247,7 @@
 
 as_object::as_object(boost::intrusive_ptr<as_object> proto)
        :
+    _displayObject(false),
     _relay(0),
        _vm(VM::get()),
        _members(_vm)
@@ -252,11 +257,7 @@
 
 as_object::as_object(const as_object& other)
        :
-#ifndef GNASH_USE_GC
-       ref_counted(),
-#else
-       GcResource(), 
-#endif
+    _displayObject(other._displayObject),
     _relay(0),
        _vm(VM::get()),
        _members(other._members)
@@ -326,14 +327,25 @@
        }
 }
 
-
+/// Current order of property lookup
+//
+/// If DisplayObject:
+///     DisplayObject magic properties
+///     (DisplayList, TextField variables?)
+/// Own properties up __proto__ chain
+/// __resolve.
 bool
 as_object::get_member(string_table::key name, as_value* val,
        string_table::key nsname)
 {
        assert(val);
+    
+    if (_displayObject) {
+        if (getDisplayObjectProperty(*this, name, *val)) return true;
+    }
+       
        Property* prop = findProperty(name, nsname);
-       
+
     if (!prop) {
 
         /// If the property isn't found, try the __resolve property.
@@ -363,6 +375,7 @@
                log_error(_("Caught exception: %s"), exc.what());
                return false;
        }
+
 }
 
 
@@ -672,6 +685,11 @@
                return true;
        }
 
+    if (_displayObject) {
+        if (setDisplayObjectProperty(*this, key, val)) return true;
+        // Execute triggers?
+    }
+
        // Else, add new property...
        if (ifFound) return false;
 

=== modified file 'libcore/as_object.h'
--- a/libcore/as_object.h       2009-09-29 08:44:54 +0000
+++ b/libcore/as_object.h       2009-09-30 15:20:47 +0000
@@ -1030,6 +1030,14 @@
         return _relay.get();
     }
 
+    /// Indicate that this object is a DisplayObject
+    //
+    /// This enables DisplayObject properties such as _x and _y. A flag
+    /// is used to avoid RTTI on every get and set of properties.
+    void setDisplayObject() {
+        _displayObject = true;
+    }
+
 protected:
 
     /// Enumerate any non-proper properties
@@ -1098,6 +1106,12 @@
 
 private:
  
+    /// DisplayObjects have properties not in the AS inheritance chain
+    //
+    /// These magic properties are invoked in get_member only if the
+    /// object is a DisplayObject
+    bool _displayObject;
+
     /// The polymorphic Relay object for native types.
     //
     /// This is owned by the as_object and destroyed when the as_object's

=== modified file 'libcore/asobj/flash/display/MovieClip_as.cpp'
--- a/libcore/asobj/flash/display/MovieClip_as.cpp      2009-09-29 11:09:52 
+0000
+++ b/libcore/asobj/flash/display/MovieClip_as.cpp      2009-10-01 08:50:41 
+0000
@@ -107,9 +107,7 @@
     as_value movieclip_totalFrames(const fn_call& fn);
     as_value movieclip_framesLoaded(const fn_call& fn);
     as_value movieclip_dropTarget(const fn_call& fn);
-    as_value movieclip_url(const fn_call& fn);
     as_value movieclip_focusRect(const fn_call& fn);
-    as_value movieclip_soundbuftime(const fn_call& fn);
 
     // =============================================
     // AS3 methods
@@ -244,42 +242,6 @@
 
     as_c_function_ptr gettersetter;
 
-    gettersetter = DisplayObject::x_getset;
-    o.init_property(NSV::PROP_uX, gettersetter, gettersetter);
-
-    gettersetter = DisplayObject::y_getset;
-    o.init_property(NSV::PROP_uY, gettersetter, gettersetter);
-
-    gettersetter = DisplayObject::xscale_getset;
-    o.init_property(NSV::PROP_uXSCALE, gettersetter, gettersetter);
-
-    gettersetter = DisplayObject::yscale_getset;
-    o.init_property(NSV::PROP_uYSCALE, gettersetter, gettersetter);
-
-    gettersetter = DisplayObject::xmouse_get;
-    o.init_readonly_property(NSV::PROP_uXMOUSE, gettersetter);
-
-    gettersetter = DisplayObject::ymouse_get;
-    o.init_readonly_property(NSV::PROP_uYMOUSE, gettersetter);
-
-    gettersetter = DisplayObject::alpha_getset;
-    o.init_property(NSV::PROP_uALPHA, gettersetter, gettersetter);
-
-    gettersetter = DisplayObject::visible_getset;
-    o.init_property(NSV::PROP_uVISIBLE, gettersetter, gettersetter);
-
-    gettersetter = DisplayObject::width_getset;
-    o.init_property(NSV::PROP_uWIDTH, gettersetter, gettersetter);
-
-    gettersetter = DisplayObject::height_getset;
-    o.init_property(NSV::PROP_uHEIGHT, gettersetter, gettersetter);
-
-    gettersetter = DisplayObject::rotation_getset;
-    o.init_property(NSV::PROP_uROTATION, gettersetter, gettersetter);
-
-    gettersetter = DisplayObject::parent_getset;
-    o.init_property(NSV::PROP_uPARENT, gettersetter, gettersetter);
-
     gettersetter = movieclip_currentFrame;
     o.init_property(NSV::PROP_uCURRENTFRAME, gettersetter, gettersetter);
 
@@ -289,30 +251,12 @@
     gettersetter = movieclip_framesLoaded;
     o.init_property(NSV::PROP_uFRAMESLOADED, gettersetter, gettersetter);
 
-    gettersetter = DisplayObject::target_getset;
-    o.init_property(NSV::PROP_uTARGET, gettersetter, gettersetter);
-
-    gettersetter = DisplayObject::name_getset;
-    o.init_property(NSV::PROP_uNAME, gettersetter, gettersetter);
-
     gettersetter = movieclip_dropTarget;
     o.init_property(NSV::PROP_uDROPTARGET, gettersetter, gettersetter);
 
-    gettersetter = movieclip_url;
-    o.init_property(NSV::PROP_uURL, gettersetter, gettersetter);
-
-    gettersetter = DisplayObject::quality;
-    o.init_property(NSV::PROP_uQUALITY, gettersetter, gettersetter);
-    
-    gettersetter = DisplayObject::highquality;
-    o.init_property(NSV::PROP_uHIGHQUALITY, gettersetter, gettersetter);
-
     gettersetter = movieclip_focusRect;
     o.init_property(NSV::PROP_uFOCUSRECT, gettersetter, gettersetter);
 
-    gettersetter = movieclip_soundbuftime;
-    o.init_property(NSV::PROP_uSOUNDBUFTIME, gettersetter, gettersetter);
-
 }
 
 as_object*
@@ -1479,28 +1423,28 @@
         tgtwmat.invert().transform(bounds);
     }
 
-    // Magic numbers here... dunno why
-    double xMin = 6710886.35;
-    double yMin = 6710886.35;
-    double xMax = 6710886.35;
-    double yMax = 6710886.35;
+    double xMin, yMin, xMax, yMax;
 
-    if ( !bounds.is_null() )
-    {
+    if (!bounds.is_null()) {
         // Round to the twip
         xMin = twipsToPixels(bounds.get_x_min());
         yMin = twipsToPixels(bounds.get_y_min());
         xMax = twipsToPixels(bounds.get_x_max());
         yMax = twipsToPixels(bounds.get_y_max());
     }
-
-    boost::intrusive_ptr<as_object> bounds_obj(new as_object());
-    bounds_obj->init_member("xMin", as_value(xMin));
-    bounds_obj->init_member("yMin", as_value(yMin));
-    bounds_obj->init_member("xMax", as_value(xMax));
-    bounds_obj->init_member("yMax", as_value(yMax));
-
-    return as_value(bounds_obj.get());
+    else {
+        const double magicMin = 6710886.35;
+        xMin = yMin = xMax = yMax = magicMin;
+    }
+
+    // This is a bare object.
+    as_object* bounds_obj = new as_object();
+    bounds_obj->init_member("xMin", xMin);
+    bounds_obj->init_member("yMin", yMin);
+    bounds_obj->init_member("xMax", xMax);
+    bounds_obj->init_member("yMax", yMax);
+
+    return as_value(bounds_obj);
 }
 
 as_value
@@ -2573,14 +2517,6 @@
     return ptr->getDropTarget();
 }
 
-as_value
-movieclip_url(const fn_call& fn)
-{
-    boost::intrusive_ptr<MovieClip> ptr = ensureType<MovieClip>(fn.this_ptr);
-
-    return as_value(ptr->get_root()->url());
-}
-
 // TODO: move this to DisplayObject class, _focusrect seems a generic property
 as_value
 movieclip_focusRect(const fn_call& fn)
@@ -2601,24 +2537,6 @@
     return as_value();
 }
 
-as_value
-movieclip_soundbuftime(const fn_call& fn)
-{
-    boost::intrusive_ptr<MovieClip> ptr = 
-        ensureType<MovieClip>(fn.this_ptr);
-    UNUSED(ptr);
-
-    if ( fn.nargs == 0 ) // getter
-    {
-        // Number of seconds before sound starts to stream.
-        return as_value(0.0);
-    }
-    else // setter
-    {
-        LOG_ONCE( log_unimpl("MovieClip._soundbuftime setting") );
-    }
-    return as_value();
-}
 
 as_value
 movieclip_transform(const fn_call& fn)

=== modified file 'testsuite/actionscript.all/MovieClip.as'
--- a/testsuite/actionscript.all/MovieClip.as   2009-08-27 15:16:25 +0000
+++ b/testsuite/actionscript.all/MovieClip.as   2009-09-30 15:20:47 +0000
@@ -146,7 +146,7 @@
 check_equals(typeof(this), 'movieclip');
 check_equals(typeof(_parent), 'undefined');
 #if OUTPUT_VERSION > 5
- xcheck(!mc.hasOwnProperty('_parent'));
+ check(!mc.hasOwnProperty('_parent'));
  check(!MovieClip.prototype.hasOwnProperty('_parent'));
 #endif
 check_equals(_root, this);
@@ -403,47 +403,47 @@
 
 // focused test on _* properties
 check_equals(typeof(mc._x), 'number');
-xcheck(!mc.hasOwnProperty("_x"));
+check(!mc.hasOwnProperty("_x"));
 check(!mc.__proto__.hasOwnProperty("_x"));
 check(!MovieClip.prototype.hasOwnProperty("_x"));
 
 check_equals(typeof(mc._y), 'number');
-xcheck(!mc.hasOwnProperty("_y"));
+check(!mc.hasOwnProperty("_y"));
 check(!mc.__proto__.hasOwnProperty("_y"));
 check(!MovieClip.prototype.hasOwnProperty("_y"));
 
 check_equals(typeof(mc._height), 'number');
-xcheck(!mc.hasOwnProperty("_height"));
+check(!mc.hasOwnProperty("_height"));
 check(!mc.__proto__.hasOwnProperty("_height"));
 check(!MovieClip.prototype.hasOwnProperty("_height"));
 
 check_equals(typeof(mc._width), 'number');
-xcheck(!mc.hasOwnProperty("_width"));
+check(!mc.hasOwnProperty("_width"));
 check(!mc.__proto__.hasOwnProperty("_width"));
 check(!MovieClip.prototype.hasOwnProperty("_width"));
 
 check_equals(typeof(mc._xscale), 'number');
-xcheck(!mc.hasOwnProperty("_xscale"));
+check(!mc.hasOwnProperty("_xscale"));
 check(!mc.__proto__.hasOwnProperty("_xscale"));
 check(!MovieClip.prototype.hasOwnProperty("_xscale"));
 
 check_equals(typeof(mc._yscale), 'number');
-xcheck(!mc.hasOwnProperty("_yscale"));
+check(!mc.hasOwnProperty("_yscale"));
 check(!mc.__proto__.hasOwnProperty("_yscale"));
 check(!MovieClip.prototype.hasOwnProperty("_yscale"));
 
 check_equals(typeof(mc._xmouse), 'number');
-xcheck(!mc.hasOwnProperty("_xmouse"));
+check(!mc.hasOwnProperty("_xmouse"));
 check(!mc.__proto__.hasOwnProperty("_xmouse"));
 check(!MovieClip.prototype.hasOwnProperty("_xmouse"));
 
 check_equals(typeof(mc._ymouse), 'number');
-xcheck(!mc.hasOwnProperty("_ymouse"));
+check(!mc.hasOwnProperty("_ymouse"));
 check(!mc.__proto__.hasOwnProperty("_ymouse"));
 check(!MovieClip.prototype.hasOwnProperty("_ymouse"));
 
 check_equals(typeof(mc._rotation), 'number');
-xcheck(!mc.hasOwnProperty("_rotation"));
+check(!mc.hasOwnProperty("_rotation"));
 check(!mc.__proto__.hasOwnProperty("_rotation"));
 check(!MovieClip.prototype.hasOwnProperty("_rotation"));
 
@@ -454,13 +454,13 @@
 
 check(!mc.hasOwnProperty("_level"));
 check(!mc.__proto__.hasOwnProperty("_level"));
-xcheck(!mc.hasOwnProperty("_target"));
-xcheck(!mc.hasOwnProperty("_url"));
-xcheck(!mc.hasOwnProperty("_soundbuftime"));
+check(!mc.hasOwnProperty("_target"));
+check(!mc.hasOwnProperty("_url"));
+check(!mc.hasOwnProperty("_soundbuftime"));
 xcheck(!mc.hasOwnProperty("_focusrect"));
 xcheck(!mc.hasOwnProperty("_framesloaded"));
 check(!mc.hasOwnProperty("_lockroot"));
-xcheck(!mc.hasOwnProperty("_highquality"));
+check(!mc.hasOwnProperty("_highquality"));
 #endif //if OUTPUT_VERSION >= 6
 
 //----------------------------------------------
@@ -532,7 +532,7 @@
 check_equals(mc2.getBytesTotal(), 0);
 check_equals(mc2._url, _root._url);
 
-xcheck(!mc2.hasOwnProperty('_parent'));
+check(!mc2.hasOwnProperty('_parent'));
 
 #if OUTPUT_VERSION > 6 // {
  check_equals(getInstanceAtDepth(50), mc2);

=== modified file 'testsuite/actionscript.all/TextField.as'
--- a/testsuite/actionscript.all/TextField.as   2009-08-21 21:19:40 +0000
+++ b/testsuite/actionscript.all/TextField.as   2009-10-01 08:49:33 +0000
@@ -299,7 +299,7 @@
 
 check_equals(typeof(tf._highquality), 'number');
 check(!tf.hasOwnProperty('_highquality'));
-xcheck(!tf.__proto__.hasOwnProperty('_highquality'));
+check(!tf.__proto__.hasOwnProperty('_highquality'));
 check_equals(tf._highquality, 1);
 tf._highquality = 0;
 check_equals(tf._highquality, 0);
@@ -418,7 +418,7 @@
 
 check_equals(typeof(tf._name), 'string');
 check(!tf.hasOwnProperty('_name'));
-xcheck(!tf.__proto__.hasOwnProperty('_name'));
+check(!tf.__proto__.hasOwnProperty('_name'));
 check_equals(tf._name, 'tf');
 tfref = tf;
 tf._name = 'changed';
@@ -437,7 +437,7 @@
 
 check_equals(typeof(tf._parent), 'movieclip');
 check(!tf.hasOwnProperty('_parent'));
-xcheck(!tf.__proto__.hasOwnProperty('_parent'));
+check(!tf.__proto__.hasOwnProperty('_parent'));
 check_equals(tf._parent, _root);
 bk = tf._parent;
 tf._parent = 23;
@@ -490,7 +490,7 @@
 // TODO: check this, might be a string
 check_equals(typeof(tf._quality), 'string');
 check(!tf.hasOwnProperty('_quality'));
-xcheck(!tf.__proto__.hasOwnProperty('_quality'));
+check(!tf.__proto__.hasOwnProperty('_quality'));
 check(!tf.__proto__.__proto__.hasOwnProperty('_quality'));
 check(!tf.__proto__.__proto__.__proto__.hasOwnProperty('_quality'));
 check_equals(tf._quality, "HIGH");
@@ -539,13 +539,18 @@
 
 // Check TextField._rotation
 
-xcheck_equals(typeof(tf._rotation), 'number');
+check_equals(typeof(tf._rotation), 'number');
 check(!tf.hasOwnProperty('_rotation'));
 check(!tf.__proto__.hasOwnProperty('_rotation'));
-xcheck_equals(tf._rotation, 0);
+check_equals(tf._rotation, 0);
+check_equals(tf._width, 500);
 tf._rotation = 10;
 check_equals(tf._rotation, 10);
+check_equals(tf._width, 579.2);
+check_equals(tf._xscale, 100.0);
 tf._rotation = 0;
+check_equals(tf._width, 500.0);
+check_equals(tf._xscale, 100.0);
 
 // Check TextField.scroll
 
@@ -569,7 +574,7 @@
 
 // Check TextField._soundbuftime
 
-xcheck_equals(typeof(tf._soundbuftime), 'number');
+check_equals(typeof(tf._soundbuftime), 'number');
 check( ! tf.hasOwnProperty('_soundbuftime') ); 
 check( ! tf.__proto__.hasOwnProperty('_soundbuftime') ); 
 xcheck_equals(tf._soundbuftime, 5); // the default is 5, it seems
@@ -598,7 +603,7 @@
 
 check_equals(typeof(tf._target), 'string');
 check( ! tf.hasOwnProperty('_target') ); 
-xcheck( ! tf.__proto__.hasOwnProperty('_target') ); 
+check( ! tf.__proto__.hasOwnProperty('_target') ); 
 check_equals(tf._target, '/tf');
 // TODO: check the effect of changing _name on the _target value
 tf._target = "fake_target"; // read-only
@@ -659,12 +664,12 @@
 
 // Check TextField._url (url of the SWF that created the textfield)
 
-xcheck_equals(typeof(tf._url), 'string');
+check_equals(typeof(tf._url), 'string');
 check( ! tf.hasOwnProperty('_url') ); 
 check( ! tf.__proto__.hasOwnProperty('_url') ); 
-xcheck_equals(tf._url, _root._url);
+check_equals(tf._url, _root._url);
 tf._url = "fake url";
-xcheck_equals(tf._url, _root._url); // read-only
+check_equals(tf._url, _root._url); // read-only
 
 //-------------------------------------------------------------------------
 // Check TextField.variable (variable name associated with the textfield)
@@ -816,7 +821,7 @@
 
 check_equals(typeof(tf._xmouse), 'number');
 check( ! tf.hasOwnProperty('_xmouse') );
-xcheck( ! tf.__proto__.hasOwnProperty('_xmouse') );
+check( ! tf.__proto__.hasOwnProperty('_xmouse') );
 currXmouse = tf._xmouse; // unsafe, if user moves the mouse while running the 
test
 tf._xmouse = "a string";
 check_equals(typeof(tf._xmouse), 'number');
@@ -828,7 +833,7 @@
 
 check_equals(typeof(tf._xscale), 'number');
 check( ! tf.hasOwnProperty('_xscale') );
-xcheck( ! tf.__proto__.hasOwnProperty('_xscale') );
+check( ! tf.__proto__.hasOwnProperty('_xscale') );
 check_equals(tf._xscale, 100); 
 // check how .textWidth and ._width change when changing _xscale
 currTextWidth = tf.textWidth;
@@ -836,7 +841,7 @@
 tf._xscale = 200;
 note("textWidth: _xscale=100: "+currTextWidth+"; _xscale=200: "+tf.textWidth);
 // check_equals(tf.textWidth, currTextWidth*2); // not clear what does 
textWidth depend on
-xcheck_equals(tf._width, currWidth*2);
+check_equals(tf._width, currWidth*2);
 tf._xscale = 100;
 
 //-------------------------------------------------------------------------
@@ -856,7 +861,7 @@
 
 check_equals(typeof(tf._ymouse), 'number');
 check( ! tf.hasOwnProperty('_ymouse') );
-xcheck( ! tf.__proto__.hasOwnProperty('_ymouse') );
+check( ! tf.__proto__.hasOwnProperty('_ymouse') );
 currYmouse = tf._ymouse;
 tf._ymouse = "a string";
 check_equals(typeof(tf._ymouse), 'number');
@@ -868,7 +873,7 @@
 
 check_equals(typeof(tf._yscale), 'number');
 check( ! tf.hasOwnProperty('_yscale') );
-xcheck( ! tf.__proto__.hasOwnProperty('_yscale') );
+check( ! tf.__proto__.hasOwnProperty('_yscale') );
 check_equals(tf._yscale, 100); 
 // check how .textHeight and ._height change based on _yscale
 currTextHeight = tf.textHeight;
@@ -876,7 +881,7 @@
 tf._yscale = 200;
 note("textHeight: _yscale=100: "+currTextHeight+"; _yscale=200: 
"+tf.textHeight);
 // check_equals(tf.textHeight, currTextHeight*2); // not clear what does 
textHeight depend on
-xcheck_equals(tf._height, currHeight*2);
+check_equals(tf._height, currHeight*2);
 tf._yscale = 100;
 
 //-------------------------------------------------------------------------
@@ -901,9 +906,9 @@
 check_equals(tf._width, 10);
 
 #if OUTPUT_VERSION < 8
- xcheck_equals(origTextWidth, tf.textWidth); 
+ check_equals(origTextWidth, tf.textWidth); 
 #else
- check(origTextWidth > tf.textWidth); 
+ xcheck(origTextWidth > tf.textWidth); 
 #endif
 
 // test that adding a newline doesn't change the bounds width
@@ -1096,11 +1101,11 @@
 //------------------------------------------------------------
 
 #if OUTPUT_VERSION == 6
- check_totals(477);
+     check_totals(482);
 #elif OUTPUT_VERSION == 7
- check_totals(480);
+ check_totals(485);
 #elif OUTPUT_VERSION == 8
- check_totals(481);
+ check_totals(486);
 #endif
 
 #endif

=== modified file 'testsuite/misc-haxe.all/classes.all/text/TextField_as.hx'
--- a/testsuite/misc-haxe.all/classes.all/text/TextField_as.hx  2009-08-21 
21:19:40 +0000
+++ b/testsuite/misc-haxe.all/classes.all/text/TextField_as.hx  2009-10-01 
08:58:27 +0000
@@ -107,24 +107,6 @@
                DejaGnu.fail("[line "+here.lineNumber+"] ");
        }
 #end
-        //xcheck(!_level0.__shared_assets.instance1._xtrace_win instanceof 
TextField);
-#if !flash9
-       //if(!untyped 
__instanceof__(_level0.__shared_assets.instance1._xtrace_win, TextField)) {
-               //DejaGnu.xpass("[line "+here.lineNumber+"] THIS IS AN EXPECTED 
FAILURE!!!");
-       //} else {
-               //DejaGnu.xfail("[line "+here.lineNumber+"] ");
-       //}
-        //xcheck_equals(typeof(_level0.__shared_assets.instance1._xtrace_win),
-                               //"movieclip");
-       if(typeof(untyped _level0.__shared_assets.instance1._xtrace_win) == 
"movieclip") {
-               DejaGnu.xpass("[line "+here.lineNumber+"] ");
-       } else {
-               DejaGnu.xfail("[line "+here.lineNumber+"] ");
-       }
-        //note(_level0.__shared_assets.instance1._xtrace_win.toString());
-       DejaGnu.note(untyped 
_level0.__shared_assets.instance1._xtrace_win.toString());
-       //#endif
-#end //if !flash9
 #end
 
        //check_equals(typeof(TextField), 'function');
@@ -242,115 +224,7 @@
                DejaGnu.fail("[line "+here.lineNumber+"] 
TextField.prototype._listeners.length should be 0, is "+untyped 
TextField.prototype._listeners.length);
        }
 #end
-       //// NOTE: the following will be true after a call to createTextField ! 
Seek forward to see..
-       //xcheck( !TextField.prototype.hasOwnProperty('background'));
-       if(!untyped TextField.prototype.hasOwnProperty('background')) {
-               DejaGnu.xpass("[line "+here.lineNumber+"] TextField.prototype 
has own property 'background'");
-       } else {
-               DejaGnu.xfail("[line "+here.lineNumber+"] TextField.prototype 
does not have own property 'background'");
-       }
-       //xcheck( !TextField.prototype.hasOwnProperty('backgroundColor'));
-       if(!untyped TextField.prototype.hasOwnProperty('backgroundColor')) {
-               DejaGnu.xpass("[line "+here.lineNumber+"] TextField.prototype 
has own property 'backgroundColor'");
-       } else {
-               DejaGnu.xfail("[line "+here.lineNumber+"] TextField.prototype 
does not have own property 'backgroundColor'");
-       }
-       //xcheck( !TextField.prototype.hasOwnProperty('autoSize') );
-       if(!untyped TextField.prototype.hasOwnProperty('autoSize')) {
-               DejaGnu.xpass("[line "+here.lineNumber+"] TextField.prototype 
has own property 'autoSize'");
-       } else {
-               DejaGnu.xfail("[line "+here.lineNumber+"] TextField.prototype 
does not have own property 'autoSize'");
-       }
-       //xcheck( !TextField.prototype.hasOwnProperty('border') );
-       if(!untyped TextField.prototype.hasOwnProperty('border')) {
-               DejaGnu.xpass("[line "+here.lineNumber+"] TextField.prototype 
has own property 'border'");
-       } else {
-               DejaGnu.xfail("[line "+here.lineNumber+"] TextField.prototype 
does not have own property 'border'");
-       }
-       //xcheck( !TextField.prototype.hasOwnProperty('borderColor') );
-       if(!untyped TextField.prototype.hasOwnProperty('borderColor')) {
-               DejaGnu.xpass("[line "+here.lineNumber+"] TextField.prototype 
has own property 'borderColor'");
-       } else {
-               DejaGnu.xfail("[line "+here.lineNumber+"] TextField.prototype 
does not have own property 'borderColor'");
-       }
-       //xcheck( !TextField.prototype.hasOwnProperty('embedFonts') );
-       if(!untyped TextField.prototype.hasOwnProperty('embedFonts')) {
-               DejaGnu.xpass("[line "+here.lineNumber+"] TextField.prototype 
has own property 'embedFonts'");
-       } else {
-               DejaGnu.xfail("[line "+here.lineNumber+"] TextField.prototype 
does not have own property 'embedFonts'");
-       }
-       //xcheck( !TextField.prototype.hasOwnProperty('htmlText') );
-       if(!untyped TextField.prototype.hasOwnProperty('htmlText')) {
-               DejaGnu.xpass("[line "+here.lineNumber+"] TextField.prototype 
has own property 'htmlText'");
-       } else {
-               DejaGnu.xfail("[line "+here.lineNumber+"] TextField.prototype 
does not have own property 'htmlText'");
-       }
-       //xcheck( !TextField.prototype.hasOwnProperty('length') );
-       if(!untyped TextField.prototype.hasOwnProperty('length')) {
-               DejaGnu.xpass("[line "+here.lineNumber+"] TextField.prototype 
has own property 'length'");
-       } else {
-               DejaGnu.xfail("[line "+here.lineNumber+"] TextField.prototype 
does not have own property 'length'");
-       }
-       //xcheck( !TextField.prototype.hasOwnProperty('maxChars') );
-       if(!untyped TextField.prototype.hasOwnProperty('maxChars')) {
-               DejaGnu.xpass("[line "+here.lineNumber+"] TextField.prototype 
has own property 'maxChars'");
-       } else {
-               DejaGnu.xfail("[line "+here.lineNumber+"] TextField.prototype 
does not have own property 'maxChars'");
-       }
-       //xcheck( !TextField.prototype.hasOwnProperty('multiline') );
-       if(!untyped TextField.prototype.hasOwnProperty('multiline')) {
-               DejaGnu.xpass("[line "+here.lineNumber+"] TextField.prototype 
has own property 'multiline'");
-       } else {
-               DejaGnu.xfail("[line "+here.lineNumber+"] TextField.prototype 
does not have own property 'multiline'");
-       }
-       //xcheck( !TextField.prototype.hasOwnProperty('restrict') );
-       if(!untyped TextField.prototype.hasOwnProperty('restrict')) {
-               DejaGnu.xpass("[line "+here.lineNumber+"] TextField.prototype 
has own property 'restrict'");
-       } else {
-               DejaGnu.xfail("[line "+here.lineNumber+"] TextField.prototype 
does not have own property 'restrict'");
-       }
-       //xcheck( !TextField.prototype.hasOwnProperty('selectable') );
-       if(!untyped TextField.prototype.hasOwnProperty('selectable')) {
-               DejaGnu.xpass("[line "+here.lineNumber+"] TextField.prototype 
has own property 'selectable'");
-       } else {
-               DejaGnu.xfail("[line "+here.lineNumber+"] TextField.prototype 
does not have own property 'selectable'");
-       }
-       //xcheck( !TextField.prototype.hasOwnProperty('text') );
-       if(!untyped TextField.prototype.hasOwnProperty('text')) {
-               DejaGnu.xpass("[line "+here.lineNumber+"] TextField.prototype 
has own property 'text'");
-       } else {
-               DejaGnu.xfail("[line "+here.lineNumber+"] TextField.prototype 
does not have own property 'text'");
-       }
-       //xcheck( !TextField.prototype.hasOwnProperty('textColor') );
-       if(!untyped TextField.prototype.hasOwnProperty('textColor')) {
-               DejaGnu.xpass("[line "+here.lineNumber+"] TextField.prototype 
has own property 'textColor'");
-       } else {
-               DejaGnu.xfail("[line "+here.lineNumber+"] TextField.prototype 
does not have own property 'textColor'");
-       }
-       //xcheck( !TextField.prototype.hasOwnProperty('textHeight') ); // 
should be available on first instantiation
-       if(!untyped TextField.prototype.hasOwnProperty('textHeight')) {
-               DejaGnu.xpass("[line "+here.lineNumber+"] TextField.prototype 
has own property 'textHeight'");
-       } else {
-               DejaGnu.xfail("[line "+here.lineNumber+"] TextField.prototype 
does not have own property 'textHeight'");
-       }
-       //xcheck( !TextField.prototype.hasOwnProperty('textWidth') ); // should 
be available on first instantiation
-       if(!untyped TextField.prototype.hasOwnProperty('textWidth')) {
-               DejaGnu.xpass("[line "+here.lineNumber+"] TextField.prototype 
has own property 'textWidth'");
-       } else {
-               DejaGnu.xfail("[line "+here.lineNumber+"] TextField.prototype 
does not have own property 'textWidth'");
-       }
-       //xcheck( !TextField.prototype.hasOwnProperty('type') ); // should be 
available on first instantiation
-       if(!untyped TextField.prototype.hasOwnProperty('type')) {
-               DejaGnu.xpass("[line "+here.lineNumber+"] TextField.prototype 
has own property 'type'");
-       } else {
-               DejaGnu.xfail("[line "+here.lineNumber+"] TextField.prototype 
does not have own property 'type'");
-       }
-       //xcheck( !TextField.prototype.hasOwnProperty('wordWrap') );
-       if(!untyped TextField.prototype.hasOwnProperty('wordWrap')) {
-               DejaGnu.xpass("[line "+here.lineNumber+"] TextField.prototype 
has own property 'wordWrap'");
-       } else {
-               DejaGnu.xfail("[line "+here.lineNumber+"] TextField.prototype 
does not have own property 'wordWrap'");
-       }
+
 #if flash9
        //xcheck( !TextField.prototype.hasOwnProperty('bottomScrollV') );
        if(!untyped TextField.prototype.hasOwnProperty('bottomScrollV')) {
@@ -394,55 +268,6 @@
        } else {
                DejaGnu.xfail("[line "+here.lineNumber+"] TextField.prototype 
does not have own property 'scrollV'");
        }
-#else
-       //xcheck( !TextField.prototype.hasOwnProperty('bottomScroll') );
-       if(!untyped TextField.prototype.hasOwnProperty('bottomScroll')) {
-               DejaGnu.xpass("[line "+here.lineNumber+"] TextField.prototype 
has own property 'bottomScroll'");
-       } else {
-               DejaGnu.xfail("[line "+here.lineNumber+"] TextField.prototype 
does not have own property 'bottomScroll'");
-       }
-       //xcheck( !TextField.prototype.hasOwnProperty('hscroll') );
-       if(!untyped TextField.prototype.hasOwnProperty('hscroll')) {
-               DejaGnu.xpass("[line "+here.lineNumber+"] TextField.prototype 
has own property 'hscroll'");
-       } else {
-               DejaGnu.xfail("[line "+here.lineNumber+"] TextField.prototype 
does not have own property 'hscroll'");
-       }
-       //xcheck( !TextField.prototype.hasOwnProperty('html') );
-       if(!untyped TextField.prototype.hasOwnProperty('html')) {
-               DejaGnu.xpass("[line "+here.lineNumber+"] TextField.prototype 
has own property 'html'");
-       } else {
-               DejaGnu.xfail("[line "+here.lineNumber+"] TextField.prototype 
does not have own property 'html'");
-       }
-       //xcheck( !TextField.prototype.hasOwnProperty('maxhscroll') );
-       if(!untyped TextField.prototype.hasOwnProperty('maxhscroll')) {
-               DejaGnu.xpass("[line "+here.lineNumber+"] TextField.prototype 
has own property 'maxhscroll'");
-       } else {
-               DejaGnu.xfail("[line "+here.lineNumber+"] TextField.prototype 
does not have own property 'maxhscroll'");
-       }
-       //xcheck( !TextField.prototype.hasOwnProperty('maxscroll') );
-       if(!untyped TextField.prototype.hasOwnProperty('maxscroll')) {
-               DejaGnu.xpass("[line "+here.lineNumber+"] TextField.prototype 
has own property 'maxscroll'");
-       } else {
-               DejaGnu.xfail("[line "+here.lineNumber+"] TextField.prototype 
does not have own property 'maxscroll'");
-       }
-       //xcheck( !TextField.prototype.hasOwnProperty('password') );
-       if(!untyped TextField.prototype.hasOwnProperty('password')) {
-               DejaGnu.xpass("[line "+here.lineNumber+"] TextField.prototype 
has own property 'password'");
-       } else {
-               DejaGnu.xfail("[line "+here.lineNumber+"] TextField.prototype 
does not have own property 'password'");
-       }
-       //xcheck( !TextField.prototype.hasOwnProperty('scroll') );
-       if(!untyped TextField.prototype.hasOwnProperty('scroll')) {
-               DejaGnu.xpass("[line "+here.lineNumber+"] TextField.prototype 
has own property 'scroll'");
-       } else {
-               DejaGnu.xfail("[line "+here.lineNumber+"] TextField.prototype 
does not have own property 'scroll'");
-       }
-       //xcheck( !TextField.prototype.hasOwnProperty('variable') );
-       if(!untyped TextField.prototype.hasOwnProperty('variable')) {
-               DejaGnu.xpass("[line "+here.lineNumber+"] TextField.prototype 
has own property 'variable'");
-       } else {
-               DejaGnu.xfail("[line "+here.lineNumber+"] TextField.prototype 
does not have own property 'variable'");
-       }
 #end
 
        //// this is a static method
@@ -1465,9 +1290,9 @@
                }
                //xcheck(!tf.__proto__.hasOwnProperty('_highquality'));
                if(!untyped tf.__proto__.hasOwnProperty('_highquality')) {
-                       DejaGnu.xpass("[line "+here.lineNumber+"] tf.__proto__ 
does not have own property '_highquality'");
+                       DejaGnu.pass("[line "+here.lineNumber+"] tf.__proto__ 
does not have own property '_highquality'");
                } else {
-                       DejaGnu.xfail("[line "+here.lineNumber+"] tf.__proto__ 
has own property '_highquality'");
+                       DejaGnu.fail("[line "+here.lineNumber+"] tf.__proto__ 
has own property '_highquality'");
                }
                //check_equals(tf._highquality, 1);
                if(untyped tf._highquality == 1) {
@@ -2133,9 +1958,9 @@
                }
                //xcheck(!tf.__proto__.hasOwnProperty('_name'));
                if(!untyped tf.__proto__.hasOwnProperty('_name')) {
-                       DejaGnu.xpass("[line "+here.lineNumber+"] tf.__proto__ 
does not have own property '_name'");
+                       DejaGnu.pass("[line "+here.lineNumber+"] tf.__proto__ 
does not have own property '_name'");
                } else {
-                       DejaGnu.xfail("[line "+here.lineNumber+"] tf.__proto__ 
has own property '_name'");
+                       DejaGnu.fail("[line "+here.lineNumber+"] tf.__proto__ 
has own property '_name'");
                }
                //check_equals(tf._name, 'tf');
                if(untyped tf._name == 'tf') {
@@ -2242,9 +2067,9 @@
                }
                //xcheck(!tf.__proto__.hasOwnProperty('_parent'));
                if(!untyped tf.__proto__.hasOwnProperty('_parent')) {
-                       DejaGnu.xpass("[line "+here.lineNumber+"] tf.__proto__ 
does not have own property '_parent'");
+                       DejaGnu.pass("[line "+here.lineNumber+"] tf.__proto__ 
does not have own property '_parent'");
                } else {
-                       DejaGnu.xfail("[line "+here.lineNumber+"] tf.__proto__ 
has own property '_parent'");
+                       DejaGnu.fail("[line "+here.lineNumber+"] tf.__proto__ 
has own property '_parent'");
                }
                //check_equals(tf._parent, _root);
                if(untyped tfref._parent == _root) {
@@ -2496,9 +2321,9 @@
                }
                //xcheck(!tf.__proto__.hasOwnProperty('_quality'));
                if(!untyped tf.__proto__.hasOwnProperty('_quality')) {
-                       DejaGnu.xpass("[line "+here.lineNumber+"] tf.__proto__ 
does not have own property '_quality'");
+                       DejaGnu.pass("[line "+here.lineNumber+"] tf.__proto__ 
does not have own property '_quality'");
                } else {
-                       DejaGnu.xfail("[line "+here.lineNumber+"] tf.__proto__ 
has own property '_quality'");
+                       DejaGnu.fail("[line "+here.lineNumber+"] tf.__proto__ 
has own property '_quality'");
                }
                //check(!tf.__proto__.__proto__.hasOwnProperty('_quality'));
                if(!untyped tf.__proto__.__proto__.hasOwnProperty('_quality')) {
@@ -2627,9 +2452,9 @@
                _root.createTextField("tf", 99, 10, 10, 500, 500);
                //xcheck_equals(typeof(tf._rotation), 'number');
                if(typeof(untyped tf._rotation) == 'number') {
-                       DejaGnu.xpass("[line "+here.lineNumber+"] typeof 
tf._rotation is 'number'");
+                       DejaGnu.pass("[line "+here.lineNumber+"] typeof 
tf._rotation is 'number'");
                } else {
-                       DejaGnu.xfail("[line "+here.lineNumber+"] typeof 
tf._rotation should be 'number', is "+typeof(untyped tf._rotation));
+                       DejaGnu.fail("[line "+here.lineNumber+"] typeof 
tf._rotation should be 'number', is "+typeof(untyped tf._rotation));
                }
                //check(!tf.hasOwnProperty('_rotation'));
                if(!untyped tf.hasOwnProperty('_rotation')) {
@@ -2645,9 +2470,9 @@
                }
                //xcheck_equals(tf._rotation, 0);
                if(untyped tf._rotation == 0) {
-                       DejaGnu.xpass("[line "+here.lineNumber+"] tf._rotation 
is 0");
+                       DejaGnu.pass("[line "+here.lineNumber+"] tf._rotation 
is 0");
                } else {
-                       DejaGnu.xfail("[line "+here.lineNumber+"] tf._rotation 
should be 0, is "+untyped tf._rotation);
+                       DejaGnu.fail("[line "+here.lineNumber+"] tf._rotation 
should be 0, is "+untyped tf._rotation);
                }
                //tf._rotation = 10;
                untyped tf._rotation = 10;
@@ -2785,9 +2610,9 @@
 #if !flash9
                //xcheck_equals(typeof(tf._soundbuftime), 'number');
                if(typeof(untyped tf._soundbuftime) == 'number') {
-                       DejaGnu.xpass("[line "+here.lineNumber+"] typeof 
tf._soundbuftime is 'number'");
+                       DejaGnu.pass("[line "+here.lineNumber+"] typeof 
tf._soundbuftime is 'number'");
                } else {
-                       DejaGnu.xfail("[line "+here.lineNumber+"] typeof 
tf._soundbuftime should be 'number', is "+typeof(untyped tf._soundbuftime));
+                       DejaGnu.fail("[line "+here.lineNumber+"] typeof 
tf._soundbuftime should be 'number', is "+typeof(untyped tf._soundbuftime));
                }
                //check( ! tf.hasOwnProperty('_soundbuftime') ); 
                if(!untyped tf.hasOwnProperty('_soundbuftime')) {
@@ -2834,12 +2659,14 @@
                } else {
                        DejaGnu.fail("[line "+here.lineNumber+"] tf has own 
property 'tabEnabled'");
                }
+#if !flash9
                //check( ! tf.__proto__.hasOwnProperty('tabEnabled') ); 
                if(!untyped tf.__proto__.hasOwnProperty('tabEnabled')) {
                        DejaGnu.pass("[line "+here.lineNumber+"] tf.__proto__ 
does not have own property 'tabEnabled'");
                } else {
                        DejaGnu.fail("[line "+here.lineNumber+"] tf.__proto__ 
has own property 'tabEnabled'");
                }
+#end
                //tf.tabEnabled = false;
                untyped tf.tabEnabled = false;
                //check_equals(tf.tabEnabled, false);
@@ -2877,10 +2704,10 @@
                        DejaGnu.fail("[line "+here.lineNumber+"] tf has own 
property 'tabIndex'");
                }
                //check( ! tf.__proto__.hasOwnProperty('tabIndex') ); 
-               if(!untyped tf.__proto__.hasOwnProperty('tabIndex')) {
-                       DejaGnu.pass("[line "+here.lineNumber+"] tf.__proto__ 
does not have own property 'tabIndex'");
+               if(untyped tf.__proto__.hasOwnProperty('tabIndex')) {
+                       DejaGnu.xpass("[line "+here.lineNumber+"] tf.__proto__ 
has own property 'tabIndex'");
                } else {
-                       DejaGnu.fail("[line "+here.lineNumber+"] tf.__proto__ 
has own property 'tabIndex'");
+                       DejaGnu.xfail("[line "+here.lineNumber+"] tf.__proto__ 
does not have own property 'tabIndex'");
                }
                //tf.tabIndex = 9;
                untyped tf.tabIndex = 9;
@@ -2911,9 +2738,9 @@
                ///TODO: This test fails...
                //check( ! tf.__proto__.hasOwnProperty('_target') ); 
                if(!untyped tf.__proto__.hasOwnProperty('_target')) {
-                       DejaGnu.xpass("[line "+here.lineNumber+"] tf.__proto__ 
does not have own property '_target'");
+                       DejaGnu.pass("[line "+here.lineNumber+"] tf.__proto__ 
does not have own property '_target'");
                } else {
-                       DejaGnu.xfail("[line "+here.lineNumber+"] tf.__proto__ 
has own property '_target'");
+                       DejaGnu.fail("[line "+here.lineNumber+"] tf.__proto__ 
has own property '_target'");
                }
                //check_equals(tf._target, '/tf');
                if(untyped tf._target == '/tf') {
@@ -3184,9 +3011,9 @@
 #if !flash9
                //xcheck_equals(typeof(tf._url), 'string');
                if(typeof(untyped tf._url) == 'string') {
-                       DejaGnu.xpass("[line "+here.lineNumber+"] typeof 
tf._url is 'string'");
+                       DejaGnu.pass("[line "+here.lineNumber+"] typeof tf._url 
is 'string'");
                } else {
-                       DejaGnu.xfail("[line "+here.lineNumber+"] typeof 
tf._url should be 'string', is "+typeof(untyped tf._url));
+                       DejaGnu.fail("[line "+here.lineNumber+"] typeof tf._url 
should be 'string', is "+typeof(untyped tf._url));
                }
                //check( ! tf.hasOwnProperty('_url') ); 
                if(!untyped tf.hasOwnProperty('_url')) {
@@ -3202,17 +3029,17 @@
                }
                //xcheck_equals(tf._url, _root._url);
                if(untyped tf._url == _root._url) {
-                       DejaGnu.xpass("[line "+here.lineNumber+"] tf._url is 
_root._url");
+                       DejaGnu.pass("[line "+here.lineNumber+"] tf._url is 
_root._url");
                } else {
-                       DejaGnu.xfail("[line "+here.lineNumber+"] tf._url 
should be _root._url, is "+untyped tf._url);
+                       DejaGnu.fail("[line "+here.lineNumber+"] tf._url should 
be _root._url, is "+untyped tf._url);
                }
                //tf._url = "fake url";
                untyped tf._url = "fake url";
                //xcheck_equals(tf._url, _root._url); // read-only
                if(untyped tf._url == _root._url) {
-                       DejaGnu.xpass("[line "+here.lineNumber+"] tf._url is 
_root._url");
+                       DejaGnu.pass("[line "+here.lineNumber+"] tf._url is 
_root._url");
                } else {
-                       DejaGnu.xfail("[line "+here.lineNumber+"] tf._url 
should be _root._url, is "+untyped tf._url);
+                       DejaGnu.fail("[line "+here.lineNumber+"] tf._url should 
be _root._url, is "+untyped tf._url);
                }
 #end
        }
@@ -3332,54 +3159,6 @@
                } else {
                        DejaGnu.fail("[line "+here.lineNumber+"] tf.text should 
be 'back-propagated', is "+untyped tf.text);
                }
-               //tf.text = "back-to-object"; // instead, assigning to 
TextField.text updates the object
-               untyped tf.text = "back-to-object";
-               ///TODO: This test fails...
-               //check_equals(o.t, "back-to-object");  
-               if(untyped o.t == 'back-to-object') {
-                       DejaGnu.xpass("[line "+here.lineNumber+"] o.t is 
'back-to-object'");
-               } else {
-                       DejaGnu.xfail("[line "+here.lineNumber+"] o.t should be 
'back-to-object', is "+untyped o.t);
-               }
-               //o.t = "from object again"; // but updates to the object still 
don't update the TextField
-               o.t = "from object again";
-               //check_equals(tf.text, "back-to-object");  // assigning to the 
object doesn't trigger update of text ?
-               if(untyped tf.text == 'back-to-object') {
-                       DejaGnu.pass("[line "+here.lineNumber+"] tf.text is 
'back-to-object'");
-               } else {
-                       DejaGnu.fail("[line "+here.lineNumber+"] tf.text should 
be 'back-to-object', is "+untyped tf.text);
-               }
-               //tf.variable = "_level0.o.t"; // We re-assign 
TextField.variable, now the variable exists
-               untyped tf.variable = "_level0.o.t";
-               //xcheck_equals(tf.text, "from object again");  // this time 
the TextField.text is updated
-               if(untyped tf.text == 'from object again') {
-                       DejaGnu.xpass("[line "+here.lineNumber+"] tf.text is 
'from object again'");
-               } else {
-                       DejaGnu.xfail("[line "+here.lineNumber+"] tf.text 
should be 'from object again', is "+untyped tf.text);
-               }
-               //check_equals(o.t, "from object again");
-               if(untyped o.t == 'from object again') {
-                       DejaGnu.pass("[line "+here.lineNumber+"] o.t is 'from 
object again'");
-               } else {
-                       DejaGnu.fail("[line "+here.lineNumber+"] o.t should be 
'from object again', is "+untyped o.t);
-               }
-               //o.t = "and forever";
-               untyped o.t = "and forever";
-               //xcheck_equals(tf.text, "from object again"); // but updating 
o.t still doesn't trigger update of the text ?
-               if(untyped tf.text == 'from object again') {
-                       DejaGnu.xpass("[line "+here.lineNumber+"] tf.text is 
'from object again'");
-               } else {
-                       DejaGnu.xfail("[line "+here.lineNumber+"] tf.text 
should be 'from object again', is "+untyped tf.text);
-               }
-               //tf.text = "and forever back";
-               untyped tf.text = "and forever back";
-               ///TODO: This test fails...
-               //check_equals(o.t, "and forever back"); // while updating 
textfield's text updates o.t
-               if(untyped o.t == 'and forever back') {
-                       DejaGnu.xpass("[line "+here.lineNumber+"] o.t is 'and 
forever back'");
-               } else {
-                       DejaGnu.xfail("[line "+here.lineNumber+"] o.t should be 
'and forever back', is "+untyped o.t);
-               }
 #end
        }
        
@@ -3902,9 +3681,9 @@
                ///TODO: This test fails...
                //check( ! tf.__proto__.hasOwnProperty('_xmouse') );
                if(!untyped tf.__proto__.hasOwnProperty('_xmouse')) {
-                       DejaGnu.xpass("[line "+here.lineNumber+"] tf.__proto__ 
does not have own property '_xmouse'");
+                       DejaGnu.pass("[line "+here.lineNumber+"] tf.__proto__ 
does not have own property '_xmouse'");
                } else {
-                       DejaGnu.xfail("[line "+here.lineNumber+"] tf.__proto__ 
has own property '_xmouse'");
+                       DejaGnu.fail("[line "+here.lineNumber+"] tf.__proto__ 
has own property '_xmouse'");
                }
                //currXmouse = tf._xmouse; // unsafe, if user moves the mouse 
while running the test
                var currXmouse = untyped tf._xmouse;
@@ -3994,9 +3773,9 @@
                ///TODO: This test fails...
                //check( ! tf.__proto__.hasOwnProperty('_xscale') );
                if(!untyped tf.__proto__.hasOwnProperty('_xscale')) {
-                       DejaGnu.xpass("[line "+here.lineNumber+"] tf.__proto__ 
does not have own property '_xscale'");
+                       DejaGnu.pass("[line "+here.lineNumber+"] tf.__proto__ 
does not have own property '_xscale'");
                } else {
-                       DejaGnu.xfail("[line "+here.lineNumber+"] tf.__proto__ 
has own property '_xscale'");
+                       DejaGnu.fail("[line "+here.lineNumber+"] tf.__proto__ 
has own property '_xscale'");
                }
                //check_equals(tf._xscale, 100); 
                if(untyped tf._xscale == 100) {
@@ -4016,9 +3795,9 @@
                //// check_equals(tf.textWidth, currTextWidth*2); // not clear 
what does textWidth depend on
                //xcheck_equals(tf._width, currWidth*2);
                if(untyped tf._width == currWidth*2) {
-                       DejaGnu.xpass("[line "+here.lineNumber+"] tf._width is 
"+currWidth*2);
+                       DejaGnu.pass("[line "+here.lineNumber+"] tf._width is 
"+currWidth*2);
                } else {
-                       DejaGnu.xfail("[line "+here.lineNumber+"] tf._width 
should be "+currWidth*2+", is "+untyped tf._width);
+                       DejaGnu.fail("[line "+here.lineNumber+"] tf._width 
should be "+currWidth*2+", is "+untyped tf._width);
                }
                //tf._xscale = 100;
                untyped tf._xscale = 100;
@@ -4157,9 +3936,9 @@
                ///TODO: This test fails...
                //check( ! tf.__proto__.hasOwnProperty('_ymouse') );
                if(!untyped tf.__proto__.hasOwnProperty('_ymouse')) {
-                       DejaGnu.xpass("[line "+here.lineNumber+"] tf.__proto__ 
does not have own property '_ymouse'");
+                       DejaGnu.pass("[line "+here.lineNumber+"] tf.__proto__ 
does not have own property '_ymouse'");
                } else {
-                       DejaGnu.xfail("[line "+here.lineNumber+"] tf.__proto__ 
has own property '_ymouse'");
+                       DejaGnu.fail("[line "+here.lineNumber+"] tf.__proto__ 
has own property '_ymouse'");
                }
                //currYmouse = tf._ymouse; // unsafe, if user moves the mouse 
while running the test
                var currYmouse = untyped tf._ymouse;
@@ -4249,9 +4028,9 @@
                ///TODO: This test fails...
                //check( ! tf.__proto__.hasOwnProperty('_yscale') );
                if(!untyped tf.__proto__.hasOwnProperty('_yscale')) {
-                       DejaGnu.xpass("[line "+here.lineNumber+"] tf.__proto__ 
does not have own property '_yscale'");
+                       DejaGnu.pass("[line "+here.lineNumber+"] tf.__proto__ 
does not have own property '_yscale'");
                } else {
-                       DejaGnu.xfail("[line "+here.lineNumber+"] tf.__proto__ 
has own property '_yscale'");
+                       DejaGnu.fail("[line "+here.lineNumber+"] tf.__proto__ 
has own property '_yscale'");
                }
                //check_equals(tf._yscale, 100); 
                if(untyped tf._yscale == 100) {
@@ -4271,9 +4050,9 @@
                //// check_equals(tf.textHeight, currTextHeight*2); // not 
clear what does textHeight depend on
                //xcheck_equals(tf._height, currHeight*2);
                if(untyped tf._height == currHeight*2) {
-                       DejaGnu.xpass("[line "+here.lineNumber+"] tf._height is 
"+currHeight*2);
+                       DejaGnu.pass("[line "+here.lineNumber+"] tf._height is 
"+currHeight*2);
                } else {
-                       DejaGnu.xfail("[line "+here.lineNumber+"] tf._height 
should be "+currHeight*2+", is "+untyped tf._height);
+                       DejaGnu.fail("[line "+here.lineNumber+"] tf._height 
should be "+currHeight*2+", is "+untyped tf._height);
                }
                //tf._yscale = 100;
                untyped tf._yscale = 100;
@@ -4348,12 +4127,6 @@
                untyped tf.wordWrap = true;
                //note("After setting wordWrap flat: textWidth: 
"+tf.textWidth+" origTextWidth:"+origTextWidth);
                DejaGnu.note("After setting wordWrap flat: textWidth: "+untyped 
tf.textWidth+" origTextWidth:"+origTextWidth);
-               //check_equals(tf.textWidth, origTextWidth);
-               if(untyped tf.textWidth == origTextWidth) {
-                       DejaGnu.pass("[line "+here.lineNumber+"] tf.textWidth 
is "+origTextWidth);
-               } else {
-                       DejaGnu.fail("[line "+here.lineNumber+"] tf.textWidth 
should be "+origTextWidth+", is "+untyped tf.textWidth);
-               }
                //tf._width = 10;
 #if flash9
                untyped tf.width = 10;
@@ -4381,17 +4154,17 @@
 #if (flash6 || flash7)
                 //xcheck_equals(origTextWidth, tf.textWidth);
                 if(origTextWidth == untyped tf.textWidth) {
-                        DejaGnu.xpass("[line "+here.lineNumber+"] tf.textWidth 
is "+origTextWidth);
+                        DejaGnu.pass("[line "+here.lineNumber+"] tf.textWidth 
is "+origTextWidth);
                 } else {
-                        DejaGnu.xfail("[line "+here.lineNumber+"] tf.textWidth 
should be "+origTextWidth+", is "+untyped tf.textWidth);
+                        DejaGnu.fail("[line "+here.lineNumber+"] tf.textWidth 
should be "+origTextWidth+", is "+untyped tf.textWidth);
                 }
                //#else
 #else
                 //check(origTextWidth > tf.textWidth);
                 if(origTextWidth > untyped tf.textWidth) {
-                        DejaGnu.pass("[line "+here.lineNumber+"] tf.textWidth 
is less than "+origTextWidth);
+                        DejaGnu.xpass("[line "+here.lineNumber+"] tf.textWidth 
is less than "+origTextWidth);
                 } else {
-                        DejaGnu.fail("[line "+here.lineNumber+"] tf.textWidth 
should be less than "+origTextWidth+", is "+untyped tf.textWidth);
+                        DejaGnu.xfail("[line "+here.lineNumber+"] tf.textWidth 
should be less than "+origTextWidth+", is "+untyped tf.textWidth);
                 }
                //#endif
 #end
@@ -5487,12 +5260,6 @@
                } else {
                        DejaGnu.fail("[line "+here.lineNumber+"] _root._target 
should be '/', is "+_root._target);
                }
-               //xcheck_equals(_root._parent, 'fake_parent');
-               if(_root._parent == untyped 'fake_parent') {
-                       DejaGnu.xpass("[line "+here.lineNumber+"] _root._parent 
is 'fake_parent'");
-               } else {
-                       DejaGnu.xfail("[line "+here.lineNumber+"] _root._parent 
should be 'fake_parent', is "+_root._parent);
-               }
                //check_equals(_root._name, '');
                if(_root._name == '') {
                        DejaGnu.pass("[line "+here.lineNumber+"] _root._name is 
''");

=== modified file 'testsuite/misc-ming.all/DefineEditTextTest.c'
--- a/testsuite/misc-ming.all/DefineEditTextTest.c      2009-02-25 22:33:03 
+0000
+++ b/testsuite/misc-ming.all/DefineEditTextTest.c      2009-09-30 15:20:47 
+0000
@@ -201,11 +201,11 @@
   check(mo, "TextField.prototype.hasOwnProperty('backgroundColor')");
   check(mo, "TextField.prototype.hasOwnProperty('text')");
   check(mo, "TextField.prototype.hasOwnProperty('textColor')");
-  xcheck(mo, "!TextField.prototype.hasOwnProperty('_parent')");
-  xcheck(mo, "!TextField.prototype.hasOwnProperty('_xmouse')");
-  xcheck(mo, "!TextField.prototype.hasOwnProperty('_ymouse')");
-  xcheck(mo, "!TextField.prototype.hasOwnProperty('_xscale')");
-  xcheck(mo, "!TextField.prototype.hasOwnProperty('_yscale')");
+  check(mo, "!TextField.prototype.hasOwnProperty('_parent')");
+  check(mo, "!TextField.prototype.hasOwnProperty('_xmouse')");
+  check(mo, "!TextField.prototype.hasOwnProperty('_ymouse')");
+  check(mo, "!TextField.prototype.hasOwnProperty('_xscale')");
+  check(mo, "!TextField.prototype.hasOwnProperty('_yscale')");
   
   check_equals(mo, "typeof(dtext1)", "'object'");
   check_equals(mo, "typeof(dtext1.text)", "'string'");

=== modified file 'testsuite/misc-ming.all/DeviceFontTest.c'
--- a/testsuite/misc-ming.all/DeviceFontTest.c  2009-07-15 16:02:52 +0000
+++ b/testsuite/misc-ming.all/DeviceFontTest.c  2009-09-30 15:20:47 +0000
@@ -231,7 +231,7 @@
   // Approx 69
   xcheck(mo, "tf2.textWidth >= 66 && tf2.textWidth <= 72");
 
-  xcheck_equals(mo, "tf3._width", "1344");
+  check_equals(mo, "tf3._width", "1344");
   check_equals(mo, "tf3._height", "20");
   xcheck_equals(mo, "tf3._x", "18");
   xcheck_equals(mo, "tf3._y", "88");
@@ -239,7 +239,7 @@
   // Approx 13
   xcheck(mo, "tf3.textWidth >= 11 && tf3.textWidth <= 15");
 
-  xcheck_equals(mo, "tf4._width", "1344");
+  check_equals(mo, "tf4._width", "1344");
   check_equals(mo, "tf4._height", "20");
   xcheck_equals(mo, "tf4._x", "18");
   xcheck_equals(mo, "tf4._y", "118");
@@ -247,7 +247,7 @@
   // Approx 9
   xcheck(mo, "tf4.textWidth >= 7 && tf4.textWidth <= 11");
 
-  xcheck_equals(mo, "tf5._width", "1344");
+  check_equals(mo, "tf5._width", "1344");
   check_equals(mo, "tf5._height", "20");
   xcheck_equals(mo, "tf5._x", "18");
   xcheck_equals(mo, "tf5._y", "148");
@@ -255,7 +255,7 @@
   // Approx 10
   xcheck(mo, "tf5.textWidth >= 8 && tf5.textWidth <= 12");
 
-  xcheck_equals(mo, "tf6._width", "1344");
+  check_equals(mo, "tf6._width", "1344");
   check_equals(mo, "tf6._height", "20");
   xcheck_equals(mo, "tf6._x", "18");
   xcheck_equals(mo, "tf6._y", "178");
@@ -263,7 +263,7 @@
   // Approx 11
   xcheck(mo, "tf6.textWidth >= 9 && tf6.textWidth <= 13");
 
-  xcheck_equals(mo, "tf7._width", "1344");
+  check_equals(mo, "tf7._width", "1344");
   check_equals(mo, "tf7._height", "20");
   xcheck_equals(mo, "tf7._x", "18");
   xcheck_equals(mo, "tf7._y", "208");
@@ -271,7 +271,7 @@
   // Approx 14
   xcheck(mo, "tf7.textWidth >= 14 && tf7.textWidth <= 16");
 
-  xcheck_equals(mo, "tf8._width", "672");
+  check_equals(mo, "tf8._width", "672");
   check_equals(mo, "tf8._height", "20");
   xcheck_equals(mo, "tf8._x", "34");
   xcheck_equals(mo, "tf8._y", "238");
@@ -279,7 +279,7 @@
   // Approx 25
   xcheck(mo, "tf8.textWidth >= 21 && tf8.textWidth <= 27");
 
-  xcheck_equals(mo, "tf9._width", "672");
+  check_equals(mo, "tf9._width", "672");
   check_equals(mo, "tf9._height", "20");
   xcheck_equals(mo, "tf9._x", "34");
   xcheck_equals(mo, "tf9._y", "268");
@@ -287,7 +287,7 @@
   // Approx 16
   xcheck(mo, "tf9.textWidth >= 14 && tf9.textWidth <= 18");
 
-  xcheck_equals(mo, "tf10._width", "16.8");
+  check_equals(mo, "tf10._width", "16.8");
   check_equals(mo, "tf10._height", "20");
   xcheck_equals(mo, "tf10._x", "49.6");
   xcheck_equals(mo, "tf10._y", "298");
@@ -297,7 +297,7 @@
 
   // The textHeight for the following two fields varies.
   check_equals(mo, "tf11._width", "84");
-  xcheck_equals(mo, "tf11._height", "80");
+  check_equals(mo, "tf11._height", "80");
   xcheck_equals(mo, "tf11._x", "48");
   xcheck_equals(mo, "tf11._y", "322");
   add_actions(mo, "trace(tf11.textWidth);");
@@ -306,7 +306,7 @@
   xcheck(mo, "tf11.textWidth >= 305 && tf11.textWidth <= 325");
 
   check_equals(mo, "tf12._width", "84");
-  xcheck_equals(mo, "tf12._height", "160");
+  check_equals(mo, "tf12._height", "160");
   xcheck_equals(mo, "tf12._x", "48");
   xcheck_equals(mo, "tf12._y", "404");
   add_actions(mo, "trace(tf12.textWidth);");

=== modified file 'testsuite/misc-ming.all/EmbeddedFontTest.c'
--- a/testsuite/misc-ming.all/EmbeddedFontTest.c        2009-07-15 16:42:57 
+0000
+++ b/testsuite/misc-ming.all/EmbeddedFontTest.c        2009-09-30 15:20:47 
+0000
@@ -240,7 +240,7 @@
   add_actions(mo, "trace(tf2.textWidth);");
   xcheck(mo, "tf2.textWidth >= 76 && tf2.textWidth <= 80");
 
-  xcheck_equals(mo, "tf3._width", "1344");
+  check_equals(mo, "tf3._width", "1344");
   check_equals(mo, "tf3._height", "20");
   xcheck_equals(mo, "tf3._x", "18");
   xcheck_equals(mo, "tf3._y", "88");
@@ -249,7 +249,7 @@
   add_actions(mo, "trace(tf3.textWidth);");
   xcheck(mo, "tf3.textWidth >= 225 && tf3.textWidth <= 235");
 
-  xcheck_equals(mo, "tf4._width", "1344");
+  check_equals(mo, "tf4._width", "1344");
   check_equals(mo, "tf4._height", "20");
   xcheck_equals(mo, "tf4._x", "18");
   xcheck_equals(mo, "tf4._y", "118");
@@ -258,7 +258,7 @@
   add_actions(mo, "trace(tf4.textWidth);");
   xcheck(mo, "tf4.textWidth >= 153 && tf4.textWidth <= 159");
 
-  xcheck_equals(mo, "tf5._width", "1344");
+  check_equals(mo, "tf5._width", "1344");
   check_equals(mo, "tf5._height", "20");
   xcheck_equals(mo, "tf5._x", "18");
   xcheck_equals(mo, "tf5._y", "148");
@@ -267,7 +267,7 @@
   add_actions(mo, "trace(tf5.textWidth);");
   xcheck(mo, "tf5.textWidth >= 183 && tf5.textWidth <= 189");
 
-  xcheck_equals(mo, "tf6._width", "1344");
+  check_equals(mo, "tf6._width", "1344");
   check_equals(mo, "tf6._height", "20");
   xcheck_equals(mo, "tf6._x", "18");
   xcheck_equals(mo, "tf6._y", "178");
@@ -276,7 +276,7 @@
   add_actions(mo, "trace(tf6.textWidth);");
   xcheck(mo, "tf6.textWidth >= 189 && tf6.textWidth <= 199");
 
-  xcheck_equals(mo, "tf7._width", "1344");
+  check_equals(mo, "tf7._width", "1344");
   check_equals(mo, "tf7._height", "20");
   xcheck_equals(mo, "tf7._x", "18");
   xcheck_equals(mo, "tf7._y", "208");
@@ -285,7 +285,7 @@
   add_actions(mo, "trace(tf7.textWidth);");
   xcheck(mo, "tf7.textWidth >= 240 && tf7.textWidth <= 254");
 
-  xcheck_equals(mo, "tf8._width", "672");
+  check_equals(mo, "tf8._width", "672");
   check_equals(mo, "tf8._height", "20");
   xcheck_equals(mo, "tf8._x", "34");
   xcheck_equals(mo, "tf8._y", "238");
@@ -294,7 +294,7 @@
   add_actions(mo, "trace(tf8.textWidth);");
   xcheck(mo, "tf8.textWidth >= 217 && tf8.textWidth <= 227");
 
-  xcheck_equals(mo, "tf9._width", "672");
+  check_equals(mo, "tf9._width", "672");
   check_equals(mo, "tf9._height", "20");
   xcheck_equals(mo, "tf9._x", "34");
   xcheck_equals(mo, "tf9._y", "268");
@@ -303,7 +303,7 @@
   add_actions(mo, "trace(tf9.textWidth);");
   xcheck(mo, "tf9.textWidth >= 144 && tf9.textWidth <= 152");
 
-  xcheck_equals(mo, "tf10._width", "16.8");
+  check_equals(mo, "tf10._width", "16.8");
   check_equals(mo, "tf10._height", "20");
   xcheck_equals(mo, "tf10._x", "49.6");
   xcheck_equals(mo, "tf10._y", "298");
@@ -314,7 +314,7 @@
 
   // The textHeight for the following two fields varies.
   check_equals(mo, "tf11._width", "84");
-  xcheck_equals(mo, "tf11._height", "80");
+  check_equals(mo, "tf11._height", "80");
   xcheck_equals(mo, "tf11._x", "48");
   xcheck_equals(mo, "tf11._y", "322");
   xcheck_equals(mo, "tf11.textHeight", "23");
@@ -323,7 +323,7 @@
   xcheck(mo, "tf11.textWidth >= 84 && tf11.textWidth <= 88");
 
   check_equals(mo, "tf12._width", "84");
-  xcheck_equals(mo, "tf12._height", "160");
+  check_equals(mo, "tf12._height", "160");
   xcheck_equals(mo, "tf12._x", "48");
   xcheck_equals(mo, "tf12._y", "404");
   xcheck_equals(mo, "tf12.textHeight", "23");

=== modified file 'testsuite/misc-ming.all/NetStream-SquareTest.c'
--- a/testsuite/misc-ming.all/NetStream-SquareTest.c    2009-09-07 17:34:36 
+0000
+++ b/testsuite/misc-ming.all/NetStream-SquareTest.c    2009-09-30 15:20:47 
+0000
@@ -436,6 +436,21 @@
   check(mo, "!Video.prototype.hasOwnProperty('_yscale')");
   check(mo, "!Video.prototype.hasOwnProperty('_xmouse')");
 
+  check(mo, "!video.hasOwnProperty('_alpha')");
+  check(mo, "!video.hasOwnProperty('_height')");
+  check(mo, "!video.hasOwnProperty('_name')");
+  check(mo, "!video.hasOwnProperty('_parent')");
+  check(mo, "!video.hasOwnProperty('_rotation')");
+  check(mo, "!video.hasOwnProperty('_visible')");
+  check(mo, "!video.hasOwnProperty('_width')");
+  check(mo, "!video.hasOwnProperty('_x')");
+  check(mo, "!video.hasOwnProperty('_xmouse')");
+  check(mo, "!video.hasOwnProperty('_xscale')");
+  check(mo, "!video.hasOwnProperty('_y')");
+  check(mo, "!video.hasOwnProperty('_ymouse')");
+  check(mo, "!video.hasOwnProperty('_yscale')");
+  check(mo, "!video.hasOwnProperty('_xmouse')");
+
   add_actions(mo,
                "video._x = 100;"
                "video._xscale = 120;"
@@ -696,7 +711,7 @@
   check_equals(mo, "metadataNotified", "1");
   check_equals(mo, "stopNotified", "2");
   check_equals(mo, "startNotified", "1");
-  SWFMovie_add(mo, (SWFBlock)newSWFAction("totals(183); stop(); 
end_of_test=true;"));
+  SWFMovie_add(mo, (SWFBlock)newSWFAction("totals(197); stop(); 
end_of_test=true;"));
 
   SWFMovie_nextFrame(mo);
 


reply via email to

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