| /* |
| * 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.tools.debugger.Isolate; |
| 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; |
| public static final int InIsolateCreate = 58; |
| public static final int InIsolateExit = 59; |
| public static final int InIsolateEnumerate = 60; |
| public static final int InSetActiveIsolate = 61; |
| public static final int InIsolate = 62; |
| public static final int InSetExceptionBreakpoint = 63; |
| public static final int InRemoveExceptionBreakpoint = 64; |
| // 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 = InRemoveExceptionBreakpoint + 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; |
| public static final int OutIsolateEnumerate = 53; |
| public static final int OutSetActiveIsolate = 54; |
| public static final int OutSetExceptionBreakpoint = 55; |
| public static final int OutRemoveExceptionBreakpoint= 56; |
| // 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 = OutRemoveExceptionBreakpoint + 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; |
| |
| private int m_targetIsolate; |
| |
| /* used by our cache to create empty DMessages */ |
| public DMessage(int size) |
| { |
| m_content = new byte[size]; |
| m_debugFormatted = new StringBuilder(); |
| m_debugFormattedThroughIndex = 0; |
| m_targetIsolate = Isolate.DEFAULT_ID; |
| 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 int getTargetIsolate() { return m_targetIsolate; } |
| public void setType(int t) { m_type = t; } |
| public void setTargetIsolate(int id) {m_targetIsolate = id;} |
| |
| /** |
| * 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); |
| setTargetIsolate(Isolate.DEFAULT_ID); |
| 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; |
| |
| case InIsolateCreate: |
| s = "InIsolateCreate"; //$NON-NLS-1$ |
| break; |
| |
| case InIsolateExit: |
| s = "InIsolateExit"; //$NON-NLS-1$ |
| break; |
| |
| case InIsolateEnumerate: |
| s = "InIsolateEnumerate"; //$NON-NLS-1$ |
| break; |
| |
| case InSetActiveIsolate: |
| s = "InSetActiveIsolate"; //$NON-NLS-1$ |
| break; |
| |
| case InIsolate: |
| s = "InIsolate"; //$NON-NLS-1$ |
| break; |
| |
| case InSetExceptionBreakpoint: |
| s = "InSetExceptionBreakpoint"; //$NON-NLS-1$ |
| break; |
| |
| case InRemoveExceptionBreakpoint: |
| s = "InRemoveExceptionBreakpoint"; //$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; |
| |
| case OutIsolateEnumerate: |
| s = "OutIsolateEnumerate"; //$NON-NLS-1$ |
| break; |
| |
| case OutSetActiveIsolate: |
| s = "OutSetActiveIsolate"; //$NON-NLS-1$ |
| break; |
| |
| case OutSetExceptionBreakpoint: |
| s = "OutSetExceptionBreakpoint"; //$NON-NLS-1$ |
| break; |
| |
| case OutRemoveExceptionBreakpoint: |
| s = "OutRemoveExceptionBreakpoint"; //$NON-NLS-1$ |
| break; |
| |
| } |
| return s; |
| } |
| } |