gnash-commit
[Top][All Lists]
Advanced

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

[Gnash-commit] /srv/bzr/gnash/avm2 r9457: Have ConstuctSuper opcode remo


From: Tom Stellard
Subject: [Gnash-commit] /srv/bzr/gnash/avm2 r9457: Have ConstuctSuper opcode remove items from stack, and implement opcode FindPropStrict.
Date: Wed, 13 Aug 2008 01:03:21 +0800
User-agent: Bazaar (1.5)

------------------------------------------------------------
revno: 9457
committer: Tom Stellard <address@hidden>
branch nick: gnash_dev
timestamp: Wed 2008-08-13 01:03:21 +0800
message:
  Have ConstuctSuper opcode remove items from stack, and implement opcode 
FindPropStrict.
modified:
  libcore/vm/Machine.cpp
  libcore/vm/Machine.h
=== modified file 'libcore/vm/Machine.cpp'
--- a/libcore/vm/Machine.cpp    2008-08-12 16:29:15 +0000
+++ b/libcore/vm/Machine.cpp    2008-08-12 17:03:21 +0000
@@ -1246,21 +1246,24 @@
 ///  .
        case SWF::ABC_ACTION_CONSTRUCTSUPER:
        {
-               // TODO
+               LOG_AVM_UNIMPLEMENTED();
                boost::uint32_t argc = mStream->read_V32();
-               ENSURE_OBJECT(mStack.top(argc));
-               as_object *obj = mStack.top(argc).to_object().get();
-               as_object *super = mStack.top(argc).to_object()->get_super();
-               if (!super)
-               {
-                       throw ASException();
-                       break;
-               }
-               as_function *func = super->get_constructor();
+               LOG_DEBUG_AVM("There are %u arguments.",argc);
+               std::vector<as_value> args = get_args(argc);
+//             ENSURE_OBJECT(mStack.top(argc));
+               as_object *super = pop_stack().to_object().get()->get_super();
+               //TODO: Actually construct the super.
+//             as_object *super = mStack.top(argc).to_object()->get_super();
+//             if (!super)
+//             {
+//                     throw ASException();
+//                     break;
+//             }
+//             as_function *func = super->get_constructor();
                // 'obj' is the 'this' for the call, we ignore the return, 
there are
                // argc arguments, and we drop all of the arguments plus 'obj' 
from
                // the stack.
-               pushCall(func, obj, mIgnoreReturn, argc, -1);
+//             pushCall(func, obj, mIgnoreReturn, argc, -1);
                break;
        }
 /// 0x4A ABC_ACTION_CONSTRUCTPROP
@@ -1423,13 +1426,11 @@
        case SWF::ABC_ACTION_FINDPROPSTRICT:
        case SWF::ABC_ACTION_FINDPROPERTY:
        {
+               LOG_AVM_UNIMPLEMENTED();
 //             boost::uint32_t property_name = mStream->read_V32();
                asName a = pool_name(mStream->read_V32(), mPoolObject);
-#ifdef PRETEND
-               FIND_PROPERTY(a);
-               DEBUG_NOT_COMPLETE();
-#else
-               mStack.drop(completeName(a));
+               find_prop_strict(a);
+/*             mStack.drop(completeName(a));
                as_object *owner;
                Property *b = mCurrentScope->findProperty(a.getABCName(), 
                        a.getNamespace()->getURI(), &owner);
@@ -1443,8 +1444,7 @@
                else
                {
                        mStack.push(owner);
-               }
-#endif
+               }*/
                break;
        }
 /// 0x5F ABC_ACTION_FINDDEF

=== modified file 'libcore/vm/Machine.h'
--- a/libcore/vm/Machine.h      2008-08-12 16:29:15 +0000
+++ b/libcore/vm/Machine.h      2008-08-12 17:03:21 +0000
@@ -310,6 +310,15 @@
                mStack.push(value);
        }
 
+       std::vector<as_value> get_args(int argc){
+               std::vector<as_value> args;
+               args.resize(argc);
+               for(unsigned int i=0;i<argc;i++){
+                       args.push_back(pop_stack());
+               }
+               return args;
+       }
+
        SafeStack<as_value> mStack;
        SafeStack<State> mStateStack;
        SafeStack<Scope> mScopeStack;


reply via email to

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