[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Gnash-commit] gnash ChangeLog server/as_object.cpp server/as_...
From: |
Bastiaan Jacques |
Subject: |
[Gnash-commit] gnash ChangeLog server/as_object.cpp server/as_... |
Date: |
Thu, 22 Mar 2007 16:56:36 +0000 |
CVSROOT: /sources/gnash
Module name: gnash
Changes by: Bastiaan Jacques <bjacques> 07/03/22 16:56:36
Modified files:
. : ChangeLog
server : as_object.cpp as_object.h
button_character_instance.cpp character.cpp
character.h sprite_instance.cpp
Log message:
* server/as_object.cpp: in set_member_default(), only setValue()
on properties that aren't read-only. Add an init_property()
method specifically for read-only properties which takes only
a setter. Also add a method asPropName() that converts property
names to lowercase, which is a very common pattern in this
class.
* server/button_character_instance.cpp,
server/character{.cpp, .h}, server/character_instance.cpp:
Use the new init_property() for read-only properties. Don't
check if read-only properties are being set in getters.
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.2673&r2=1.2674
http://cvs.savannah.gnu.org/viewcvs/gnash/server/as_object.cpp?cvsroot=gnash&r1=1.43&r2=1.44
http://cvs.savannah.gnu.org/viewcvs/gnash/server/as_object.h?cvsroot=gnash&r1=1.49&r2=1.50
http://cvs.savannah.gnu.org/viewcvs/gnash/server/button_character_instance.cpp?cvsroot=gnash&r1=1.35&r2=1.36
http://cvs.savannah.gnu.org/viewcvs/gnash/server/character.cpp?cvsroot=gnash&r1=1.26&r2=1.27
http://cvs.savannah.gnu.org/viewcvs/gnash/server/character.h?cvsroot=gnash&r1=1.58&r2=1.59
http://cvs.savannah.gnu.org/viewcvs/gnash/server/sprite_instance.cpp?cvsroot=gnash&r1=1.199&r2=1.200
Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.2673
retrieving revision 1.2674
diff -u -b -r1.2673 -r1.2674
--- ChangeLog 22 Mar 2007 13:19:04 -0000 1.2673
+++ ChangeLog 22 Mar 2007 16:56:36 -0000 1.2674
@@ -1,3 +1,16 @@
+2007-03-22 Bastiaan Jacques <address@hidden>
+
+ * server/as_object.cpp: in set_member_default(), only setValue()
+ on properties that aren't read-only. Add an init_property()
+ method specifically for read-only properties which takes only
+ a setter. Also add a method asPropName() that converts property
+ names to lowercase, which is a very common pattern in this
+ class.
+ * server/button_character_instance.cpp,
+ server/character{.cpp, .h}, server/character_instance.cpp:
+ Use the new init_property() for read-only properties. Don't
+ check if read-only properties are being set in getters.
+
2007-03-22 Sandro Santilli <address@hidden>
* server/asobj/Number.cpp: don't attach Number interface
Index: server/as_object.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/as_object.cpp,v
retrieving revision 1.43
retrieving revision 1.44
diff -u -b -r1.43 -r1.44
--- server/as_object.cpp 20 Mar 2007 15:01:20 -0000 1.43
+++ server/as_object.cpp 22 Mar 2007 16:56:36 -0000 1.44
@@ -198,9 +198,16 @@
try
{
//log_msg("Found a getter/setter property for key %s",
key.c_str());
- // TODO: have setValue check for read-only property
- // and warn if failed
+ if (prop->isReadOnly())
+ {
+ IF_VERBOSE_ASCODING_ERRORS(
+ log_aserror("Attempt to set read-only
property '%s'",
+ key.c_str());
+ );
+ } else
+ {
prop->setValue(*this, val);
+ }
return;
}
catch (ActionException& exc)
@@ -290,6 +297,34 @@
assert(success);
}
+void
+as_object::init_property(const std::string& key, as_function& getter)
+{
+ init_property(key, getter, getter);
+
+ as_prop_flags& flags = getOwnProperty(key)->getFlags();
+
+ // ActionScript must not change the flags of this builtin property.
+ flags.set_is_protected(true);
+
+ // Make the property read-only; that is, the default no-op handler will
+ // be triggered when ActionScript tries to set it.
+ flags.set_read_only();
+}
+
+std::string
+as_object::asPropName(std::string name)
+{
+ std::string orig = name;
+ if ( _vm.getSWFVersion() < 7 )
+ {
+ boost::to_lower(orig, _vm.getLocale());
+ }
+
+ return orig;
+}
+
+
bool
as_object::set_member_flags(const std::string& name,
int setTrue, int setFalse)
Index: server/as_object.h
===================================================================
RCS file: /sources/gnash/gnash/server/as_object.h,v
retrieving revision 1.49
retrieving revision 1.50
diff -u -b -r1.49 -r1.50
--- server/as_object.h 20 Mar 2007 15:57:56 -0000 1.49
+++ server/as_object.h 22 Mar 2007 16:56:36 -0000 1.50
@@ -213,6 +213,18 @@
void init_property(const std::string& key, as_function& getter,
as_function& setter);
+ /// \brief
+ /// Use this method for read-only properties.
+ //
+ /// This method achieves the same as the above init_property method.
+ /// Additionally, it sets the property as read-only so that a default
+ /// handler will be triggered when ActionScript attempts to set the
+ /// property.
+ ///
+ /// The arguments are the same as the above init_property arguments,
+ /// although the setter argument is omitted.
+ void init_property(const std::string& key, as_function& getter);
+
/// Get a member as_value by name
//
/// The default behaviour is to call set_member_default,
@@ -401,6 +413,8 @@
///
void set_prototype(boost::intrusive_ptr<as_object> proto);
+ std::string asPropName(std::string name);
+
/// @{ Common ActionScript methods for characters
/// TODO: make protected
Index: server/button_character_instance.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/button_character_instance.cpp,v
retrieving revision 1.35
retrieving revision 1.36
diff -u -b -r1.35 -r1.36
--- server/button_character_instance.cpp 20 Mar 2007 15:01:20 -0000
1.35
+++ server/button_character_instance.cpp 22 Mar 2007 16:56:36 -0000
1.36
@@ -179,11 +179,11 @@
gettersetter = new builtin_function(&character::yscale_getset, NULL);
o.init_property("_yscale", *gettersetter, *gettersetter);
- gettersetter = new builtin_function(&character::xmouse_getset, NULL);
- o.init_property("_xmouse", *gettersetter, *gettersetter);
+ gettersetter = new builtin_function(&character::xmouse_get, NULL);
+ o.init_property("_xmouse", *gettersetter);
- gettersetter = new builtin_function(&character::ymouse_getset, NULL);
- o.init_property("_ymouse", *gettersetter, *gettersetter);
+ gettersetter = new builtin_function(&character::ymouse_get, NULL);
+ o.init_property("_ymouse", *gettersetter);
gettersetter = new builtin_function(&character::alpha_getset, NULL);
o.init_property("_alpha", *gettersetter, *gettersetter);
Index: server/character.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/character.cpp,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -b -r1.26 -r1.27
--- server/character.cpp 20 Mar 2007 15:01:20 -0000 1.26
+++ server/character.cpp 22 Mar 2007 16:56:36 -0000 1.27
@@ -18,7 +18,7 @@
//
//
-/* $Id: character.cpp,v 1.26 2007/03/20 15:01:20 strk Exp $ */
+/* $Id: character.cpp,v 1.27 2007/03/22 16:56:36 bjacques Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -536,13 +536,10 @@
}
as_value
-character::xmouse_getset(const fn_call& fn)
+character::xmouse_get(const fn_call& fn)
{
boost::intrusive_ptr<character> ptr =
ensureType<character>(fn.this_ptr);
- as_value rv;
- if ( fn.nargs == 0 ) // getter
- {
// Local coord of mouse IN PIXELS.
int x, y, buttons;
VM::get().getRoot().get_mouse_state(x, y, buttons);
@@ -554,25 +551,14 @@
m.transform_by_inverse(&b, a);
- rv = as_value(TWIPS_TO_PIXELS(b.m_x));
- }
- else // setter
- {
- IF_VERBOSE_ASCODING_ERRORS(
- log_aserror("Attempt to set read-only property '_xmouse'");
- );
- }
- return rv;
+ return as_value(TWIPS_TO_PIXELS(b.m_x));
}
as_value
-character::ymouse_getset(const fn_call& fn)
+character::ymouse_get(const fn_call& fn)
{
boost::intrusive_ptr<character> ptr =
ensureType<character>(fn.this_ptr);
- as_value rv;
- if ( fn.nargs == 0 ) // getter
- {
// Local coord of mouse IN PIXELS.
int x, y, buttons;
VM::get().getRoot().get_mouse_state(x, y, buttons);
@@ -584,15 +570,7 @@
m.transform_by_inverse(&b, a);
- rv = as_value(TWIPS_TO_PIXELS(b.m_y));
- }
- else // setter
- {
- IF_VERBOSE_ASCODING_ERRORS(
- log_aserror("Attempt to set read-only property '_ymouse'");
- );
- }
- return rv;
+ return as_value(TWIPS_TO_PIXELS(b.m_y));
}
as_value
@@ -727,21 +705,13 @@
{
boost::intrusive_ptr<character> ptr =
ensureType<character>(fn.this_ptr);
- as_value rv;
- if ( fn.nargs == 0 ) // getter
- {
boost::intrusive_ptr<as_object> p = ptr->get_parent();
- if ( p )
+ as_value rv;
+ if (p)
{
rv = as_value(p);
}
- }
- else // setter
- {
- IF_VERBOSE_ASCODING_ERRORS(
- log_aserror("Attempt to set read-only property '_parent'");
- );
- }
+
return rv;
}
Index: server/character.h
===================================================================
RCS file: /sources/gnash/gnash/server/character.h,v
retrieving revision 1.58
retrieving revision 1.59
diff -u -b -r1.58 -r1.59
--- server/character.h 19 Mar 2007 17:11:14 -0000 1.58
+++ server/character.h 22 Mar 2007 16:56:36 -0000 1.59
@@ -18,7 +18,7 @@
//
//
-/* $Id: character.h,v 1.58 2007/03/19 17:11:14 bjacques Exp $ */
+/* $Id: character.h,v 1.59 2007/03/22 16:56:36 bjacques Exp $ */
#ifndef GNASH_CHARACTER_H
#define GNASH_CHARACTER_H
@@ -169,9 +169,9 @@
static as_value yscale_getset(const fn_call& fn);
- static as_value xmouse_getset(const fn_call& fn);
+ static as_value xmouse_get(const fn_call& fn);
- static as_value ymouse_getset(const fn_call& fn);
+ static as_value ymouse_get(const fn_call& fn);
static as_value alpha_getset(const fn_call& fn);
Index: server/sprite_instance.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/sprite_instance.cpp,v
retrieving revision 1.199
retrieving revision 1.200
diff -u -b -r1.199 -r1.200
--- server/sprite_instance.cpp 21 Mar 2007 11:01:57 -0000 1.199
+++ server/sprite_instance.cpp 22 Mar 2007 16:56:36 -0000 1.200
@@ -1066,79 +1066,35 @@
static as_value
-sprite_currentframe_getset(const fn_call& fn)
+sprite_currentframe_get(const fn_call& fn)
{
boost::intrusive_ptr<sprite_instance> ptr =
ensureType<sprite_instance>(fn.this_ptr);
- if ( fn.nargs == 0 ) // getter
- {
return as_value(ptr->get_current_frame() + 1);
- }
- else // setter
- {
- IF_VERBOSE_ASCODING_ERRORS(
- log_aserror("Attempt to set read-only property
'_currentframe'");
- );
- }
-
- return as_value();
}
static as_value
-sprite_totalframes_getset(const fn_call& fn)
+sprite_totalframes_get(const fn_call& fn)
{
boost::intrusive_ptr<sprite_instance> ptr =
ensureType<sprite_instance>(fn.this_ptr);
- if ( fn.nargs == 0 ) // getter
- {
return as_value(ptr->get_frame_count());
- }
- else // setter
- {
- IF_VERBOSE_ASCODING_ERRORS(
- log_aserror("Attempt to set read-only property '_totalframes'");
- );
- }
-
- return as_value();
}
static as_value
-sprite_framesloaded_getset(const fn_call& fn)
+sprite_framesloaded_get(const fn_call& fn)
{
boost::intrusive_ptr<sprite_instance> ptr =
ensureType<sprite_instance>(fn.this_ptr);
- if ( fn.nargs == 0 ) // getter
- {
return as_value(ptr->get_loaded_frames());
- }
- else // setter
- {
- IF_VERBOSE_ASCODING_ERRORS(
- log_aserror("Attempt to set read-only property
'_framesloaded'");
- );
- }
-
- return as_value();
}
static as_value
-sprite_target_getset(const fn_call& fn)
+sprite_target_get(const fn_call& fn)
{
boost::intrusive_ptr<sprite_instance> ptr =
ensureType<sprite_instance>(fn.this_ptr);
- if ( fn.nargs == 0 ) // getter
- {
return as_value(ptr->getTargetPath().c_str());
- }
- else // setter
- {
- IF_VERBOSE_ASCODING_ERRORS(
- log_aserror("Attempt to set read-only property '_target'");
- );
- }
-
- return as_value();
}
static as_value
@@ -1176,8 +1132,6 @@
boost::intrusive_ptr<sprite_instance> ptr =
ensureType<sprite_instance>(fn.this_ptr);
UNUSED(ptr);
- if ( fn.nargs == 0 ) // getter
- {
static bool warned = false;
if ( ! warned )
{
@@ -1194,15 +1148,6 @@
{
return as_value();
}
- }
- else // setter
- {
- IF_VERBOSE_ASCODING_ERRORS(
- log_aserror("Attempt to set read-only property '_droptarget'");
- );
- }
-
- return as_value();
}
static as_value
@@ -1210,18 +1155,7 @@
{
boost::intrusive_ptr<sprite_instance> ptr =
ensureType<sprite_instance>(fn.this_ptr);
- if ( fn.nargs == 0 ) // getter
- {
return as_value(ptr->get_movie_definition()->get_url().c_str());
- }
- else // setter
- {
- IF_VERBOSE_ASCODING_ERRORS(
- log_aserror("Attempt to set read-only property '_url'");
- );
- }
-
- return as_value();
}
static as_value
@@ -1367,6 +1301,7 @@
gettersetter = new builtin_function(&character::x_getset, NULL);
o.init_property("_x", *gettersetter, *gettersetter);
+
gettersetter = new builtin_function(&character::y_getset, NULL);
o.init_property("_y", *gettersetter, *gettersetter);
@@ -1376,11 +1311,11 @@
gettersetter = new builtin_function(&character::yscale_getset, NULL);
o.init_property("_yscale", *gettersetter, *gettersetter);
- gettersetter = new builtin_function(&character::xmouse_getset, NULL);
- o.init_property("_xmouse", *gettersetter, *gettersetter);
+ gettersetter = new builtin_function(&character::xmouse_get, NULL);
+ o.init_property("_xmouse", *gettersetter);
- gettersetter = new builtin_function(&character::ymouse_getset, NULL);
- o.init_property("_ymouse", *gettersetter, *gettersetter);
+ gettersetter = new builtin_function(&character::ymouse_get, NULL);
+ o.init_property("_ymouse", *gettersetter);
gettersetter = new builtin_function(&character::alpha_getset, NULL);
o.init_property("_alpha", *gettersetter, *gettersetter);
@@ -1400,16 +1335,16 @@
gettersetter = new builtin_function(&character::parent_getset, NULL);
o.init_property("_parent", *gettersetter, *gettersetter);
- gettersetter = new builtin_function(&sprite_currentframe_getset, NULL);
+ gettersetter = new builtin_function(&sprite_currentframe_get, NULL);
o.init_property("_currentframe", *gettersetter, *gettersetter);
- gettersetter = new builtin_function(&sprite_totalframes_getset, NULL);
+ gettersetter = new builtin_function(&sprite_totalframes_get, NULL);
o.init_property("_totalframes", *gettersetter, *gettersetter);
- gettersetter = new builtin_function(&sprite_framesloaded_getset, NULL);
+ gettersetter = new builtin_function(&sprite_framesloaded_get, NULL);
o.init_property("_framesloaded", *gettersetter, *gettersetter);
- gettersetter = new builtin_function(&sprite_target_getset, NULL);
+ gettersetter = new builtin_function(&sprite_target_get, NULL);
o.init_property("_target", *gettersetter, *gettersetter);
gettersetter = new builtin_function(&sprite_name_getset, NULL);