gnash-commit
[Top][All Lists]
Advanced

[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;
        }


reply via email to

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