[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Gnash-commit] gnash ChangeLog server/array.cpp server/array.h...
From: |
Sandro Santilli |
Subject: |
[Gnash-commit] gnash ChangeLog server/array.cpp server/array.h... |
Date: |
Sun, 27 Apr 2008 18:13:17 +0000 |
CVSROOT: /sources/gnash
Module name: gnash
Changes by: Sandro Santilli <strk> 08/04/27 18:13:16
Modified files:
. : ChangeLog
server : array.cpp array.h as_environment.cpp
as_object.cpp as_object.h
edit_text_character.cpp edit_text_character.h
sprite_instance.cpp sprite_instance.h
server/asobj : xml.cpp xml.h
testsuite/actionscript.all: TextField.as
Log message:
* server/as_object.{cpp,h}, array.{cpp,h},
edit_text_character.{cpp,h}, sprite_instance.{cpp,h},
asobj/xml.{cpp,h}:
Change set_member signature to return bool (did the named
member exist?) and take an additional arg (create a new member
if not found?).
* server/as_environment.cpp (set_variable_raw): use set_member for
in-scope-chain seeks (rather then update_member, which was
dropped by this commit).
* testsuite/actionscript.all/TextField.as: successes.
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.6421&r2=1.6422
http://cvs.savannah.gnu.org/viewcvs/gnash/server/array.cpp?cvsroot=gnash&r1=1.104&r2=1.105
http://cvs.savannah.gnu.org/viewcvs/gnash/server/array.h?cvsroot=gnash&r1=1.47&r2=1.48
http://cvs.savannah.gnu.org/viewcvs/gnash/server/as_environment.cpp?cvsroot=gnash&r1=1.131&r2=1.132
http://cvs.savannah.gnu.org/viewcvs/gnash/server/as_object.cpp?cvsroot=gnash&r1=1.117&r2=1.118
http://cvs.savannah.gnu.org/viewcvs/gnash/server/as_object.h?cvsroot=gnash&r1=1.106&r2=1.107
http://cvs.savannah.gnu.org/viewcvs/gnash/server/edit_text_character.cpp?cvsroot=gnash&r1=1.177&r2=1.178
http://cvs.savannah.gnu.org/viewcvs/gnash/server/edit_text_character.h?cvsroot=gnash&r1=1.76&r2=1.77
http://cvs.savannah.gnu.org/viewcvs/gnash/server/sprite_instance.cpp?cvsroot=gnash&r1=1.517&r2=1.518
http://cvs.savannah.gnu.org/viewcvs/gnash/server/sprite_instance.h?cvsroot=gnash&r1=1.186&r2=1.187
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/xml.cpp?cvsroot=gnash&r1=1.80&r2=1.81
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/xml.h?cvsroot=gnash&r1=1.33&r2=1.34
http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/actionscript.all/TextField.as?cvsroot=gnash&r1=1.52&r2=1.53
Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.6421
retrieving revision 1.6422
diff -u -b -r1.6421 -r1.6422
--- ChangeLog 27 Apr 2008 17:20:30 -0000 1.6421
+++ ChangeLog 27 Apr 2008 18:13:13 -0000 1.6422
@@ -1,3 +1,16 @@
+2008-04-27 Sandro Santilli <address@hidden>
+
+ * server/as_object.{cpp,h}, array.{cpp,h},
+ edit_text_character.{cpp,h}, sprite_instance.{cpp,h},
+ asobj/xml.{cpp,h}:
+ Change set_member signature to return bool (did the named
+ member exist?) and take an additional arg (create a new member
+ if not found?).
+ * server/as_environment.cpp (set_variable_raw): use set_member for
+ in-scope-chain seeks (rather then update_member, which was
+ dropped by this commit).
+ * testsuite/actionscript.all/TextField.as: successes.
+
2008-04-27 Benjamin Wolsey <address@hidden>
* gui/gnash.cpp: use boost format for formatting, drop last use
Index: server/array.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/array.cpp,v
retrieving revision 1.104
retrieving revision 1.105
diff -u -b -r1.104 -r1.105
--- server/array.cpp 21 Apr 2008 11:27:42 -0000 1.104
+++ server/array.cpp 27 Apr 2008 18:13:14 -0000 1.105
@@ -859,9 +859,9 @@
}
/* virtual public, overriding as_object::set_member */
-void
+bool
as_array_object::set_member(string_table::key name,
- const as_value& val, string_table::key nsname)
+ const as_value& val, string_table::key nsname, bool ifFound)
{
int index = index_requested(name);
@@ -877,11 +877,11 @@
// set the appropriate index and return
elements[index] = val;
- return;
+ return true;
}
- as_object::set_member_default(name,val, nsname);
+ return as_object::set_member_default(name,val, nsname, ifFound);
}
as_array_object*
Index: server/array.h
===================================================================
RCS file: /sources/gnash/gnash/server/array.h,v
retrieving revision 1.47
retrieving revision 1.48
diff -u -b -r1.47 -r1.48
--- server/array.h 21 Apr 2008 11:27:42 -0000 1.47
+++ server/array.h 27 Apr 2008 18:13:14 -0000 1.48
@@ -369,8 +369,8 @@
string_table::key nsname = 0);
/// Overridden to provide array[#]=x semantic
- virtual void set_member(string_table::key name,
- const as_value& val, string_table::key nsname = 0);
+ virtual bool set_member(string_table::key name,
+ const as_value& val, string_table::key nsname=0, bool
ifFound=false);
/// Overridden to deal with indexed elements
virtual std::pair<bool,bool> delProperty(string_table::key name,
string_table::key nsname = 0);
Index: server/as_environment.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/as_environment.cpp,v
retrieving revision 1.131
retrieving revision 1.132
diff -u -b -r1.131 -r1.132
--- server/as_environment.cpp 21 Apr 2008 11:27:42 -0000 1.131
+++ server/as_environment.cpp 27 Apr 2008 18:13:14 -0000 1.132
@@ -350,7 +350,7 @@
{
// const_cast needed due to non-const as_object::get_member
as_object* obj = const_cast<as_object*>(scopeStack[i-1].get());
- if (obj && obj->update_member(varkey, val).first )
+ if (obj && obj->set_member(varkey, val, 0, true) )
{
return;
}
@@ -369,7 +369,7 @@
{
// const_cast needed due to non-const as_object::get_member
as_object* obj = const_cast<as_object*>(scopeStack[i-1].get());
- if (obj && obj->update_member(varkey, val).first )
+ if (obj && obj->set_member(varkey, val, 0, true))
{
return;
}
Index: server/as_object.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/as_object.cpp,v
retrieving revision 1.117
retrieving revision 1.118
diff -u -b -r1.117 -r1.118
--- server/as_object.cpp 24 Apr 2008 20:16:17 -0000 1.117
+++ server/as_object.cpp 27 Apr 2008 18:13:14 -0000 1.118
@@ -549,9 +549,9 @@
}
// Handles read_only and static properties properly.
-void
+bool
as_object::set_member_default(string_table::key key, const as_value& val,
- string_table::key nsname)
+ string_table::key nsname, bool ifFound)
{
//log_debug(_("set_member_default(%s)"), key.c_str());
Property* prop = findUpdatableProperty(key, nsname);
@@ -562,7 +562,7 @@
IF_VERBOSE_ASCODING_ERRORS(log_aserror(_(""
"Attempt to set read-only property '%s'"),
_vm.getStringTable().value(key).c_str()););
- return;
+ return true;
}
try
@@ -589,8 +589,9 @@
if ( ! prop )
{
log_debug("Property %s deleted by
trigger on update", _vm.getStringTable().value(key));
- return;
+ return true;
}
+
//if ( prop->isGetterSetter() )
prop->setCache(newVal);
prop->setValue(*this, newVal);
}
@@ -601,7 +602,6 @@
}
prop->clearVisible(_vm.getSWFVersion());
- return;
}
catch (ActionException& exc)
{
@@ -609,10 +609,11 @@
_vm.getStringTable().value(key).c_str(),
exc.what());
}
- return;
+ return true;
}
// Else, add new property...
+ if ( ifFound ) return false;
// Property does not exist, so it won't be read-only. Set it.
if (!_members.setValue(key, const_cast<as_value&>(val), *this, nsname))
@@ -621,7 +622,7 @@
log_aserror(_("Unknown failure in setting property '%s'
on "
"object '%p'"), _vm.getStringTable().value(key).c_str(),
(void*) this););
- return;
+ return false;
}
// Now check if we have a trigger, if so, invoke it
@@ -646,13 +647,17 @@
if ( ! prop )
{
log_debug("Property %s deleted by trigger on create",
_vm.getStringTable().value(key));
- return;
}
+ else
+ {
prop->setValue(*this, newVal);
}
+ }
+ return false;
}
+#if 0
std::pair<bool,bool>
as_object::update_member(string_table::key key, const as_value& val,
string_table::key nsname)
@@ -710,8 +715,8 @@
}
return std::make_pair(false, false);
-
}
+#endif
void
as_object::init_member(const std::string& key1, const as_value& val, int flags,
Index: server/as_object.h
===================================================================
RCS file: /sources/gnash/gnash/server/as_object.h,v
retrieving revision 1.106
retrieving revision 1.107
diff -u -b -r1.106 -r1.107
--- server/as_object.h 24 Apr 2008 20:16:17 -0000 1.106
+++ server/as_object.h 27 Apr 2008 18:13:14 -0000 1.107
@@ -263,12 +263,23 @@
/// @param nsname
/// Id of the namespace.
///
- virtual void set_member(string_table::key key, const as_value& val,
- string_table::key nsname = 0)
+ /// @param ifFound
+ /// If true, don't create a new member, but only update
+ /// an existing one.
+ ///
+ /// @return true if the given member existed, false otherwise.
+ /// NOTE: the return doesn't tell if the member exists after
+ /// the call, as watch triggers might have deleted it
+ /// after setting.
+ ///
+ ///
+ virtual bool set_member(string_table::key key, const as_value& val,
+ string_table::key nsname = 0, bool ifFound=false)
{
- return set_member_default(key, val, nsname);
+ return set_member_default(key, val, nsname, ifFound);
}
+#if 0
/// Update an existing member value
//
/// NOTE that getter-setter in the inheritance chain are
@@ -292,6 +303,7 @@
///
std::pair<bool,bool> update_member(string_table::key key, const
as_value& val,
string_table::key nsname = 0);
+#endif
virtual bool on_event(const event_id& id );
@@ -1074,8 +1086,17 @@
/// @param val
/// Value to assign to the named property.
///
- void set_member_default(string_table::key name, const as_value& val,
- string_table::key nsname);
+ /// @param ifFound
+ /// If true, don't create a new member, but only update
+ /// an existing one.
+ ///
+ /// @return true if the given member existed, false otherwise.
+ /// NOTE: the return doesn't tell if the member exists after
+ /// the call, as watch triggers might have deleted it
+ /// after setting.
+ ///
+ bool set_member_default(string_table::key name, const as_value& val,
+ string_table::key nsname, bool ifFound);
#ifdef GNASH_USE_GC
/// Mark all reachable resources, override from GcResource.
Index: server/edit_text_character.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/edit_text_character.cpp,v
retrieving revision 1.177
retrieving revision 1.178
diff -u -b -r1.177 -r1.178
--- server/edit_text_character.cpp 22 Apr 2008 03:15:01 -0000 1.177
+++ server/edit_text_character.cpp 27 Apr 2008 18:13:14 -0000 1.178
@@ -363,8 +363,8 @@
o.init_property(NSV::PROP_uXMOUSE, character::xmouse_get,
character::xmouse_get, propFlags);
o.init_property(NSV::PROP_uYMOUSE, character::ymouse_get,
character::ymouse_get, propFlags);
- o.init_property(NSV::PROP_uXSCALE, character::xscale_getset,
character::xscale_getset, propFlags);
- o.init_property(NSV::PROP_uYSCALE, character::yscale_getset,
character::yscale_getset, propFlags);
+ o.init_property(NSV::PROP_uXSCALE, character::xscale_getset,
character::xscale_getset);
+ o.init_property(NSV::PROP_uYSCALE, character::yscale_getset,
character::yscale_getset);
// SWF5 or higher (TODO: check textfields in SWF5 !!! we miss tests
here !)
@@ -891,9 +891,9 @@
return utf8::encodeCanonicalString(_text, version);
}
-void
+bool
edit_text_character::set_member(string_table::key name,
- const as_value& val, string_table::key nsname)
+ const as_value& val, string_table::key nsname, bool ifFound)
{
//log_debug("edit_text_character.set_member(%s, %s)", name.c_str(),
val.to_string());
@@ -910,7 +910,7 @@
{
int version =
get_parent()->get_movie_definition()->get_version();
setTextValue(utf8::decodeCanonicalString(val.to_string_versioned(version),
version));
- return;
+ return true;
}
case NSV::PROP_HTML_TEXT:
//if (name == "htmlText")
@@ -918,7 +918,7 @@
int version =
get_parent()->get_movie_definition()->get_version();
setTextValue(utf8::decodeCanonicalString(val.to_string_versioned(version),
version));
format_text();
- return;
+ return true;
}
case NSV::PROP_uX:
//else if (name == "_x")
@@ -929,7 +929,7 @@
// m_accept_anim_moves = false;
- return;
+ return true;
}
case NSV::PROP_uY:
//else if (name == "_y")
@@ -940,7 +940,7 @@
// m_accept_anim_moves = false;
- return;
+ return true;
}
case NSV::PROP_uWIDTH:
{
@@ -951,7 +951,7 @@
IF_VERBOSE_ASCODING_ERRORS(
log_aserror(_("Attempt to set TextField._width to %g"),
nw);
);
- return;
+ return true;
}
if ( nw < 0.0f )
@@ -967,7 +967,7 @@
#ifdef GNASH_DEBUG_TEXTFIELDS
log_debug("TextField width already == %g, nothing to do
to change it", nw);
#endif
- return; // nothing to do
+ return true; // nothing to do
}
if ( ! _bounds.isFinite() )
{
@@ -975,7 +975,7 @@
std::stringstream ss; ss<<_bounds;
log_debug("Non-finite TextField bounds : %s",
ss.str().c_str());
#endif
- return;
+ return true;
}
#ifdef GNASH_DEBUG_TEXTFIELDS
@@ -1002,7 +1002,7 @@
// not need to reformat text here
format_text();
- return;
+ return true;
}
case NSV::PROP_uHEIGHT:
{
@@ -1013,7 +1013,7 @@
IF_VERBOSE_ASCODING_ERRORS(
log_aserror(_("Attempt to set TextField._height to
%g"), nh);
);
- return;
+ return true;
}
if ( nh < 0.0f )
@@ -1029,7 +1029,7 @@
#ifdef GNASH_DEBUG_TEXTFIELDS
log_debug("TextField height already == %g, nothing to
do to change it", nh);
#endif // GNASH_DEBUG_TEXTFIELDS
- return; // nothing to do
+ return true; // nothing to do
}
if ( ! _bounds.isFinite() )
{
@@ -1037,7 +1037,7 @@
std::stringstream ss; ss<<_bounds;
log_debug("Non-finite TextField bounds : %s",
ss.str().c_str());
#endif // GNASH_DEBUG_TEXTFIELDS
- return;
+ return true;
}
#ifdef GNASH_DEBUG_TEXTFIELDS
@@ -1059,13 +1059,13 @@
// not need to reformat text here
format_text();
- return;
+ return true;
}
case NSV::PROP_uVISIBLE:
//else if (name == "_visible")
{
set_visible(val.to_bool());
- return;
+ return true;
}
case NSV::PROP_uALPHA:
//else if (name == "_alpha")
@@ -1075,13 +1075,13 @@
cxform cx = get_cxform();
cx.m_[3][0] = fclamp(std::infinite_to_fzero(val.to_number()) /
100.f, 0, 1);
set_cxform(cx);
- return;
+ return true;
}
// @@ TODO see TextField members in Flash MX docs
} // end switch
- set_member_default(name, val, nsname);
+ return set_member_default(name, val, nsname, ifFound);
}
bool
Index: server/edit_text_character.h
===================================================================
RCS file: /sources/gnash/gnash/server/edit_text_character.h,v
retrieving revision 1.76
retrieving revision 1.77
diff -u -b -r1.76 -r1.77
--- server/edit_text_character.h 21 Apr 2008 11:27:43 -0000 1.76
+++ server/edit_text_character.h 27 Apr 2008 18:13:15 -0000 1.77
@@ -116,8 +116,8 @@
bool getTextDefined() const { return _textDefined; }
/// We have a "text" member.
- void set_member(string_table::key name, const as_value& val,
- string_table::key nsname = 0);
+ 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);
Index: server/sprite_instance.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/sprite_instance.cpp,v
retrieving revision 1.517
retrieving revision 1.518
diff -u -b -r1.517 -r1.518
--- server/sprite_instance.cpp 27 Apr 2008 15:39:39 -0000 1.517
+++ server/sprite_instance.cpp 27 Apr 2008 18:13:15 -0000 1.518
@@ -2743,8 +2743,9 @@
return tmp.to_object().get();
}
-void sprite_instance::set_member(string_table::key name,
- const as_value& val, string_table::key nsname)
+bool
+sprite_instance::set_member(string_table::key name,
+ const as_value& val, string_table::key nsname, bool ifFound)
{
#ifdef DEBUG_DYNTEXT_VARIABLES
//log_debug(_("sprite[%p]::set_member(%s, %s)"), (void*)this,
VM::get().getStringTable().value(name), val.to_debug_string());
@@ -2755,6 +2756,8 @@
// checkForKeyOrMouseEvent(VM::get().getStringTable().value(name));
//}
+ bool found = false;
+
// Try textfield variables
//
// FIXME: Turn textfield variables into Getter/Setters (Properties)
@@ -2775,6 +2778,7 @@
TextFieldPtr tf = *i;
tf->updateText(val.to_string());
}
+ found = true;
}
#ifdef DEBUG_DYNTEXT_VARIABLES
else
@@ -2784,8 +2788,9 @@
#endif
// If that didn't work call the default set_member
- set_member_default(name, val, nsname);
+ if ( set_member_default(name, val, nsname, ifFound) ) found=true;
+ return found;
}
void sprite_instance::advance_sprite()
Index: server/sprite_instance.h
===================================================================
RCS file: /sources/gnash/gnash/server/sprite_instance.h,v
retrieving revision 1.186
retrieving revision 1.187
diff -u -b -r1.186 -r1.187
--- server/sprite_instance.h 27 Apr 2008 15:39:40 -0000 1.186
+++ server/sprite_instance.h 27 Apr 2008 18:13:15 -0000 1.187
@@ -523,12 +523,9 @@
bool get_member(string_table::key name, as_value* val,
string_table::key nsname = 0);
- /// Set the named member to the value.
- //
- /// Return true if we have that member; false otherwise.
- ///
- virtual void set_member(string_table::key name, const as_value& val,
- string_table::key nsname = 0);
+ // See dox in as_object.h
+ virtual bool set_member(string_table::key name, const as_value& val,
+ string_table::key nsname = 0, bool ifFound=false);
/// Overridden to look in DisplayList for a match
as_object* get_path_element(string_table::key key);
Index: server/asobj/xml.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/xml.cpp,v
retrieving revision 1.80
retrieving revision 1.81
diff -u -b -r1.80 -r1.81
--- server/asobj/xml.cpp 21 Apr 2008 11:27:45 -0000 1.80
+++ server/asobj/xml.cpp 27 Apr 2008 18:13:16 -0000 1.81
@@ -143,12 +143,13 @@
return get_member_default(name, val, nsname);
}
-void
+bool
XML::set_member(string_table::key name, const as_value& val,
- string_table::key nsname)
+ string_table::key nsname, bool ifFound)
{
if (name == NSV::PROP_STATUS)
{
+ // TODO: this should really be a proper property (see XML.as)
if ( ! val.is_number() )
{
_status =
static_cast<XML::Status>(std::numeric_limits<boost::int32_t>::min());
@@ -158,18 +159,19 @@
unsigned int statusNumber =
static_cast<int>(val.to_number());
_status = XML::Status(
static_cast<XML::Status>(statusNumber) );
}
- return;
+ return true;
}
else if (name == NSV::PROP_LOADED)
{
+ // TODO: this should really be a proper property
bool b = val.to_bool();
//log_debug(_("set_member 'loaded' (%s) became boolean %d"),
val.to_debug_string().c_str(), b);
if ( b ) _loaded = 1;
else _loaded = 0;
- return;
+ return true;
}
- set_member_default(name, val, nsname);
+ return set_member_default(name, val, nsname, ifFound);
}
XML::~XML()
Index: server/asobj/xml.h
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/xml.h,v
retrieving revision 1.33
retrieving revision 1.34
diff -u -b -r1.33 -r1.34
--- server/asobj/xml.h 8 Apr 2008 10:09:21 -0000 1.33
+++ server/asobj/xml.h 27 Apr 2008 18:13:16 -0000 1.34
@@ -95,8 +95,8 @@
/// which are NOT proper properties !
/// See actionscript.all/XML.as
///
- void set_member(string_table::key name, const as_value& val,
- string_table::key nsname = 0);
+ bool set_member(string_table::key name, const as_value& val,
+ string_table::key nsname = 0, bool ifFound=false);
// Methods
Index: testsuite/actionscript.all/TextField.as
===================================================================
RCS file: /sources/gnash/gnash/testsuite/actionscript.all/TextField.as,v
retrieving revision 1.52
retrieving revision 1.53
diff -u -b -r1.52 -r1.53
--- testsuite/actionscript.all/TextField.as 27 Apr 2008 16:26:43 -0000
1.52
+++ testsuite/actionscript.all/TextField.as 27 Apr 2008 18:13:16 -0000
1.53
@@ -20,7 +20,7 @@
// execute it like this gnash -1 -r 0 -v out.swf
-rcsid="$Id: TextField.as,v 1.52 2008/04/27 16:26:43 strk Exp $";
+rcsid="$Id: TextField.as,v 1.53 2008/04/27 18:13:16 strk Exp $";
#include "check.as"
#if OUTPUT_VERSION > 5
@@ -867,20 +867,20 @@
_target='fake';
}
-xcheck_equals(_root._x, 0);
-xcheck_equals(_root._y, 0);
-xcheck_equals(_root._visible, true);
+check_equals(_root._x, 0);
+check_equals(_root._y, 0);
+check_equals(_root._visible, true);
check_equals(_root._xscale, 100);
check_equals(_root._yscale, 100);
check_equals(_root._target, '/');
xcheck_equals(_root._parent, 'fake_parent');
check_equals(_root._name, '');
-xcheck_equals(tf._x, 10);
-xcheck_equals(tf._y, 11);
-xcheck_equals(tf._visible, false);
-xcheck_equals(tf._xscale, 200);
-xcheck_equals(tf._yscale, 201);
+check_equals(tf._x, 10);
+check_equals(tf._y, 11);
+check_equals(tf._visible, false);
+check_equals(tf._xscale, 200);
+check_equals(tf._yscale, 201);
check_equals(tf._target, '/fake_name');
check_equals(tf._parent, _level0);
check_equals(tf._name, 'fake_name');
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Gnash-commit] gnash ChangeLog server/array.cpp server/array.h...,
Sandro Santilli <=