gnash-commit
[Top][All Lists]
Advanced

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

[Gnash-commit] /srv/bzr/gnash/trunk r10931: AVM2 debugging.


From: Benjamin Wolsey
Subject: [Gnash-commit] /srv/bzr/gnash/trunk r10931: AVM2 debugging.
Date: Wed, 27 May 2009 16:58:18 +0200
User-agent: Bazaar (1.13.1)

------------------------------------------------------------
revno: 10931
committer: Benjamin Wolsey <address@hidden>
branch nick: trunk
timestamp: Wed 2009-05-27 16:58:18 +0200
message:
  AVM2 debugging.
modified:
  libcore/vm/Machine.cpp
    ------------------------------------------------------------
    revno: 10927.1.10
    committer: Benjamin Wolsey <address@hidden>
    branch nick: test
    timestamp: Wed 2009-05-27 16:13:57 +0200
    message:
      Document, add debugging.
    modified:
      libcore/vm/Machine.cpp
=== modified file 'libcore/vm/Machine.cpp'
--- a/libcore/vm/Machine.cpp    2009-05-27 11:30:24 +0000
+++ b/libcore/vm/Machine.cpp    2009-05-27 14:13:57 +0000
@@ -1912,13 +1912,14 @@
 
                     break;
                 }
-            /// 0x6E ABC_ACTION_GETGLOBALSLOT
-            /// Stream: V32 'slot_index + 1'
-            /// Stack In:
-            ///  .
-            /// Stack Out:
-            ///  slot -- globals.slots[slot_index]
-            /// NB: Deprecated
+
+                /// 0x6E ABC_ACTION_GETGLOBALSLOT
+                /// Stream: V32 'slot_index + 1'
+                /// Stack In:
+                ///  .
+                /// Stack Out:
+                ///  slot -- globals.slots[slot_index]
+                /// NB: Deprecated
                 case SWF::ABC_ACTION_GETGLOBALSLOT:
                 {
                     boost::uint32_t sindex = mStream->read_V32();
@@ -1929,14 +1930,15 @@
                     //TODO: mStack.top(0) = mGlobal.getSlot(sindex);
                     break;
                 }
-            /// 0x6F ABC_ACTION_SETGLOBALSLOT
-            /// Stream: V32 'slot_index + 1'
-            /// Stack In:
-            ///  value -- The value to be placed into the slot.
-            /// Stack Out:
-            ///  .
-            /// Do: globals[slot_index] = value
-            /// NB: Deprecated
+
+                /// 0x6F ABC_ACTION_SETGLOBALSLOT
+                /// Stream: V32 'slot_index + 1'
+                /// Stack In:
+                ///  value -- The value to be placed into the slot.
+                /// Stack Out:
+                ///  .
+                /// Do: globals[slot_index] = value
+                /// NB: Deprecated
                 case SWF::ABC_ACTION_SETGLOBALSLOT:
                 {
                     boost::uint32_t sindex = mStream->read_V32();
@@ -1946,92 +1948,88 @@
                     //TODO: mGlobal.setSlot(sindex, mStack.pop());
                     break;
                 }
-            /// 0x70 ABC_ACTION_CONVERT_S
-            /// Stack In:
-            ///  value -- An object
-            /// Stack Out:
-            ///  str_value -- value as a string
+
+                /// 0x70 ABC_ACTION_CONVERT_S
+                /// Stack In:
+                ///  value -- An object
+                /// Stack Out:
+                ///  str_value -- value as a string
                 case SWF::ABC_ACTION_CONVERT_S:
-                {
                     mStack.top(0) = mStack.top(0).to_string();
                     break;
-                }
-            /// 0x71 ABC_ACTION_ESC_XELEM
-            /// Stack In:
-            ///  value -- An object to be escaped
-            /// Stack Out:
-            ///  str_value -- value as a string, escaped suitably for an XML 
element.
+
+                /// 0x71 ABC_ACTION_ESC_XELEM
+                /// Stack In:
+                ///  value -- An object to be escaped
+                /// Stack Out:
+                ///  str_value -- value as a string, escaped suitably for
+                ///         an XML element.
                 case SWF::ABC_ACTION_ESC_XELEM:
