Package flash.tools.debugger.concrete

Source Code of flash.tools.debugger.concrete.DMessage

/*
*
*  Licensed to the Apache Software Foundation (ASF) under one or more
*  contributor license agreements.  See the NOTICE file distributed with
*  this work for additional information regarding copyright ownership.
*  The ASF licenses this file to You under the Apache License, Version 2.0
*  (the "License"); you may not use this file except in compliance with
*  the License.  You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
*  Unless required by applicable law or agreed to in writing, software
*  distributed under the License is distributed on an "AS IS" BASIS,
*  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*  See the License for the specific language governing permissions and
*  limitations under the License.
*
*/

package flash.tools.debugger.concrete;

import java.lang.ArrayIndexOutOfBoundsException;
import java.io.UnsupportedEncodingException;

import flash.util.FieldFormat;
import flash.util.Trace;

/**
* DMessage.java
*
*    Wraps the contents of a specific message and provides a set of APIs that allow for
*    typed extraction of fields within the message.
*
*    No interpretation of the messages contents is performed, this is left to the
*    user of this class.  The code was constructed in this fashion, so that it more
*    closely mimics the DataReader/DataWriter classes used in the Player code.
*
*    The type of the message should be one of the InXXX or OutXXX constant integers,
*    but no checking of conformance is provided in this class.
*/
public class DMessage
{
  /**
     * This set of constants defines the message types RECEIVED from the player
   * through our debug socket
   */
  public static final int InUnknown          = -1;
  public static final int InSetMenuState        =  0;
  public static final int InSetProperty        =  1;
  public static final int InExit            =  2;
  public static final int InNewObject          =  3;
  public static final int InRemoveObject        =  4;
  public static final int InTrace            =  5;
  public static final int InErrorTarget        =  6;
  public static final int InErrorExecLimit      =  7;
  public static final int InErrorWith          =  8;
  public static final int InErrorProtoLimit      =  9;
  public static final int InSetVariable        = 10;
  public static final int InDeleteVariable      = 11;
  public static final int InParam            = 12;
  public static final int InPlaceObject        = 13;
  public static final int InScript          = 14;
  public static final int InAskBreakpoints      = 15;
  public static final int InBreakAt          = 16;
  public static final int InContinue          = 17;
  public static final int InSetLocalVariables      = 18;
  public static final int InSetBreakpoint        = 19;
  public static final int InNumScript          = 20;
  public static final int InRemoveScript        = 21;
  public static final int InRemoveBreakpoint      = 22;
  public static final int InNotSynced          = 23;
  public static final int InErrorURLOpen        = 24;
  public static final int InProcessTag        = 25;
  public static final int InVersion          = 26;
  public static final int InBreakAtExt        = 27;
  public static final int InSetVariable2        = 28;
  public static final int InSquelch          = 29;
  public static final int InGetVariable        = 30;
  public static final int InFrame            = 31;
  public static final int InOption          = 32;
    public static final int InWatch            = 33;
    public static final int InGetSwf          = 34;
    public static final int InGetSwd          = 35;
  public static final int InErrorException      = 36;
  public static final int InErrorStackUnderflow    = 37;
  public static final int InErrorZeroDivide      = 38;
  public static final int InErrorScriptStuck      = 39;
  public static final int InBreakReason        = 40;
  public static final int InGetActions        = 41;
  public static final int InSwfInfo          = 42;
  public static final int InConstantPool        = 43;
  public static final int InErrorConsole        = 44;
    public static final int InGetFncNames        = 45;
  // 46 through 52 are for profiling
    public static final int InCallFunction        = 54;
    public static final int InWatch2          = 55;
    public static final int InPassAllExceptionsToDebugger = 56;
    public static final int InBinaryOp          = 57;
    // If you add another message here, adjust the following line
    // and add a new case to the inTypeName() method below.
  public static final int InSIZE            = InBinaryOp + 1;   /* last ID used +1 */

