[Top][All Lists]
[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];
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Gnash-commit] /srv/bzr/gnash/avm2 r9551: Clear stacks and registers when calling Machine::instantiateClass.,
Tom Stellard <=