-                {
-                    //TODO: mStack.top(0) = 
mStack.top(0).to_escaped_xml_element();
+                    log_unimpl("ABC_ACTION_ESC_XELEM");
+                    //TODO: set mStack.top(0) to an escaped string.
                     break;
-                }
-            /// 0x72 ABC_ACTION_ESC_XATTR
-            /// Stack In:
-            ///  value -- An object to be escaped
-            /// Stack Out:
-            ///  str_value -- value as a string, escaped suitably for an XML 
attribute.
+
+                /// 0x72 ABC_ACTION_ESC_XATTR
+                /// Stack In:
+                ///  value -- An object to be escaped
+                /// Stack Out:
+                ///  str_value -- value as a string, escaped suitably for an
+                ///     XML attribute.
                 case SWF::ABC_ACTION_ESC_XATTR:
-                {
-                    //TODO: mStack.top(0) = 
mStack.top(0).to_escaped_xml_attribute();
+                    log_unimpl("ABC_ACTION_ESC_XATTR");
+                    //TODO: set mStack.top(0) to an escaped string.
                     break;
-                }
-            /// 0x73 ABC_ACTION_CONVERT_I
-            /// 0x83 ABC_ACTION_COERCE_I (deprecated)
-            /// Stack In:
-            ///  value -- An object to be converted to Integer
-            /// Stack Out:
-            ///  int_value -- value as an integer object
+
+                /// 0x73 ABC_ACTION_CONVERT_I
+                /// 0x83 ABC_ACTION_COERCE_I (deprecated)
+                /// Stack In:
+                ///  value -- An object to be converted to Integer
+                /// Stack Out:
+                ///  int_value -- value as an integer object
                 case SWF::ABC_ACTION_CONVERT_I:
                 case SWF::ABC_ACTION_COERCE_I:
-                {
-                    as_value val = pop_stack();
-                    val.to_int();
-                    push_stack(val);
+                    mStack.top(0) = mStack.top(0).to_int();
                     break;
-                }
-            /// 0x74 ABC_ACTION_CONVERT_U
-            /// 0x88 ABC_ACTION_COERCE_U (deprecated)
-            /// Stack In:
-            ///  value -- An object to be converted to unsigned integer
-            /// Stack Out:
-            ///  int_value -- value as an unsigned integer object
+
+                /// 0x74 ABC_ACTION_CONVERT_U
+                /// 0x88 ABC_ACTION_COERCE_U (deprecated)
+                /// Stack In:
+                ///  value -- An object to be converted to unsigned integer
+                /// Stack Out:
+                ///  int_value -- value as an unsigned integer object
                 case SWF::ABC_ACTION_CONVERT_U:
                 case SWF::ABC_ACTION_COERCE_U:
-                {
                     mStack.top(0) = mStack.top(0).to_number<unsigned int>();
                     break;
-                }
-            /// 0x75 ABC_ACTION_CONVERT_D
-            /// 0x84 ABC_ACTION_COERCE_D (deprecated)
-            /// Stack In:
-            ///  value -- An object to be converted to a double
-            /// Stack Out:
-            ///  double_value -- value as a double object
+
+                /// 0x75 ABC_ACTION_CONVERT_D
+                /// 0x84 ABC_ACTION_COERCE_D (deprecated)
+                /// Stack In:
+                ///  value -- An object to be converted to a double
+                /// Stack Out:
+                ///  double_value -- value as a double object
                 case SWF::ABC_ACTION_CONVERT_D:
                 case SWF::ABC_ACTION_COERCE_D:
-                {
-                    push_stack(pop_stack().to_number());
+                    mStack.top(0) = mStack.top(0).to_number();
                     break;
-                }
-            /// 0x76 ABC_ACTION_CONVERT_B
-            /// 0x81 ABC_ACTION_COERCE_B (deprecated)
-            /// Stack In:
-            ///  value -- An object to be converted to a boolean
-            /// Stack Out:
-            ///  bool_value -- value as a boolean object
+
+                /// 0x76 ABC_ACTION_CONVERT_B
+                /// 0x81 ABC_ACTION_COERCE_B (deprecated)
+                /// Stack In:
+                ///  value -- An object to be converted to a boolean
+                /// Stack Out:
+                ///  bool_value -- value as a boolean object
                 case SWF::ABC_ACTION_CONVERT_B:
                 case SWF::ABC_ACTION_COERCE_B:
-                {
-                    mStack.top(0).set_bool(mStack.top(0).to_bool());
+                    mStack.top(0) = mStack.top(0).to_bool();
                     break;
-                }
-            /// 0x77 ABC_ACTION_CONVERT_O
-            /// Stack In:
-            ///  obj -- An object
-            /// Stack Out:
-            ///  obj -- An object
-            /// Do: If obj is Undefined or Null, throw TypeError
+
+                /// 0x77 ABC_ACTION_CONVERT_O
+                /// Stack In:
+                ///  obj -- An object
+                /// Stack Out:
+                ///  obj -- An object
+                /// Do: If obj is Undefined or Null, throw TypeError
                 case SWF::ABC_ACTION_CONVERT_O:
                 {
                     mStack.top(0) = mStack.top(0).to_object().get();
@@ -2039,71 +2037,87 @@
                         throw ASTypeError();
                     break;
                 }
-            /// 0x78 ABC_ACTION_CHECKFILTER
-            /// Stack In:
-            ///  obj -- An object
-            /// Stack Out:
-            ///  obj -- An object
-            /// Do: If obj is not XML based, throw TypeError
+
+                /// 0x78 ABC_ACTION_CHECKFILTER
+                /// Stack In:
+                ///  obj -- An object
+                /// Stack Out:
+                ///  obj -- An object
+                /// Do: If obj is not XML based, throw TypeError
                 case SWF::ABC_ACTION_CHECKFILTER:
                 {
-                    if (!mStack.top(0).is_object() || 
!mStack.top(0).to_object()->isXML())
+                    if (!mStack.top(0).is_object() ||
+                            !mStack.top(0).to_object()->isXML())
                         throw ASTypeError();
                     break;
                 }
-            /// 0x80 ABC_ACTION_COERCE
-            /// Stream: V32 'name_index'
-            /// Stack In:
-            ///  [ns [n]] -- Possibly name/namespace stuff
-            ///  obj -- An object to be converted
-            /// Stack Out:
-            ///  coerced_obj -- The object as the desired 
(resolve)'name_index' type.
+
+                /// 0x80 ABC_ACTION_COERCE
+                /// Stream: V32 'name_index'
+                /// Stack In:
+                ///  [ns [n]] -- Possibly name/namespace stuff
+                ///  obj -- An object to be converted
+                /// Stack Out:
+                ///  coerced_obj -- The object as the desired (resolve)
+                //      'name_index' type.
                 case SWF::ABC_ACTION_COERCE:
                 {
+                    // TODO: handle runtime names?
                     asName a = pool_name(mStream->read_V32(), mPoolObject);
-                    as_value value = pop_stack();
-
-                    //TODO: Actually coerce the value.
-            //         if (value.is_null()) {
-            //                 as_value new_type = get_property_value(a);
-            //                 value->
-            //                 push_stack(new_type);
-            //         }
-            //         else{
-                        push_stack(value);
-            //         }
+
+                    as_value value = mStack.top(0);
+                    log_unimpl("ABC_ACTION_COERCE");
+                    log_abc("COERCE: object for conversion is %s, "
+                            "desired type %s", value,
+                            mST.value(a.getGlobalName()));
+
+                    // Examples of desired type: "Sprite" "Button",
+                    // "GlobalListener", "Object".
+                    // Tamarin seems to look up the traits of the
+                    // target type. If it's a builtin type (boolean, number,
+                    // string, in, uint, object, "any") it succeeds. 
+                    // Otherwise check null or undefined and do something.
+                    // Otherwise look at the type traits of the original. If
+                    // these traits contain the expected interface, return the
+                    // original value. Otherwise throw error.
                     break;
                 }