  /**
   * This set of constants defines the message types SENT to the player from our
     * debug socket (WARNING: ID space overlaps with InXXX)
   */
  public static final int OutUnknown          = -2;
  public static final int OutZoomIn          =  0;
  public static final int OutZoomOut          =  1;
  public static final int OutZoom100          =  2;
  public static final int OutHome            =  3;
  public static final int OutSetQuality        =  4;
  public static final int OutPlay            =  5;
  public static final int OutLoop            =  6;
  public static final int OutRewind          =  7;
  public static final int OutForward          =  8;
  public static final int OutBack            =  9;
  public static final int OutPrint          = 10;
  public static final int OutSetVariable        = 11;
  public static final int OutSetProperty        = 12;
  public static final int OutExit            = 13;
  public static final int OutSetFocus          = 14;
  public static final int OutContinue          = 15;
  public static final int OutStopDebug        = 16;
  public static final int OutSetBreakpoints      = 17;
  public static final int OutRemoveBreakpoints    = 18;
  public static final int OutRemoveAllBreakpoints    = 19;
  public static final int OutStepOver          = 20;
  public static final int OutStepInto          = 21;
  public static final int OutStepOut          = 22;
  public static final int OutProcessedTag        = 23;
  public static final int OutSetSquelch        = 24;
  public static final int OutGetVariable        = 25;
  public static final int OutGetFrame          = 26;
  public static final int OutGetOption        = 27;
  public static final int OutSetOption        = 28;
  public static final int OutAddWatch          = 29; // 16-bit id; used for as2
  public static final int OutRemoveWatch        = 30; // 16-bit id; used for as2
    public static final int OutStepContinue        = 31;
    public static final int OutGetSwf            = 32;
    public static final int OutGetSwd            = 33;
  public static final int OutGetVariableWhichInvokesGetter = 34;
  public static final int OutGetBreakReason      = 35;
  public static final int OutGetActions        = 36;
  public static final int OutSetActions        = 37;
  public static final int OutSwfInfo          = 38;
  public static final int OutConstantPool        = 39;
    public static final int OutGetFncNames              = 40;
  // 41 through 47 are for profiling
    public static final int OutCallFunction        = 48;
    public static final int OutAddWatch2        = 49; // 32-bit id; used for as3
    public static final int OutRemoveWatch2        = 50; // 32-bit id; used for as3
    public static final int OutPassAllExceptionsToDebugger = 51;
    public static final int OutBinaryOp          = 52;
    // If you add another message here, adjust the following line
    // and add a new case to the outTypeName() method below.
  public static final int OutSIZE            = OutBinaryOp + 1;   /* last ID used +1 */

  /**
   * Enums originally extracted from shared_tcserver/tcparser.h; these correspond
   * to Flash player values that are currently in playerdebugger.h, class DebugAtomType.
   */
  public static final int kNumberType      = 0;
  public static final int kBooleanType    = 1;
  public static final int kStringType      = 2;
  public static final int kObjectType      = 3;
  public static final int kMovieClipType    = 4;
  public static final int kNullType      = 5;
  public static final int kUndefinedType    = 6;
  public static final int kReferenceType    = 7;
  public static final int kArrayType      = 8;
  public static final int kObjectEndType    = 9;
  public static final int kStrictArrayType  = 10;
  public static final int kDateType      = 11;
  public static final int kLongStringType    = 12;
  public static final int kUnsupportedType  = 13;
  public static final int kRecordSetType    = 14;
  public static final int kXMLType      = 15;
  public static final int kTypedObjectType  = 16;
  public static final int kAvmPlusObjectType  = 17;
  public static final int kNamespaceType    = 18;
  public static final int kTraitsType      = 19// This one is special: When passed to the debugger, it indicates
                            // that the "variable" is not a variable at all, but rather is a
                            // class name.  For example, if class Y extends class X, then
                            // we will send a kDTypeTraits for class Y; then we'll send all the
                            // members of class Y; then we'll send a kDTypeTraits for class X;
                            // and then we'll send all the members of class X.  This is only
                            // used by the AVM+ debugger.

  /* byte array of our message and current index into it */
  byte[] m_content;  /* the data bytes of the message */
  int     m_index;    /* current position within the content array */
  int    m_type;    /* one of OutXXX or InXXX integer constants */

