[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Gnash-commit] /srv/bzr/gnash/avm2 r9566: Clean up CONSTRUCTPROP opcode.
From: |
Tom Stellard |
Subject: |
[Gnash-commit] /srv/bzr/gnash/avm2 r9566: Clean up CONSTRUCTPROP opcode. |
Date: |
Sun, 14 Sep 2008 00:33:04 +0800 |
User-agent: |
Bazaar (1.5) |
------------------------------------------------------------
revno: 9566
committer: Tom Stellard <address@hidden>
branch nick: gnash_dev
timestamp: Sun 2008-09-14 00:33:04 +0800
message:
Clean up CONSTRUCTPROP opcode.
modified:
libcore/vm/Machine.cpp
=== modified file 'libcore/vm/Machine.cpp'
--- a/libcore/vm/Machine.cpp 2008-09-13 10:30:51 +0000
+++ b/libcore/vm/Machine.cpp 2008-09-13 16:33:04 +0000
@@ -1289,16 +1289,18 @@
case SWF::ABC_ACTION_CONSTRUCTPROP:
{
// TODO
+ as_environment env = as_environment(_vm);
asName a = pool_name(mStream->read_V32(), mPoolObject);
boost::uint32_t argc = mStream->read_V32();
std::auto_ptr< std::vector<as_value> > args = get_args(argc);
as_object* object = pop_stack().to_object().get();
- as_value prop =
object->getMember(a.getGlobalName(),a.getNamespace()->getURI());
- as_object* object_to_construct = prop.to_object().get();
- as_value property =
object_to_construct->getMember(NSV::PROP_CONSTRUCTOR,0);
- as_environment env = as_environment(_vm);
- as_value value =
call_method(property,&env,object_to_construct,args);
- push_stack(value);
+ std::string& classname =
mPoolObject->mStringPool[a.getABCName()];
+
+ as_value constructor_val = object->getMember(a.getGlobalName());
+ boost::intrusive_ptr<as_function> constructor =
constructor_val.to_as_function();
+ boost::intrusive_ptr<as_object> newobj =
constructor->constructInstance(env, args);
+
+ push_stack(as_value(newobj));
break;
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Gnash-commit] /srv/bzr/gnash/avm2 r9566: Clean up CONSTRUCTPROP opcode.,
Tom Stellard <=