gnash-commit
[Top][All Lists]
Advanced

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

[Gnash-commit] /srv/bzr/gnash/avm2 r9551: Clear stacks and registers whe


From: Tom Stellard
Subject: [Gnash-commit] /srv/bzr/gnash/avm2 r9551: Clear stacks and registers when calling Machine::instantiateClass.
Date: Tue, 09 Sep 2008 11:50:38 +0800
User-agent: Bazaar (1.5)

------------------------------------------------------------
revno: 9551
committer: Tom Stellard <address@hidden>
branch nick: gnash_dev
timestamp: Tue 2008-09-09 11:50:38 +0800
message:
  Clear stacks and registers when calling Machine::instantiateClass.
modified:
  libcore/swf/SymbolClassTag.h
  libcore/vm/Machine.cpp
  libcore/vm/Machine.h
=== modified file 'libcore/swf/SymbolClassTag.h'
--- a/libcore/swf/SymbolClassTag.h      2008-08-13 16:13:56 +0000
+++ b/libcore/swf/SymbolClassTag.h      2008-09-09 03:50:38 +0000
@@ -46,8 +46,8 @@
        {
                VM& vm = VM::get();
                Machine *mach = vm.getMachine();
-
-               mach->instantiateClass(rootClass);
+               
+               mach->instantiateClass(rootClass,vm.getGlobal());
        }
 
        // Tell the caller that we are an action tag.

=== modified file 'libcore/vm/Machine.cpp'
--- a/libcore/vm/Machine.cpp    2008-09-08 06:34:24 +0000
+++ b/libcore/vm/Machine.cpp    2008-09-09 03:50:38 +0000
@@ -2642,9 +2642,13 @@
 //     restoreState();
 }
 
-void Machine::instantiateClass(std::string className){
+void Machine::instantiateClass(std::string className, as_object* global){
 
        asClass* theClass = mPoolObject->locateClass(className);
+       clearRegisters();
+       mStack.clear();
+       mAsValueScopeStack.clear();
+       mRegisters[0] = as_value(global);
        executeCodeblock(theClass->getConstructor()->getBody());
 }
 
@@ -2743,9 +2747,7 @@
 void Machine::load_function(CodeStream* stream){
        saveState();
        mStream = stream;
-       mRegisters.clear();
-       //TODO: Parse and use maximum stack size value for methods.
-       mRegisters.resize(16);
+       clearRegisters();
 }
 
 as_environment::ScopeStack* Machine::getScopeStack(){
@@ -2756,6 +2758,13 @@
        return stack;
 }
 
+void
+Machine::clearRegisters(){
+       mRegisters.clear();
+       //TODO: Parse and use maximum stack size value for methods.
+       mRegisters.resize(16);
+}
+
 
 
 } // end of namespace gnash

=== modified file 'libcore/vm/Machine.h'
--- a/libcore/vm/Machine.h      2008-09-09 03:08:38 +0000
+++ b/libcore/vm/Machine.h      2008-09-09 03:50:38 +0000
@@ -209,7 +209,7 @@
 
        as_value executeFunction(CodeStream* stream,const fn_call& fn);
 
-       void instantiateClass(std::string className);
+       void instantiateClass(std::string className, as_object* global);
 
        Machine(VM& vm);
 
@@ -269,6 +269,8 @@
 
        void executeCodeblock(CodeStream* stream);
 
+       void clearRegisters();
+
        as_value get_register(int index){
                LOG_DEBUG_AVM("Getting value at a register %d ",index);
                return mRegisters[index];


reply via email to

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