  /**
   * Pointer size (in bytes) expected by the Flash player; either
   * 4 for the 32-bit player, or 8 for the 64-bit player.
   */
  private static int m_sizeofPtr;

  /* Debugging only: The contents of this message, formatted as a string for display */
  private StringBuilder m_debugFormatted;
  /* Debugging only: The number of bytes from the input that we have formatted into m_debugFormatted */
  private int m_debugFormattedThroughIndex;

  /* used by our cache to create empty DMessages */
  public DMessage(int size)
  {
    m_content = new byte[size];
    m_debugFormatted = new StringBuilder();
    m_debugFormattedThroughIndex = 0;
    clear();
  }

  /* getters/setters */
  public int    getType()        { return m_type; }
  public String getInTypeName()    { return inTypeName(getType()); }
  public String getOutTypeName()    { return outTypeName(getType()); }
  public byte[] getData()        { return m_content; }
  public int    getSize()        { return (m_content == null) ? 0 : m_content.length; }
  public int    getRemaining()    { return getSize()-m_index; }
  public int    getPosition()      { return m_index; }
  public void   setType(int t)    { m_type = t; }

  /**
   * Gets pointer size (in bytes) expected by the Flash player; either
   * 4 for the 32-bit player, or 8 for the 64-bit player.
   */
  public static int getSizeofPtr()
  {
    assert m_sizeofPtr != 0;
    return m_sizeofPtr;
  }

  /**
   * Sets pointer size (in bytes) expected by the Flash player; either
   * 4 for the 32-bit player, or 8 for the 64-bit player.
   */
  public static void setSizeofPtr(int size)
  {
    assert size != 0;
    m_sizeofPtr = size;
  }

  /**
   * Allow the message to be 're-parsed' by someone else
   */
  public void reset()
  {
    m_index = 0;
  }

  /**
   * Allow the message to be reused later
   */
  public void clear()
  {
    setType(-1);
    m_debugFormatted.setLength(0);
    m_debugFormattedThroughIndex = 0;
    reset();
  }

  private long get(int bytes) throws ArrayIndexOutOfBoundsException
  {
    if (m_index+bytes > m_content.length)
      throw new ArrayIndexOutOfBoundsException(m_content.length-m_index+" < "+bytes); //$NON-NLS-1$

    long value = 0;
    for (int i=0; i<bytes; ++i) {
      long byteValue = m_content[m_index++] & 0xff;
      long byteValueShifted = byteValue << (8*i);
      value |= byteValueShifted;
    }

    debugAppendNumber(value, bytes);
    return value;
  }

  /**
   * Extract the next byte
   */
  public int getByte() throws ArrayIndexOutOfBoundsException
  {
    return (int) get(1);
  }

   /**
   * Extract the next 2 bytes, which form a 16b integer, from the message
   */
  public int getWord() throws ArrayIndexOutOfBoundsException
  {
    return (int) get(2);
  }

  /**
   * Extract the next 4 bytes, which form a 32b integer, from the message
   */
  public long getDWord() throws ArrayIndexOutOfBoundsException
  {
    return get(4);
  }

  /**
   * Extract the next 8 bytes, which form a 64b integer, from the message
   */
  public long getLong() throws ArrayIndexOutOfBoundsException
  {
    return get(8);
  }

  /**
   * Extract a pointer from the message -- either 8 bytes or 4 bytes,
   * depending on how big pointers are in the target Flash player
   */
  public long getPtr() throws ArrayIndexOutOfBoundsException
  {
    return get(getSizeofPtr());
  }

  /**
   * Heart wrenchingly slow but since we don't have a length so we can't
   * do much better
   */
  public String getString() throws ArrayIndexOutOfBoundsException
  {
    int startAt = m_index;
    boolean done = false;

    /* scan looking for a terminating null */
    while(!done)
    {
        int ch = m_content[m_index++];
      if (ch == 0)
        done = true;
      else if (m_index > m_content.length)
        throw new ArrayIndexOutOfBoundsException("no string terminator found @"+m_index); //$NON-NLS-1$
    }

    /* build a new string and return it */
    String s;
    try
    {
      // The player uses UTF-8
      s = new String(m_content, startAt, m_index-startAt-1, "UTF-8"); //$NON-NLS-1$
    }
    catch(UnsupportedEncodingException uee)
    {
      // couldn't convert so let's try the default
      s = new String(m_content, startAt, m_index-startAt-1);
    }
    debugAppendString(s);
    return s;
  }