-            /// 0x82 ABC_ACTION_COERCE_A
-            /// Stack In:
-            ///  obj -- An object to be converted
-            /// Stack Out:
-            ///  obj
-            /// Do: Nothing. (The 'a' is for atom, and it's unclear if 
anything is needed.)
+                /// 0x82 ABC_ACTION_COERCE_A
+                /// Stack In:
+                ///  obj -- An object to be converted
+                /// Stack Out:
+                ///  obj
+                /// Do: Nothing. (The 'a' is for atom, and it's unclear
+                /// if anything is needed.)
                 case SWF::ABC_ACTION_COERCE_A:
                 {
                     break;
                 }
-            /// 0x85 ABC_ACTION_COERCE_S
-            /// Stack In:
-            ///  obj -- An object to be converted
-            /// Stack Out:
-            ///  str_obj -- obj as string. nullString object if obj is Null or 
Undefined
+
+                /// 0x85 ABC_ACTION_COERCE_S
+                /// Stack In:
+                ///  obj -- An object to be converted
+                /// Stack Out:
+                ///  str_obj -- obj as string. nullString object if obj is
+                ///  Null or Undefined
                 case SWF::ABC_ACTION_COERCE_S:
                 {
-                    if (mStack.top(0).is_undefined() || 
mStack.top(0).is_null())
+                    if (mStack.top(0).is_undefined() ||
+                            mStack.top(0).is_null()) {
                         mStack.top(0) = "";
-                    else
-                        mStack.top(0) = mStack.top(0).to_string();
+                    }
+                    else mStack.top(0) = mStack.top(0).to_string();
                     break;
                 }
-            /// 0x86 ABC_ACTION_ASTYPE
-            /// Stream: V32 'name_index'
-            /// Stack In:
-            ///  [ns [n]] -- Possible namespace stuff
-            ///  obj -- An object to be checked
-            /// Stack Out:
-            ///  cobj -- obj if obj is of type (resolve)'name_index', 
otherwise Null
+
+                /// 0x86 ABC_ACTION_ASTYPE
+                /// Stream: V32 'name_index'
+                /// Stack In:
+                ///  [ns [n]] -- Possible namespace stuff
+                ///  obj -- An object to be checked
+                /// Stack Out:
+                ///  cobj -- obj if obj is of type (resolve)'name_index',
+                ///     otherwise Null
                 case SWF::ABC_ACTION_ASTYPE:
                 {
                     asName a = pool_name(mStream->read_V32(), mPoolObject);
@@ -2112,12 +2126,14 @@
                     push_stack(value);
                     break;
                 }
-            /// 0x87 ABC_ACTION_ASTYPELATE
-            /// Stack In:
-            ///  valid -- The object whose type is to be matched
-            ///  obj -- An object to be checked
-            /// Stack Out:
-            ///  cobj -- obj if type of obj conforms to valid, otherwise Null
+
+                /// 0x87 ABC_ACTION_ASTYPELATE
+                /// Stack In:
+                ///  valid -- The object whose type is to be matched
+                ///  obj -- An object to be checked
+                /// Stack Out:
+                ///  cobj -- obj if type of obj conforms to valid, otherwise
+                ///     Null
                 case SWF::ABC_ACTION_ASTYPELATE:
                 {
                     as_value type = pop_stack();


reply via email to

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