gnash-commit
[Top][All Lists]
Advanced

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

[Gnash-commit] /srv/bzr/gnash/avm2 r9614: Clean up PUSHSHORT opcode.


From: Tom Stellard
Subject: [Gnash-commit] /srv/bzr/gnash/avm2 r9614: Clean up PUSHSHORT opcode.
Date: Sun, 12 Oct 2008 03:14:49 +0800
User-agent: Bazaar (1.5)

------------------------------------------------------------
revno: 9614
committer: Tom Stellard <address@hidden>
branch nick: gnash_dev
timestamp: Sun 2008-10-12 03:14:49 +0800
message:
  Clean up PUSHSHORT opcode.
  CONSTRUCTPROP opcode: make sure we find the objects constructor.
modified:
  libcore/vm/Machine.cpp
=== modified file 'libcore/vm/Machine.cpp'
--- a/libcore/vm/Machine.cpp    2008-10-11 18:51:31 +0000
+++ b/libcore/vm/Machine.cpp    2008-10-11 19:14:49 +0000
@@ -867,8 +867,7 @@
        case SWF::ABC_ACTION_PUSHSHORT:
        {
                signed short s = static_cast<signed short>(mStream->read_V32());
-               mStack.grow(1);
-               mStack.top(0) = s;
+               push_stack(as_value(s));
                break;
        }
 /// 0x26 ABC_ACTION_PUSHTRUE
@@ -1320,9 +1319,17 @@
                
                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));
+               if(constructor){
+                       boost::intrusive_ptr<as_object> newobj = 
constructor->constructInstance(env, args);
+                       push_stack(as_value(newobj));
+               }
+               else{
+                       LOG_DEBUG_AVM("Object %s is not a 
constructor",constructor_val.toDebugString());
+                       constructor_val = 
constructor_val.to_object().get()->getMember(NSV::PROP_CONSTRUCTOR,0);
+                       boost::intrusive_ptr<as_function> constructor = 
constructor_val.to_as_function();
+                       boost::intrusive_ptr<as_object> newobj = 
constructor->constructInstance(env, args);
+                       push_stack(newobj);
+               }
                
                break;
        }


reply via email to

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