  /**
   * Appends a number to the end of the message
   * @param val the number
   * @param bytes how many bytes should be written
   */
  public void put(long val, int bytes) throws ArrayIndexOutOfBoundsException
  {
    if (m_index+bytes > m_content.length)
      throw new ArrayIndexOutOfBoundsException(m_content.length-m_index+" < "+bytes); //$NON-NLS-1$

    for (int i=0; i<bytes; ++i)
      m_content[m_index++] = (byte)(val >> 8*i);

    debugAppendNumber(val, bytes);
  }

  /**
   * Appends a byte to the end of the message
   */
  public void putByte(byte val) throws ArrayIndexOutOfBoundsException
  {
    put(val, 1);
  }

  /**
   * Appends 2 bytes, which form a 16b integer, into the message
   */
  public void putWord(int val) throws ArrayIndexOutOfBoundsException
  {
    put(val, 2);
  }

  /**
   * Appends 4 bytes, which form a 32b integer, into the message
   */
  public void putDWord(int val) throws ArrayIndexOutOfBoundsException
  {
    put(val, 4);
  }

  /**
   * Appends 8 bytes, which form a 64b integer, into the message
   */
  public void putLong(long val) throws ArrayIndexOutOfBoundsException
  {
    put(val, 8);
  }

  /**
   * Appends a pointer into the message -- either 8 bytes or 4 bytes,
   * depending on how big pointers are in the target Flash player
   */
  public void putPtr(long val) throws ArrayIndexOutOfBoundsException
  {
    put(val, getSizeofPtr());
  }

  /**
   * Helper to get the number of bytes that a string will need when it is sent
   * across the socket to the Flash player.  Do *not* use string.length(),
   * because that will return an incorrect result for strings that have non-
   * ASCII characters.
   */
  public static int getStringLength(String s)
  {
    try
    {
      return s.getBytes("UTF-8").length; //$NON-NLS-1$
    }
    catch (UnsupportedEncodingException e)
    {
      if (Trace.error) Trace.trace(e.toString());
      return 0;
    }
  }

  /**
   * Place a string into the message (using UTF-8 encoding)
   */
  public void putString(String s) throws ArrayIndexOutOfBoundsException, UnsupportedEncodingException
  {
    /* convert the string into a byte array */
    byte[] bytes = s.getBytes("UTF-8"); //$NON-NLS-1$
    int length = bytes.length;
    int endAt = m_index + length + 1;

    if (endAt > m_content.length)
      throw new ArrayIndexOutOfBoundsException(endAt+" > "+m_content.length); //$NON-NLS-1$

    /* copy the string as a byte array */
    System.arraycopy(bytes, 0, m_content, m_index, length);
    m_index += length;

    /* now the null terminator */
    m_content[m_index++] = '\0';
   
    debugAppendString(s);
  }

  // Debugging helper function: we've parsed a number out of the stream of input bytes,
  // so record that as a hex number of the appropriate length, e.g. "0x12" or "0x1234"
  // or "0x12345678", depending on numBytes.
  private void debugAppendNumber(long value, int numBytes)
  {
    if (PlayerSession.m_debugMsgOn || PlayerSession.m_debugMsgFileOn)
    {
      StringBuilder sb = new StringBuilder();
      sb.append("0x"); //$NON-NLS-1$
      FieldFormat.formatLongToHex(sb, value, numBytes * 2, true);
      debugAppend(sb.toString());
    }
  }

  // Debugging helper function: we've parsed a string out of the stream of input bytes,
  // so record it as a quoted string in the formatted debugging output.
  private void debugAppendString(String s)
  {
    if (PlayerSession.m_debugMsgOn || PlayerSession.m_debugMsgFileOn)
      debugAppend('"' + s + '"');
  }

