[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