[prev in list] [next in list] [prev in thread] [next in thread]
List: gnash-commit
Subject: [Gnash-commit] /srv/bzr/gnash/avm2 r9536: GETPROPERTY opcode: use
From: Tom Stellard <tstellar () gmail ! com>
Date: 2008-08-30 12:19:45
Message-ID: E1KZeBx-0005Eg-Ac () sv ! gnu ! org
[Download RAW message or body]
------------------------------------------------------------
revno: 9536
committer: Tom Stellard <tstellar@gmail.com>
branch nick: gnash_dev
timestamp: Sat 2008-08-30 20:19:45 +0800
message:
GETPROPERTY opcode: use as_environment::get_variable to search for the property.
modified:
libcore/vm/Machine.cpp
libcore/vm/Machine.h
["r9536.diff" (r9536.diff)]
=== modified file 'libcore/vm/Machine.cpp'
--- a/libcore/vm/Machine.cpp 2008-08-30 10:41:42 +0000
+++ b/libcore/vm/Machine.cpp 2008-08-30 12:19:45 +0000
@@ -1566,7 +1566,10 @@
{
asName a = pool_name(mStream->read_V32(), mPoolObject);
//TODO: If multiname is runtime we need to also pop namespace and name values of \
the stack.
- get_property(a.getGlobalName(),0);
+ as_value obj = pop_stack();
+ as_value val = get_property_value(obj.to_object(),a);
+ push_stack(val);
+ //get_property(a.getGlobalName(),0);
break;
}
/// 0x68 ABC_ACTION_INITPROPERTY
=== modified file 'libcore/vm/Machine.h'
--- a/libcore/vm/Machine.h 2008-08-30 10:41:42 +0000
+++ b/libcore/vm/Machine.h 2008-08-30 12:19:45 +0000
@@ -318,9 +318,28 @@
}
as_value get_property_value(asName multiname){
+ return get_property_value(NULL,multiname);
+ }
+
+ as_value get_property_value(boost::intrusive_ptr<as_object> obj, asName multiname){
+ as_environment::ScopeStack stack;
as_environment env;
- as_value val = env.get_variable(mPoolObject->mStringPool[multiname.getNamespace()->getAbcURI()],*getScopeStack(),NULL);
- return val;
+ if(obj == NULL){
+ stack = *getScopeStack();
+ }
+ else{
+ stack.push_back(obj);
+ }
+ std::string ns = mPoolObject->mStringPool[multiname.getNamespace()->getAbcURI()];
+ std::string path;
+ if(ns.size() == 0){
+ path = mPoolObject->mStringPool[multiname.getABCName()];
+ }
+ else{
+ path = ns + "." + mPoolObject->mStringPool[multiname.getABCName()];
+ }
+ return env.get_variable(path,stack,NULL);
+
}
void print_stack(){
_______________________________________________
Gnash-commit mailing list
Gnash-commit@gnu.org
http://lists.gnu.org/mailman/listinfo/gnash-commit
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic