[Top][All Lists]
[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);
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Gnash-commit] /srv/bzr/gnash/avm2 r9549: Simplify property lookups.,
Tom Stellard <=