gnash-commit
[Top][All Lists]
Advanced

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

[Gnash-commit] /srv/bzr/gnash/avm2 r9536: GETPROPERTY opcode: use as_env


From: Tom Stellard
Subject: [Gnash-commit] /srv/bzr/gnash/avm2 r9536: GETPROPERTY opcode: use as_environment::get_variable to search for the property.
Date: Sat, 30 Aug 2008 20:19:45 +0800
User-agent: Bazaar (1.5)

------------------------------------------------------------
revno: 9536
committer: Tom Stellard <address@hidden>
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
=== 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(){


reply via email to

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