gnash-commit
[Top][All Lists]
Advanced

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

[Gnash-commit] /srv/bzr/gnash/avm2 r9549: Simplify property lookups.


From: Tom Stellard
Subject: [Gnash-commit] /srv/bzr/gnash/avm2 r9549: Simplify property lookups.
Date: Mon, 08 Sep 2008 14:34:24 +0800
User-agent: Bazaar (1.5)

------------------------------------------------------------
revno: 9549
committer: Tom Stellard <address@hidden>
branch nick: gnash_dev
timestamp: Mon 2008-09-08 14:34:24 +0800
message:
  Simplify property lookups.
modified:
  libcore/vm/Machine.cpp
  libcore/vm/Machine.h
=== modified file 'libcore/vm/Machine.cpp'
--- a/libcore/vm/Machine.cpp    2008-09-05 07:27:17 +0000
+++ b/libcore/vm/Machine.cpp    2008-09-08 06:34:24 +0000
@@ -1474,19 +1474,12 @@
        {
                asName a = pool_name(mStream->read_V32(), mPoolObject);
        
-               Property *b = find_prop_strict(a);
-
-               if (!b)
-                       throw ASException();
-               
-               as_value val;
-
-//             get_property(a.getGlobalName(),a.getNamespace()->getURI());
-//             mStack.pop().to_object()->get_member(a.getGlobalName(),&val);
-//             mStack.push(val);
-               get_property(b);
-//             mStack.grow(1);
-//             pushGet(owner, mStack.top(0), b);
+               as_value val = find_prop_strict(a);
+
+               pop_stack();
+
+               push_stack(val);
+
                break;
        }
 /// 0x61 ABC_ACTION_SETPROPERTY
@@ -1575,7 +1568,7 @@
                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
@@ -2665,36 +2658,28 @@
 //     mST = ST;
 }
 
-Property* Machine::find_prop_strict(asName multiname){
+as_value Machine::find_prop_strict(asName multiname){
+       
+       as_value val;
        for(int i=0;i<mAsValueScopeStack.size();i++){
 
-               Property *p = 
mAsValueScopeStack.top(i).to_object()->findProperty(multiname.getGlobalName(),multiname.getNamespace()->getURI());
+               val = 
mAsValueScopeStack.top(i).to_object().get()->getMember(multiname.getGlobalName(),multiname.getNamespace()->getURI());
 
-               if(p){
+               if(!val.is_undefined()){
                        push_stack(mAsValueScopeStack.top(i));
-                       return p;
+                       return val;
                }
        }
-       print_scope_stack();
-       LOG_DEBUG_AVM("Cannot find property in scope stack.");
+
+       LOG_DEBUG_AVM("Cannot find property in scope stack.  Trying again using 
as_environment.");
+       as_object *target;
        as_environment env = as_environment(_vm);
-       as_object* obj = 
env.find_object(mPoolObject->mStringPool[multiname.getNamespace()->getAbcURI()],getScopeStack());
-       push_stack(as_value(obj));
-}
-
-void Machine::get_property(string_table::key name,string_table::key ns){
-       as_object* object = pop_stack().to_object().get();
-       push_stack(object->getMember(name,ns));
-}
-       
-void Machine::get_property(Property* p){
-       LOG_DEBUG_AVM("Getting property's value and pushing it onto the stack");
-       //GET PROPERTY
-       boost::intrusive_ptr<gnash::as_object> object = 
mStack.pop().to_object();
-//     LOG_DEBUG_AVM("Here are the members in the object the property was 
resolved in:");
-       as_value value = p->getValue(*object);
-       LOG_DEBUG_AVM("Property's value is %s",value.toDebugString());
-       mStack.push(value);
+       std::string name = mPoolObject->mStringPool[multiname.getABCName()];
+       std::string ns = 
mPoolObject->mStringPool[multiname.getNamespace()->getAbcURI()];
+       std::string path = ns.size() == 0 ? name : ns + "." + name;
+       val = env.get_variable(path,*getScopeStack(),&target);
+       push_stack(as_value(target));
+       return val;
 }
 
 as_value Machine::get_property_value(asName multiname){

=== modified file 'libcore/vm/Machine.h'
--- a/libcore/vm/Machine.h      2008-09-05 07:27:17 +0000
+++ b/libcore/vm/Machine.h      2008-09-08 06:34:24 +0000
@@ -251,11 +251,7 @@
        void saveState();
        void restoreState();
 
-       Property* find_prop_strict(asName multiname);
-
-       void get_property(string_table::key name,string_table::key ns);
-       
-       void get_property(Property* p);
+       as_value find_prop_strict(asName multiname);
 
        as_value get_property_value(asName multiname);
 


reply via email to

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