Hi strk, > +#if 0 // NO special support for _root and _levelX, all should be done by > target ! > + // see movieclip_destruction_test3, where _root becomes undefined if > target is unloaded ... > + if ( isUnloaded() ) return false; // see > movieclip_destruction_test3.sc
Please review see movieclip_destruction_test3 again. I cann't see how the above statement being tested. I added a few test against that point. Results show that '_root' is always defined, even within an unloaded/shifted sprites. Please update those comments(and related code if necessary), I was confused by that. BTW, I'll leave for about a week. but still reachable by email. Just metion that scope chain was not intensively tested, so no surprise our testsuite might not catch some related changes. I'll break it when I come back:) --zou On 9/27/07, Sandro Santilli <[EMAIL PROTECTED]> wrote: > CVSROOT: /sources/gnash > Module name: gnash > Changes by: Sandro Santilli <strk> 07/09/26 20:52:03 > > Modified files: > . : ChangeLog > server : as_environment.cpp sprite_instance.cpp > server/vm : ActionExec.cpp > > Log message: > * server/as_environment.cpp (get_variable_raw): don't handle > _root and > _levelX in any special way, they are just sprite members ! > * server/sprite_instance.cpp (get_member): _root doesn't > exist if > we're unloaded. > * server/vm/ActionExec.cpp (call operator): drop opcode-level > unloaded guard. Fixes bugs #21069 (feed.swf) and #20996 > (curveball.swf) w/out reopening #20974 (sonic.swf). > Changes in as_environment.cpp and sprite_instance.cpp above > do the rest for misc-ming and misc-swfc tests.. > > CVSWeb URLs: > http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.4429&r2=1.4430 > http://cvs.savannah.gnu.org/viewcvs/gnash/server/as_environment.cpp?cvsroot=gnash&r1=1.91&r2=1.92 > http://cvs.savannah.gnu.org/viewcvs/gnash/server/sprite_instance.cpp?cvsroot=gnash&r1=1.359&r2=1.360 > http://cvs.savannah.gnu.org/viewcvs/gnash/server/vm/ActionExec.cpp?cvsroot=gnash&r1=1.49&r2=1.50 > > Patches: > Index: ChangeLog > =================================================================== > RCS file: /sources/gnash/gnash/ChangeLog,v > retrieving revision 1.4429 > retrieving revision 1.4430 > diff -u -b -r1.4429 -r1.4430 > --- ChangeLog 26 Sep 2007 19:46:28 -0000 1.4429 > +++ ChangeLog 26 Sep 2007 20:52:02 -0000 1.4430 > @@ -1,5 +1,17 @@ > 2007-09-26 Sandro Santilli <[EMAIL PROTECTED]> > > + * server/as_environment.cpp (get_variable_raw): don't handle _root and > + _levelX in any special way, they are just sprite members ! > + * server/sprite_instance.cpp (get_member): _root doesn't exist if > + we're unloaded. > + * server/vm/ActionExec.cpp (call operator): drop opcode-level > + unloaded guard. Fixes bugs #21069 (feed.swf) and #20996 > + (curveball.swf) w/out reopening #20974 (sonic.swf). > + Changes in as_environment.cpp and sprite_instance.cpp above > + do the rest for misc-ming and misc-swfc tests.. > + > +2007-09-26 Sandro Santilli <[EMAIL PROTECTED]> > + > * server/parser/morph2_character_def.cpp (read): > Don't print malformed swf errors if number of paths in defining > shapes don't match: only edges matter. > > Index: server/as_environment.cpp > =================================================================== > RCS file: /sources/gnash/gnash/server/as_environment.cpp,v > retrieving revision 1.91 > retrieving revision 1.92 > diff -u -b -r1.91 -r1.92 > --- server/as_environment.cpp 26 Sep 2007 12:54:18 -0000 1.91 > +++ server/as_environment.cpp 26 Sep 2007 20:52:02 -0000 1.92 > @@ -17,7 +17,7 @@ > // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA > // > > -/* $Id: as_environment.cpp,v 1.91 2007/09/26 12:54:18 strk Exp $ */ > +/* $Id: as_environment.cpp,v 1.92 2007/09/26 20:52:02 strk Exp $ */ > > #ifdef HAVE_CONFIG_H > #include "config.h" > @@ -139,6 +139,8 @@ > return val; > } > > +#if 0 // NO special support for _root and _levelX, all should be done by > target ! > + // see movieclip_destruction_test3, where _root becomes undefined if > target is unloaded > // Check built-in constants. > if (varname == "_root") > { > @@ -151,6 +153,7 @@ > unsigned int levelno = atoi(varname.c_str()+6); > return VM::get().getRoot().getLevel(levelno).get(); > } > +#endif > > VM& vm = VM::get(); > as_object* global = vm.getGlobal(); > > Index: server/sprite_instance.cpp > =================================================================== > RCS file: /sources/gnash/gnash/server/sprite_instance.cpp,v > retrieving revision 1.359 > retrieving revision 1.360 > diff -u -b -r1.359 -r1.360 > --- server/sprite_instance.cpp 25 Sep 2007 14:57:05 -0000 1.359 > +++ server/sprite_instance.cpp 26 Sep 2007 20:52:02 -0000 1.360 > @@ -1741,6 +1741,8 @@ > // > if (name == "_root" ) > { > + if ( isUnloaded() ) return false; // see > movieclip_destruction_test3.sc > + > // TODO: handle lockroot > val->set_as_object( VM::get().getRoot().get_root_movie() ); > return true; > > Index: server/vm/ActionExec.cpp > =================================================================== > RCS file: /sources/gnash/gnash/server/vm/ActionExec.cpp,v > retrieving revision 1.49 > retrieving revision 1.50 > diff -u -b -r1.49 -r1.50 > --- server/vm/ActionExec.cpp 26 Sep 2007 11:30:43 -0000 1.49 > +++ server/vm/ActionExec.cpp 26 Sep 2007 20:52:02 -0000 1.50 > @@ -17,7 +17,7 @@ > // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA > // > > -/* $Id: ActionExec.cpp,v 1.49 2007/09/26 11:30:43 strk Exp $ */ > +/* $Id: ActionExec.cpp,v 1.50 2007/09/26 20:52:02 strk Exp $ */ > > #ifdef HAVE_CONFIG_H > #include "config.h" > @@ -284,11 +284,13 @@ > continue; // Walk up the try chain if necessary. > } // end of try checking. > > +#if 0 // See bugs: #20974, #21069, #20996. > if ( _abortOnUnload && _original_target->isUnloaded() ) > { > log_debug("Target of action_buffer unloaded during > execution, discarding %d remaining opcodes", stop_pc-pc); > break; > } > +#endif > > // Cleanup any expired "with" blocks. > while ( ! with_stack.empty() && pc >= with_stack.back().end_pc() > ) { > > > _______________________________________________ > Gnash-commit mailing list > [email protected] > http://lists.gnu.org/mailman/listinfo/gnash-commit > _______________________________________________ Gnash-commit mailing list [email protected] http://lists.gnu.org/mailman/listinfo/gnash-commit