  // Debugging helper function: append a string to the formatted debugging output.
  private void debugAppend(String s)
  {
    if (PlayerSession.m_debugMsgOn || PlayerSession.m_debugMsgFileOn)
    {
      if (m_index > m_debugFormattedThroughIndex)
      {
        m_debugFormattedThroughIndex = m_index;
        if (m_debugFormatted.length() > 0)
          m_debugFormatted.append(' ');
        m_debugFormatted.append(s);
      }
    }
  }

  public String inToString() { return inToString(16); }

  public String inToString(int maxContentBytes)
  {
    StringBuilder sb = new StringBuilder();
    sb.append(getInTypeName());
    sb.append('[');
    sb.append(getSize());
    sb.append("] "); //$NON-NLS-1$
    if (getSize() > 0)
      appendContent(sb, maxContentBytes);

    return sb.toString();
  }

  public String outToString() { return outToString(16); }

  public String outToString(int maxContentBytes)
  {
    StringBuilder sb = new StringBuilder();
    sb.append(getOutTypeName());
    sb.append('[');
    sb.append(getSize());
    sb.append("] "); //$NON-NLS-1$
    if (getSize() > 0)
      appendContent(sb, maxContentBytes);

    return sb.toString();
  }

  public StringBuilder appendContent(StringBuilder sb, int max)
  {
    int size = getSize();
    byte[] data = getData();
    int i = 0;

    // First, output formatted content -- content for which some of the other functions
    // in this class, such as getDWord and getString, did formatting.
    sb.append(m_debugFormatted);

    // Now, for any left-over bytes which no one bothered to parse, output them as hex.
    for(i=0; i<max && i+m_debugFormattedThroughIndex<size; i++)
    {
      int v = data[i+m_debugFormattedThroughIndex] & 0xff;
      sb.append(" 0x"); //$NON-NLS-1$
      FieldFormat.formatLongToHex(sb, v, 2, true);
    }

    if (i+m_debugFormattedThroughIndex < size)
      sb.append(" ..."); //$NON-NLS-1$

    return sb;
  }

