CVSROOT: /sources/gnash Module name: gnash Changes by: Sandro Santilli <strk> 07/10/15 21:42:20
Modified files: testsuite/actionscript.all: with.as server : as_environment.cpp as_environment.h . : ChangeLog Log message: * server/as_environment.{cpp,h}: have find_object_{dot,slash}syntax support a scope stack. * testsuite/actionscript.all/with.as: fix last failing test. Should be easy to add more failing (hint: get variable in one-before-last member of with stack scope ). CVSWeb URLs: http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/actionscript.all/with.as?cvsroot=gnash&r1=1.28&r2=1.29 http://cvs.savannah.gnu.org/viewcvs/gnash/server/as_environment.cpp?cvsroot=gnash&r1=1.97&r2=1.98 http://cvs.savannah.gnu.org/viewcvs/gnash/server/as_environment.h?cvsroot=gnash&r1=1.58&r2=1.59 http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.4613&r2=1.4614 Patches: Index: testsuite/actionscript.all/with.as =================================================================== RCS file: /sources/gnash/gnash/testsuite/actionscript.all/with.as,v retrieving revision 1.28 retrieving revision 1.29 diff -u -b -r1.28 -r1.29 --- testsuite/actionscript.all/with.as 14 Oct 2007 21:38:11 -0000 1.28 +++ testsuite/actionscript.all/with.as 15 Oct 2007 21:42:20 -0000 1.29 @@ -21,7 +21,7 @@ // compile this test case with Ming makeswf, and then // execute it like this gnash -1 -r 0 -v out.swf -rcsid="$Id: with.as,v 1.28 2007/10/14 21:38:11 strk Exp $"; +rcsid="$Id: with.as,v 1.29 2007/10/15 21:42:20 strk Exp $"; #include "check.as" @@ -382,7 +382,7 @@ getvariable setvariable }; - xcheck_equals(checkpoint, "o.i.j"); + check_equals(checkpoint, "o.i.j"); //// SETTING VARIABLES Index: server/as_environment.cpp =================================================================== RCS file: /sources/gnash/gnash/server/as_environment.cpp,v retrieving revision 1.97 retrieving revision 1.98 diff -u -b -r1.97 -r1.98 --- server/as_environment.cpp 15 Oct 2007 09:40:07 -0000 1.97 +++ server/as_environment.cpp 15 Oct 2007 21:42:20 -0000 1.98 @@ -17,7 +17,7 @@ // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA // -/* $Id: as_environment.cpp,v 1.97 2007/10/15 09:40:07 strk Exp $ */ +/* $Id: as_environment.cpp,v 1.98 2007/10/15 21:42:20 strk Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -66,7 +66,7 @@ // TODO: let find_target return generic as_objects, or use 'with' stack, // see player2.swf or bug #18758 (strip.swf) // @@ TODO: should we use scopeStack here too ? - as_object* target = is_slash_based ? find_object_slashsyntax(path) : find_object_dotsyntax(path); + as_object* target = is_slash_based ? find_object_slashsyntax(path, &scopeStack) : find_object_dotsyntax(path, &scopeStack); if (target) { @@ -262,7 +262,7 @@ if (parse_path(varname, path, var, &is_slash_based)) { //log_msg(_("Variable '%s' parsed into path='%s', var='%s'"), varname.c_str(), path.c_str(), var.c_str()); //target = find_target(path); - target = is_slash_based ? find_object_slashsyntax(path) : find_object_dotsyntax(path); + target = is_slash_based ? find_object_slashsyntax(path, &scopeStack) : find_object_dotsyntax(path, &scopeStack); if (target) { target->set_member(VM::get().getStringTable().find(var), val); @@ -638,7 +638,7 @@ } as_object* -as_environment::find_object_dotsyntax(const std::string& path) const +as_environment::find_object_dotsyntax(const std::string& path, const ScopeStack* scopeStack) const { #ifdef DEBUG_TARGET_FINDING log_msg(_("find_object_dotsyntax(%s) called"), path.c_str()); @@ -658,6 +658,7 @@ //assert(path.length() > 0); as_object* env = m_target; + if ( scopeStack && ! scopeStack->empty() ) env = scopeStack->back().get(); assert(env); const char* p = path.c_str(); @@ -760,7 +761,7 @@ } as_object* -as_environment::find_object_slashsyntax(const std::string& path) const +as_environment::find_object_slashsyntax(const std::string& path, const ScopeStack* scopeStack) const { #ifdef DEBUG_TARGET_FINDING log_msg(_("find_object_slashsyntax(%s) called"), path.c_str()); @@ -775,6 +776,7 @@ } as_object* env = m_target; + if ( scopeStack && ! scopeStack->empty() ) env = scopeStack->back().get(); assert(env); const char* p = path.c_str(); Index: server/as_environment.h =================================================================== RCS file: /sources/gnash/gnash/server/as_environment.h,v retrieving revision 1.58 retrieving revision 1.59 diff -u -b -r1.58 -r1.59 --- server/as_environment.h 9 Oct 2007 16:34:54 -0000 1.58 +++ server/as_environment.h 15 Oct 2007 21:42:20 -0000 1.59 @@ -640,7 +640,7 @@ /// /// Return NULL if path doesn't point to an object. /// - as_object* find_object_slashsyntax(const std::string& path) const; + as_object* find_object_slashsyntax(const std::string& path, const ScopeStack* scopeStack=NULL) const; /// Find an object referenced by the given path (dot syntax). // @@ -648,7 +648,7 @@ /// /// Return NULL if path doesn't point to an object. /// - as_object* find_object_dotsyntax(const std::string& path) const; + as_object* find_object_dotsyntax(const std::string& path, const ScopeStack* scopeStack=NULL) const; }; Index: ChangeLog =================================================================== RCS file: /sources/gnash/gnash/ChangeLog,v retrieving revision 1.4613 retrieving revision 1.4614 diff -u -b -r1.4613 -r1.4614 --- ChangeLog 15 Oct 2007 12:58:59 -0000 1.4613 +++ ChangeLog 15 Oct 2007 21:42:20 -0000 1.4614 @@ -1,3 +1,11 @@ +2007-10-15 Sandro Santilli <[EMAIL PROTECTED]> + + * server/as_environment.{cpp,h}: have find_object_{dot,slash}syntax + support a scope stack. + * testsuite/actionscript.all/with.as: fix last failing test. Should be + easy to add more failing (hint: get variable in one-before-last member + of with stack scope). + 2007-10-15 Udo Giacomozzi <[EMAIL PROTECTED]> * backend/render_handler_agg.cpp, backend/render_handler_agg.h, gui/fb.cpp, _______________________________________________ Gnash-commit mailing list Gnash-commit@gnu.org http://lists.gnu.org/mailman/listinfo/gnash-commit