  /**
   * Convenience function for converting a type into a name used mainly for debugging
   * but can also be used during trace facility of command line session
   */
  public static String inTypeName(int type)
  {
        String s = "InUnknown(" + type + ")"; //$NON-NLS-1$ //$NON-NLS-2$

    switch(type)
    {
      case InSetMenuState:
        s = "InSetMenuState"; //$NON-NLS-1$
        break;

      case InSetProperty:
        s = "InSetProperty"; //$NON-NLS-1$
        break;

      case InExit:
        s = "InExit"; //$NON-NLS-1$
        break;

      case InNewObject:
        s = "InNewObject"; //$NON-NLS-1$
        break;

      case InRemoveObject:
        s = "InRemoveObject"; //$NON-NLS-1$
        break;

        case InTrace:
        s = "InTrace"; //$NON-NLS-1$
        break;

      case InErrorTarget:
        s = "InErrorTarget"; //$NON-NLS-1$
        break;

      case InErrorExecLimit:
        s = "InErrorExecLimit"; //$NON-NLS-1$
        break;

      case InErrorWith:
        s = "InErrorWith"; //$NON-NLS-1$
        break;

      case InErrorProtoLimit:
        s = "InErrorProtoLimit"; //$NON-NLS-1$
        break;

      case InSetVariable:
        s = "InSetVariable"; //$NON-NLS-1$
        break;

      case InDeleteVariable:
        s = "InDeleteVariable"; //$NON-NLS-1$
        break;

      case InParam:
        s = "InParam"; //$NON-NLS-1$
        break;

      case InPlaceObject:
        s = "InPlaceObject"; //$NON-NLS-1$
        break;

      case InScript:
        s = "InScript"; //$NON-NLS-1$
        break;

      case InAskBreakpoints:
        s = "InAskBreakpoints"; //$NON-NLS-1$
        break;

      case InBreakAt:
        s = "InBreakAt"; //$NON-NLS-1$
        break;

      case InContinue:
        s = "InContinue"; //$NON-NLS-1$
        break;

      case InSetLocalVariables:
        s = "InSetLocalVariables"; //$NON-NLS-1$
        break;

      case InSetBreakpoint:
        s = "InSetBreakpoint"; //$NON-NLS-1$
        break;

      case InNumScript:
        s = "InNumScript"; //$NON-NLS-1$
        break;

      case InRemoveScript:
        s = "InRemoveScript"; //$NON-NLS-1$
        break;

      case InRemoveBreakpoint:
        s = "InRemoveBreakpoint"; //$NON-NLS-1$
        break;

      case InNotSynced:
        s = "InNotSynced"; //$NON-NLS-1$
        break;

      case InErrorURLOpen:
        s = "InErrorURLOpen"; //$NON-NLS-1$
        break;

      case InProcessTag:
        s = "InProcessTag"; //$NON-NLS-1$
        break;

      case InVersion:
        s = "InVersion"; //$NON-NLS-1$
        break;

      case InBreakAtExt:
        s = "InBreakAtExt"; //$NON-NLS-1$
        break;

      case InSetVariable2:
        s = "InSetVariable2"; //$NON-NLS-1$
        break;

      case InSquelch:
        s = "InSquelch"; //$NON-NLS-1$
        break;

      case InGetVariable:
        s = "InGetVariable"; //$NON-NLS-1$
        break;

      case InFrame:
        s = "InFrame"; //$NON-NLS-1$
        break;

      case InOption:
        s = "InOption"; //$NON-NLS-1$
        break;

      case InWatch:
        s = "InWatch"; //$NON-NLS-1$
        break;

      case InGetSwf:
        s = "InGetSwf"; //$NON-NLS-1$
        break;

      case InGetSwd:
        s = "InGetSwd"; //$NON-NLS-1$
        break;

      case InErrorException:
        s = "InErrorException"; //$NON-NLS-1$
        break;

      case InErrorStackUnderflow:
        s = "InErrorStackUnderflow"; //$NON-NLS-1$
        break;

      case InErrorZeroDivide:
        s = "InErrorZeroDivide"; //$NON-NLS-1$
        break;

      case InErrorScriptStuck:
        s = "InErrorScriptStuck"; //$NON-NLS-1$
        break;

      case InBreakReason:
        s = "InBreakReason"; //$NON-NLS-1$
        break;

      case InGetActions:
        s = "InGetActions"; //$NON-NLS-1$
        break;

      case InSwfInfo:
        s = "InSwfInfo"; //$NON-NLS-1$
        break;

      case InConstantPool:
        s = "InConstantPool"; //$NON-NLS-1$
        break;

      case InErrorConsole:
        s = "InErrorConsole"; //$NON-NLS-1$
        break;

            case InGetFncNames:
                s = "InGetFncNames"; //$NON-NLS-1$
                break;
               
            case InCallFunction:
              s = "InCallFunction"; //$NON-NLS-1$
              break;
             
            case InWatch2:
              s = "InWatch2"; //$NON-NLS-1$
              break;

            case InPassAllExceptionsToDebugger:
              s = "InPassAllExceptionsToDebugger"; //$NON-NLS-1$
              break;

            case InBinaryOp:
              s = "InBinaryOp"; //$NON-NLS-1$
              break;
    }
    return s;
  }

  /**
   * Convenience function for converting a type into a name used mainly for debugging
   * but can also be used during trace facility of command line session
   */
  public static String outTypeName(int type)
  {
    String s = "OutUnknown(" + type + ")"; //$NON-NLS-1$ //$NON-NLS-2$

    switch(type)
    {
      case OutZoomIn:
        s = "OutZoomIn"; //$NON-NLS-1$
        break;

      case OutZoomOut:
        s = "OutZoomOut"; //$NON-NLS-1$
        break;

      case OutZoom100:
        s = "OutZoom100"; //$NON-NLS-1$
        break;

      case OutHome:
        s = "OutHome"; //$NON-NLS-1$
        break;

      case OutSetQuality:
        s = "OutSetQuality"; //$NON-NLS-1$
        break;

      case OutPlay:
        s = "OutPlay"; //$NON-NLS-1$
        break;

      case OutLoop:
        s = "OutLoop"; //$NON-NLS-1$
        break;

      case OutRewind:
        s = "OutRewind"; //$NON-NLS-1$
        break;

      case OutForward:
        s = "OutForward"; //$NON-NLS-1$
        break;

      case OutBack:
        s = "OutBack"; //$NON-NLS-1$
        break;

      case OutPrint:
        s = "OutPrint"; //$NON-NLS-1$
        break;

      case OutSetVariable:
        s = "OutSetVariable"; //$NON-NLS-1$
        break;

      case OutSetProperty:
        s = "OutSetProperty"; //$NON-NLS-1$
        break;

      case OutExit:
        s = "OutExit"; //$NON-NLS-1$
        break;

      case OutSetFocus:
        s = "OutSetFocus"; //$NON-NLS-1$
        break;

      case OutContinue:
        s = "OutContinue"; //$NON-NLS-1$
        break;

      case OutStopDebug:
        s = "OutStopDebug"; //$NON-NLS-1$
        break;

      case OutSetBreakpoints:
        s = "OutSetBreakpoints"; //$NON-NLS-1$
        break;

      case OutRemoveBreakpoints:
        s = "OutRemoveBreakpoints"; //$NON-NLS-1$
        break;

      case OutRemoveAllBreakpoints:
        s = "OutRemoveAllBreakpoints"; //$NON-NLS-1$
        break;

      case OutStepOver:
        s = "OutStepOver"; //$NON-NLS-1$
        break;

      case OutStepInto:
        s = "OutStepInto"; //$NON-NLS-1$
        break;

      case OutStepOut:
        s = "OutStepOut"; //$NON-NLS-1$
        break;

      case OutProcessedTag:
        s = "OutProcessedTag"; //$NON-NLS-1$
        break;

      case OutSetSquelch:
        s = "OutSetSquelch"; //$NON-NLS-1$
        break;

      case OutGetVariable:
        s = "OutGetVariable"; //$NON-NLS-1$
        break;

      case OutGetFrame:
        s = "OutGetFrame"; //$NON-NLS-1$
        break;

      case OutGetOption:
        s = "OutGetOption"; //$NON-NLS-1$
        break;

      case OutSetOption:
        s = "OutSetOption"; //$NON-NLS-1$
        break;

      case OutAddWatch:
        s = "OutAddWatch"; //$NON-NLS-1$
        break;

      case OutRemoveWatch:
        s = "OutRemoveWatch"; //$NON-NLS-1$
        break;

      case OutStepContinue:
        s = "OutStepContinue"; //$NON-NLS-1$
        break;

      case OutGetSwf:
        s = "OutGetSwf"; //$NON-NLS-1$
        break;

      case OutGetSwd:
        s = "OutGetSwd"; //$NON-NLS-1$
        break;

      case OutGetVariableWhichInvokesGetter:
        s = "OutGetVariableWhichInvokesGetter"; //$NON-NLS-1$
        break;

      case OutGetBreakReason:
        s = "OutGetBreakReason"; //$NON-NLS-1$
        break;

      case OutGetActions:
        s = "OutGetActions"; //$NON-NLS-1$
        break;

      case OutSetActions:
        s = "OutSetActions"; //$NON-NLS-1$
        break;

      case OutSwfInfo:
        s = "OutSwfInfo"; //$NON-NLS-1$
        break;

      case OutConstantPool:
        s = "OutConstantPool"; //$NON-NLS-1$
        break;

            case OutGetFncNames:
                s = "OutGetFncNames"; //$NON-NLS-1$
                break;

            case OutCallFunction:
              s = "OutCallFunction"; //$NON-NLS-1$
              break;
             
            case OutAddWatch2:
              s = "OutAddWatch2"; //$NON-NLS-1$
              break;
             
            case OutRemoveWatch2:
              s = "OutRemoveWatch2"; //$NON-NLS-1$
              break;

            case OutPassAllExceptionsToDebugger:
              s = "OutPassAllExceptionsToDebugger"; //$NON-NLS-1$
              break;

            case OutBinaryOp:
              s = "OutBinaryOp"; //$NON-NLS-1$
              break;
    }
       return s;
  }
}
TOP

Related Classes of flash.tools.debugger.concrete.DMessage

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.