/*
 * DO NOT EDIT.  THIS FILE IS GENERATED FROM jsdIDebuggerService.idl
 */

#ifndef __gen_jsdIDebuggerService_h__
#define __gen_jsdIDebuggerService_h__


#ifndef __gen_nsISupports_h__
#include "nsISupports.h"
#endif

/* For IDL files that don't want to include root IDL files. */
#ifndef NS_NO_VTABLE
#define NS_NO_VTABLE
#endif
#include "jsdebug.h"
#include "nsAReadableString.h"
class jsdIDebuggerService; /* forward declaration */

class jsdIFilter; /* forward declaration */

class jsdINestCallback; /* forward declaration */

class jsdIFilterEnumerator; /* forward declaration */

class jsdIScriptEnumerator; /* forward declaration */

class jsdIScriptHook; /* forward declaration */

class jsdIExecutionHook; /* forward declaration */

class jsdICallHook; /* forward declaration */

class jsdIEphemeral; /* forward declaration */

class jsdIPC; /* forward declaration */

class jsdIStackFrame; /* forward declaration */

class jsdIScript; /* forward declaration */

class jsdIValue; /* forward declaration */

class jsdIObject; /* forward declaration */

class jsdIProperty; /* forward declaration */


/* starting interface:    jsdIDebuggerService */
#define JSDIDEBUGGERSERVICE_IID_STR "01be7f9a-1dd2-11b2-9d55-aaf919b27c73"

#define JSDIDEBUGGERSERVICE_IID \
  {0x01be7f9a, 0x1dd2, 0x11b2, \
    { 0x9d, 0x55, 0xaa, 0xf9, 0x19, 0xb2, 0x7c, 0x73 }}

class NS_NO_VTABLE jsdIDebuggerService : public nsISupports {
 public: 

  NS_DEFINE_STATIC_IID_ACCESSOR(JSDIDEBUGGERSERVICE_IID)

  /**
 * Debugger service.  It's not a good idea to have more than one active client of
 * the debugger service.
 */
/**
     * Called when a jsdIScript is created or destroyed.
     */
  /* attribute jsdIScriptHook scriptHook; */
  NS_IMETHOD GetScriptHook(jsdIScriptHook * *aScriptHook) = 0;
  NS_IMETHOD SetScriptHook(jsdIScriptHook * aScriptHook) = 0;

  /**
     * Called when the engine encounters a breakpoint.
     */
  /* attribute jsdIExecutionHook breakpointHook; */
  NS_IMETHOD GetBreakpointHook(jsdIExecutionHook * *aBreakpointHook) = 0;
  NS_IMETHOD SetBreakpointHook(jsdIExecutionHook * aBreakpointHook) = 0;

  /**
     * Called when the engine encounters the debugger keyword.
     */
  /* attribute jsdIExecutionHook debuggerHook; */
  NS_IMETHOD GetDebuggerHook(jsdIExecutionHook * *aDebuggerHook) = 0;
  NS_IMETHOD SetDebuggerHook(jsdIExecutionHook * aDebuggerHook) = 0;

  /**
     * Called when an exception goes uncaught.
     */
  /* attribute jsdIExecutionHook errorHook; */
  NS_IMETHOD GetErrorHook(jsdIExecutionHook * *aErrorHook) = 0;
  NS_IMETHOD SetErrorHook(jsdIExecutionHook * aErrorHook) = 0;

  /**
     * Called before the next PC is executed.
     */
  /* attribute jsdIExecutionHook interruptHook; */
  NS_IMETHOD GetInterruptHook(jsdIExecutionHook * *aInterruptHook) = 0;
  NS_IMETHOD SetInterruptHook(jsdIExecutionHook * aInterruptHook) = 0;

  /**
     * Called when an exception is thrown (even if it will be caught.)
     */
  /* attribute jsdIExecutionHook throwHook; */
  NS_IMETHOD GetThrowHook(jsdIExecutionHook * *aThrowHook) = 0;
  NS_IMETHOD SetThrowHook(jsdIExecutionHook * aThrowHook) = 0;

  /**
     * Called before and after a toplevel script is evaluated.
     */
  /* attribute jsdICallHook topLevelHook; */
  NS_IMETHOD GetTopLevelHook(jsdICallHook * *aTopLevelHook) = 0;
  NS_IMETHOD SetTopLevelHook(jsdICallHook * aTopLevelHook) = 0;

  /**
     * Called before and after a function is called.
     */
  /* attribute jsdICallHook functionHook; */
  NS_IMETHOD GetFunctionHook(jsdICallHook * *aFunctionHook) = 0;
  NS_IMETHOD SetFunctionHook(jsdICallHook * aFunctionHook) = 0;

  /**
     * |true| if the debugger should register an app-start observer in order
     * to begin collecting debug information when mozilla is launched.
     */
  /* attribute boolean initAtStartup; */
  NS_IMETHOD GetInitAtStartup(PRBool *aInitAtStartup) = 0;
  NS_IMETHOD SetInitAtStartup(PRBool aInitAtStartup) = 0;

  /**
     * |true| if the debugger service has been turned on.  This does not
     * necessarily mean another app is actively using the service, as the 
     * autostart pref may have turned the service on.
     */
  /* readonly attribute boolean isOn; */
  NS_IMETHOD GetIsOn(PRBool *aIsOn) = 0;

  /**
     * Turn on the debugger.  This function should only be called from JavaScript
     * code.  The debugger will be enabled on the runtime the call is made on,
     * as determined by nsIXPCNativeCallContext.
     */
  /* void on (); */
  NS_IMETHOD On(void) = 0;

  /**
     * Turn on the debugger for a given runtime.
     *
     * @param rt The runtime you want to debug.  You cannot turn the debugger
     *           on for multiple runtimes.
     */
  /* [noscript] void onForRuntime (in JSRuntime rt); */
  NS_IMETHOD OnForRuntime(JSRuntime * rt) = 0;

  /**
     * Turn the debugger off.  This will invalidate all of your jsdIEphemeral
     * derived objects, and clear all of your breakpoints.  In theory you
     * should be able to turn the debugger back on at some later time without
     * any problems.
     */
  /* void off (); */
  NS_IMETHOD Off(void) = 0;

  /**
     * Temporarily disable the debugger.  Hooks will not be called while the
     * debugger is paused.  Multiple calls to pause will increase the "pause
     * depth", and equal number of unPause calles must be made to resume
     * normal debugging.
     *
     * @return depth Number of times pause has been called since the debugger
     *               has been unpaused.
     */
  /* unsigned long pause (); */
  NS_IMETHOD Pause(PRUint32 *_retval) = 0;

  /**
     * Undo a pause.
     *
     * @return depth The number of remaining pending pause calls.
     */
  /* unsigned long unPause (); */
  NS_IMETHOD UnPause(PRUint32 *_retval) = 0;

  /**
     * Force the engine to perform garbage collection.
     */
  /* void GC (); */
  NS_IMETHOD GC(void) = 0;

  /**
     * Adds an execution hook filter.  These filters are consulted each time one
     * of the jsdIExecutionHooks is about to be called.  Filters are matched in
     * a first in, first compared fashion.  The first filter to match determines
     * whether or not the hook is called.  Use swapFilter to reorder existing
     * filters, and removeFilter to remove them.
     *
     * If |filter| is already present this method throws NS_ERROR_INVALID_ARG.
     *
     * @param filter Object representing the filter to add.
     * @param after  Insert |filter| after this one.  Pass null to insert at
     *               the beginning.
     */
  /* void insertFilter (in jsdIFilter filter, in jsdIFilter after); */
  NS_IMETHOD InsertFilter(jsdIFilter *filter, jsdIFilter *after) = 0;

  /**
     * Same as insertFilter, except always add to the end of the list.
     */
  /* void appendFilter (in jsdIFilter filter); */
  NS_IMETHOD AppendFilter(jsdIFilter *filter) = 0;

  /**
     * Unignore execution hooks which are triggered by a jsdIScript matching
     * particular filter.
     *
     * If |filter| is not present this method throws NS_ERROR_INVALID_ARG.
     *
     * @param filter Object representing the filter to remove.  Must be the exact
     * object passed to addFilter, not just a new object with the same
     * properties.
     */
  /* void removeFilter (in jsdIFilter filter); */
  NS_IMETHOD RemoveFilter(jsdIFilter *filter) = 0;

  /**
     * Swaps the positions of the filters passed in.
     * 
     * If |filter_a| is not present, this method throws NS_ERROR_INVALID_ARG.
     * If |filter_b| is not present, filter_a is replaced by filter_b.
     * If |filter_a| == |filter_b|, then the glob and urlPattern properties of
     * the filter are reread.
     */
  /* void swapFilters (in jsdIFilter filter_a, in jsdIFilter filter_b); */
  NS_IMETHOD SwapFilters(jsdIFilter *filter_a, jsdIFilter *filter_b) = 0;

  /**
     * Enumerate all active filters.  This routine refreshes each filter before
     * passing them on to the enumeration function.  Calling this with a null
     * |enumerator| is equivilant to jsdIService::refreshFilters.
     *
     * @param enumerator jsdIFilterEnumerator instance to be called back for the
     *                   enumeration.
     */
  /* void enumerateFilters (in jsdIFilterEnumerator enumerator); */
  NS_IMETHOD EnumerateFilters(jsdIFilterEnumerator *enumerator) = 0;

  /**
     * Force the debugger to resync its internal filter cache with the
     * actual values in the jsdIFilter objects.  To refresh a single filter,
     * see jsdIService::swapFilters.  This method is equivilant to
     * jsdIService::enumerateFilters with a null enumerator.
     */
  /* void refreshFilters (); */
  NS_IMETHOD RefreshFilters(void) = 0;

  /**
     * Causes the debugger service to clear its list of filters.
     */
  /* void clearFilters (); */
  NS_IMETHOD ClearFilters(void) = 0;

  /**
     * Enumerate all scripts the debugger knows about.  Any scripts created
     * before you turned the debugger on, or after turning the debugger off
     * will not be available unless the autostart perf is set.
     *
     * @param enumerator jsdIScriptEnumerator instance to be called back for
     *                   the enumeration.
     */
  /* void enumerateScripts (in jsdIScriptEnumerator enumerator); */
  NS_IMETHOD EnumerateScripts(jsdIScriptEnumerator *enumerator) = 0;

  /**
     * Clear all breakpoints in all scripts.
     */
  /* void clearAllBreakpoints (); */
  NS_IMETHOD ClearAllBreakpoints(void) = 0;

  /**
     * Push a new network queue, and enter a new UI event loop.
     * @param callback jsdINestCallback instance to be called back after the
     *                 network queue has been pushed, but before the
     *                 UI loop starts.
     * @return depth returns the current number of times the event loop has been
     *               nested.  your code can use it for sanity checks.
     */
  /* unsigned long enterNestedEventLoop (in jsdINestCallback callback); */
  NS_IMETHOD EnterNestedEventLoop(jsdINestCallback *callback, PRUint32 *_retval) = 0;

  /**
     * Exit the current nested event loop after the current iteration completes,
     * and pop the network event queue.
     *
     * @return depth returns the current number of times the event loop has been
     *               nested.  your code can use it for sanity checks.
     */
  /* unsigned long exitNestedEventLoop (); */
  NS_IMETHOD ExitNestedEventLoop(PRUint32 *_retval) = 0;

};

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_JSDIDEBUGGERSERVICE \
  NS_IMETHOD GetScriptHook(jsdIScriptHook * *aScriptHook); \
  NS_IMETHOD SetScriptHook(jsdIScriptHook * aScriptHook); \
  NS_IMETHOD GetBreakpointHook(jsdIExecutionHook * *aBreakpointHook); \
  NS_IMETHOD SetBreakpointHook(jsdIExecutionHook * aBreakpointHook); \
  NS_IMETHOD GetDebuggerHook(jsdIExecutionHook * *aDebuggerHook); \
  NS_IMETHOD SetDebuggerHook(jsdIExecutionHook * aDebuggerHook); \
  NS_IMETHOD GetErrorHook(jsdIExecutionHook * *aErrorHook); \
  NS_IMETHOD SetErrorHook(jsdIExecutionHook * aErrorHook); \
  NS_IMETHOD GetInterruptHook(jsdIExecutionHook * *aInterruptHook); \
  NS_IMETHOD SetInterruptHook(jsdIExecutionHook * aInterruptHook); \
  NS_IMETHOD GetThrowHook(jsdIExecutionHook * *aThrowHook); \
  NS_IMETHOD SetThrowHook(jsdIExecutionHook * aThrowHook); \
  NS_IMETHOD GetTopLevelHook(jsdICallHook * *aTopLevelHook); \
  NS_IMETHOD SetTopLevelHook(jsdICallHook * aTopLevelHook); \
  NS_IMETHOD GetFunctionHook(jsdICallHook * *aFunctionHook); \
  NS_IMETHOD SetFunctionHook(jsdICallHook * aFunctionHook); \
  NS_IMETHOD GetInitAtStartup(PRBool *aInitAtStartup); \
  NS_IMETHOD SetInitAtStartup(PRBool aInitAtStartup); \
  NS_IMETHOD GetIsOn(PRBool *aIsOn); \
  NS_IMETHOD On(void); \
  NS_IMETHOD OnForRuntime(JSRuntime * rt); \
  NS_IMETHOD Off(void); \
  NS_IMETHOD Pause(PRUint32 *_retval); \
  NS_IMETHOD UnPause(PRUint32 *_retval); \
  NS_IMETHOD GC(void); \
  NS_IMETHOD InsertFilter(jsdIFilter *filter, jsdIFilter *after); \
  NS_IMETHOD AppendFilter(jsdIFilter *filter); \
  NS_IMETHOD RemoveFilter(jsdIFilter *filter); \
  NS_IMETHOD SwapFilters(jsdIFilter *filter_a, jsdIFilter *filter_b); \
  NS_IMETHOD EnumerateFilters(jsdIFilterEnumerator *enumerator); \
  NS_IMETHOD RefreshFilters(void); \
  NS_IMETHOD ClearFilters(void); \
  NS_IMETHOD EnumerateScripts(jsdIScriptEnumerator *enumerator); \
  NS_IMETHOD ClearAllBreakpoints(void); \
  NS_IMETHOD EnterNestedEventLoop(jsdINestCallback *callback, PRUint32 *_retval); \
  NS_IMETHOD ExitNestedEventLoop(PRUint32 *_retval); 

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_JSDIDEBUGGERSERVICE(_to) \
  NS_IMETHOD GetScriptHook(jsdIScriptHook * *aScriptHook) { return _to GetScriptHook(aScriptHook); } \
  NS_IMETHOD SetScriptHook(jsdIScriptHook * aScriptHook) { return _to SetScriptHook(aScriptHook); } \
  NS_IMETHOD GetBreakpointHook(jsdIExecutionHook * *aBreakpointHook) { return _to GetBreakpointHook(aBreakpointHook); } \
  NS_IMETHOD SetBreakpointHook(jsdIExecutionHook * aBreakpointHook) { return _to SetBreakpointHook(aBreakpointHook); } \
  NS_IMETHOD GetDebuggerHook(jsdIExecutionHook * *aDebuggerHook) { return _to GetDebuggerHook(aDebuggerHook); } \
  NS_IMETHOD SetDebuggerHook(jsdIExecutionHook * aDebuggerHook) { return _to SetDebuggerHook(aDebuggerHook); } \
  NS_IMETHOD GetErrorHook(jsdIExecutionHook * *aErrorHook) { return _to GetErrorHook(aErrorHook); } \
  NS_IMETHOD SetErrorHook(jsdIExecutionHook * aErrorHook) { return _to SetErrorHook(aErrorHook); } \
  NS_IMETHOD GetInterruptHook(jsdIExecutionHook * *aInterruptHook) { return _to GetInterruptHook(aInterruptHook); } \
  NS_IMETHOD SetInterruptHook(jsdIExecutionHook * aInterruptHook) { return _to SetInterruptHook(aInterruptHook); } \
  NS_IMETHOD GetThrowHook(jsdIExecutionHook * *aThrowHook) { return _to GetThrowHook(aThrowHook); } \
  NS_IMETHOD SetThrowHook(jsdIExecutionHook * aThrowHook) { return _to SetThrowHook(aThrowHook); } \
  NS_IMETHOD GetTopLevelHook(jsdICallHook * *aTopLevelHook) { return _to GetTopLevelHook(aTopLevelHook); } \
  NS_IMETHOD SetTopLevelHook(jsdICallHook * aTopLevelHook) { return _to SetTopLevelHook(aTopLevelHook); } \
  NS_IMETHOD GetFunctionHook(jsdICallHook * *aFunctionHook) { return _to GetFunctionHook(aFunctionHook); } \
  NS_IMETHOD SetFunctionHook(jsdICallHook * aFunctionHook) { return _to SetFunctionHook(aFunctionHook); } \
  NS_IMETHOD GetInitAtStartup(PRBool *aInitAtStartup) { return _to GetInitAtStartup(aInitAtStartup); } \
  NS_IMETHOD SetInitAtStartup(PRBool aInitAtStartup) { return _to SetInitAtStartup(aInitAtStartup); } \
  NS_IMETHOD GetIsOn(PRBool *aIsOn) { return _to GetIsOn(aIsOn); } \
  NS_IMETHOD On(void) { return _to On(); } \
  NS_IMETHOD OnForRuntime(JSRuntime * rt) { return _to OnForRuntime(rt); } \
  NS_IMETHOD Off(void) { return _to Off(); } \
  NS_IMETHOD Pause(PRUint32 *_retval) { return _to Pause(_retval); } \
  NS_IMETHOD UnPause(PRUint32 *_retval) { return _to UnPause(_retval); } \
  NS_IMETHOD GC(void) { return _to GC(); } \
  NS_IMETHOD InsertFilter(jsdIFilter *filter, jsdIFilter *after) { return _to InsertFilter(filter, after); } \
  NS_IMETHOD AppendFilter(jsdIFilter *filter) { return _to AppendFilter(filter); } \
  NS_IMETHOD RemoveFilter(jsdIFilter *filter) { return _to RemoveFilter(filter); } \
  NS_IMETHOD SwapFilters(jsdIFilter *filter_a, jsdIFilter *filter_b) { return _to SwapFilters(filter_a, filter_b); } \
  NS_IMETHOD EnumerateFilters(jsdIFilterEnumerator *enumerator) { return _to EnumerateFilters(enumerator); } \
  NS_IMETHOD RefreshFilters(void) { return _to RefreshFilters(); } \
  NS_IMETHOD ClearFilters(void) { return _to ClearFilters(); } \
  NS_IMETHOD EnumerateScripts(jsdIScriptEnumerator *enumerator) { return _to EnumerateScripts(enumerator); } \
  NS_IMETHOD ClearAllBreakpoints(void) { return _to ClearAllBreakpoints(); } \
  NS_IMETHOD EnterNestedEventLoop(jsdINestCallback *callback, PRUint32 *_retval) { return _to EnterNestedEventLoop(callback, _retval); } \
  NS_IMETHOD ExitNestedEventLoop(PRUint32 *_retval) { return _to ExitNestedEventLoop(_retval); } 

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_JSDIDEBUGGERSERVICE(_to) \
  NS_IMETHOD GetScriptHook(jsdIScriptHook * *aScriptHook) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetScriptHook(aScriptHook); } \
  NS_IMETHOD SetScriptHook(jsdIScriptHook * aScriptHook) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetScriptHook(aScriptHook); } \
  NS_IMETHOD GetBreakpointHook(jsdIExecutionHook * *aBreakpointHook) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetBreakpointHook(aBreakpointHook); } \
  NS_IMETHOD SetBreakpointHook(jsdIExecutionHook * aBreakpointHook) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetBreakpointHook(aBreakpointHook); } \
  NS_IMETHOD GetDebuggerHook(jsdIExecutionHook * *aDebuggerHook) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetDebuggerHook(aDebuggerHook); } \
  NS_IMETHOD SetDebuggerHook(jsdIExecutionHook * aDebuggerHook) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetDebuggerHook(aDebuggerHook); } \
  NS_IMETHOD GetErrorHook(jsdIExecutionHook * *aErrorHook) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetErrorHook(aErrorHook); } \
  NS_IMETHOD SetErrorHook(jsdIExecutionHook * aErrorHook) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetErrorHook(aErrorHook); } \
  NS_IMETHOD GetInterruptHook(jsdIExecutionHook * *aInterruptHook) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetInterruptHook(aInterruptHook); } \
  NS_IMETHOD SetInterruptHook(jsdIExecutionHook * aInterruptHook) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetInterruptHook(aInterruptHook); } \
  NS_IMETHOD GetThrowHook(jsdIExecutionHook * *aThrowHook) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetThrowHook(aThrowHook); } \
  NS_IMETHOD SetThrowHook(jsdIExecutionHook * aThrowHook) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetThrowHook(aThrowHook); } \
  NS_IMETHOD GetTopLevelHook(jsdICallHook * *aTopLevelHook) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetTopLevelHook(aTopLevelHook); } \
  NS_IMETHOD SetTopLevelHook(jsdICallHook * aTopLevelHook) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetTopLevelHook(aTopLevelHook); } \
  NS_IMETHOD GetFunctionHook(jsdICallHook * *aFunctionHook) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetFunctionHook(aFunctionHook); } \
  NS_IMETHOD SetFunctionHook(jsdICallHook * aFunctionHook) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetFunctionHook(aFunctionHook); } \
  NS_IMETHOD GetInitAtStartup(PRBool *aInitAtStartup) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetInitAtStartup(aInitAtStartup); } \
  NS_IMETHOD SetInitAtStartup(PRBool aInitAtStartup) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetInitAtStartup(aInitAtStartup); } \
  NS_IMETHOD GetIsOn(PRBool *aIsOn) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetIsOn(aIsOn); } \
  NS_IMETHOD On(void) { return !_to ? NS_ERROR_NULL_POINTER : _to->On(); } \
  NS_IMETHOD OnForRuntime(JSRuntime * rt) { return !_to ? NS_ERROR_NULL_POINTER : _to->OnForRuntime(rt); } \
  NS_IMETHOD Off(void) { return !_to ? NS_ERROR_NULL_POINTER : _to->Off(); } \
  NS_IMETHOD Pause(PRUint32 *_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->Pause(_retval); } \
  NS_IMETHOD UnPause(PRUint32 *_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->UnPause(_retval); } \
  NS_IMETHOD GC(void) { return !_to ? NS_ERROR_NULL_POINTER : _to->GC(); } \
  NS_IMETHOD InsertFilter(jsdIFilter *filter, jsdIFilter *after) { return !_to ? NS_ERROR_NULL_POINTER : _to->InsertFilter(filter, after); } \
  NS_IMETHOD AppendFilter(jsdIFilter *filter) { return !_to ? NS_ERROR_NULL_POINTER : _to->AppendFilter(filter); } \
  NS_IMETHOD RemoveFilter(jsdIFilter *filter) { return !_to ? NS_ERROR_NULL_POINTER : _to->RemoveFilter(filter); } \
  NS_IMETHOD SwapFilters(jsdIFilter *filter_a, jsdIFilter *filter_b) { return !_to ? NS_ERROR_NULL_POINTER : _to->SwapFilters(filter_a, filter_b); } \
  NS_IMETHOD EnumerateFilters(jsdIFilterEnumerator *enumerator) { return !_to ? NS_ERROR_NULL_POINTER : _to->EnumerateFilters(enumerator); } \
  NS_IMETHOD RefreshFilters(void) { return !_to ? NS_ERROR_NULL_POINTER : _to->RefreshFilters(); } \
  NS_IMETHOD ClearFilters(void) { return !_to ? NS_ERROR_NULL_POINTER : _to->ClearFilters(); } \
  NS_IMETHOD EnumerateScripts(jsdIScriptEnumerator *enumerator) { return !_to ? NS_ERROR_NULL_POINTER : _to->EnumerateScripts(enumerator); } \
  NS_IMETHOD ClearAllBreakpoints(void) { return !_to ? NS_ERROR_NULL_POINTER : _to->ClearAllBreakpoints(); } \
  NS_IMETHOD EnterNestedEventLoop(jsdINestCallback *callback, PRUint32 *_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->EnterNestedEventLoop(callback, _retval); } \
  NS_IMETHOD ExitNestedEventLoop(PRUint32 *_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->ExitNestedEventLoop(_retval); } 

#if 0
/* Use the code below as a template for the implementation class for this interface. */

/* Header file */
class _MYCLASS_ : public jsdIDebuggerService
{
public:
  NS_DECL_ISUPPORTS
  NS_DECL_JSDIDEBUGGERSERVICE

  _MYCLASS_();
  virtual ~_MYCLASS_();
  /* additional members */
};

/* Implementation file */
NS_IMPL_ISUPPORTS1(_MYCLASS_, jsdIDebuggerService)

_MYCLASS_::_MYCLASS_()
{
  NS_INIT_ISUPPORTS();
  /* member initializers and constructor code */
}

_MYCLASS_::~_MYCLASS_()
{
  /* destructor code */
}

/* attribute jsdIScriptHook scriptHook; */
NS_IMETHODIMP _MYCLASS_::GetScriptHook(jsdIScriptHook * *aScriptHook)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetScriptHook(jsdIScriptHook * aScriptHook)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute jsdIExecutionHook breakpointHook; */
NS_IMETHODIMP _MYCLASS_::GetBreakpointHook(jsdIExecutionHook * *aBreakpointHook)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetBreakpointHook(jsdIExecutionHook * aBreakpointHook)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute jsdIExecutionHook debuggerHook; */
NS_IMETHODIMP _MYCLASS_::GetDebuggerHook(jsdIExecutionHook * *aDebuggerHook)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetDebuggerHook(jsdIExecutionHook * aDebuggerHook)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute jsdIExecutionHook errorHook; */
NS_IMETHODIMP _MYCLASS_::GetErrorHook(jsdIExecutionHook * *aErrorHook)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetErrorHook(jsdIExecutionHook * aErrorHook)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute jsdIExecutionHook interruptHook; */
NS_IMETHODIMP _MYCLASS_::GetInterruptHook(jsdIExecutionHook * *aInterruptHook)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetInterruptHook(jsdIExecutionHook * aInterruptHook)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute jsdIExecutionHook throwHook; */
NS_IMETHODIMP _MYCLASS_::GetThrowHook(jsdIExecutionHook * *aThrowHook)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetThrowHook(jsdIExecutionHook * aThrowHook)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute jsdICallHook topLevelHook; */
NS_IMETHODIMP _MYCLASS_::GetTopLevelHook(jsdICallHook * *aTopLevelHook)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetTopLevelHook(jsdICallHook * aTopLevelHook)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute jsdICallHook functionHook; */
NS_IMETHODIMP _MYCLASS_::GetFunctionHook(jsdICallHook * *aFunctionHook)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetFunctionHook(jsdICallHook * aFunctionHook)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute boolean initAtStartup; */
NS_IMETHODIMP _MYCLASS_::GetInitAtStartup(PRBool *aInitAtStartup)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetInitAtStartup(PRBool aInitAtStartup)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute boolean isOn; */
NS_IMETHODIMP _MYCLASS_::GetIsOn(PRBool *aIsOn)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void on (); */
NS_IMETHODIMP _MYCLASS_::On()
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* [noscript] void onForRuntime (in JSRuntime rt); */
NS_IMETHODIMP _MYCLASS_::OnForRuntime(JSRuntime * rt)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void off (); */
NS_IMETHODIMP _MYCLASS_::Off()
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* unsigned long pause (); */
NS_IMETHODIMP _MYCLASS_::Pause(PRUint32 *_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* unsigned long unPause (); */
NS_IMETHODIMP _MYCLASS_::UnPause(PRUint32 *_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void GC (); */
NS_IMETHODIMP _MYCLASS_::GC()
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void insertFilter (in jsdIFilter filter, in jsdIFilter after); */
NS_IMETHODIMP _MYCLASS_::InsertFilter(jsdIFilter *filter, jsdIFilter *after)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void appendFilter (in jsdIFilter filter); */
NS_IMETHODIMP _MYCLASS_::AppendFilter(jsdIFilter *filter)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void removeFilter (in jsdIFilter filter); */
NS_IMETHODIMP _MYCLASS_::RemoveFilter(jsdIFilter *filter)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void swapFilters (in jsdIFilter filter_a, in jsdIFilter filter_b); */
NS_IMETHODIMP _MYCLASS_::SwapFilters(jsdIFilter *filter_a, jsdIFilter *filter_b)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void enumerateFilters (in jsdIFilterEnumerator enumerator); */
NS_IMETHODIMP _MYCLASS_::EnumerateFilters(jsdIFilterEnumerator *enumerator)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void refreshFilters (); */
NS_IMETHODIMP _MYCLASS_::RefreshFilters()
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void clearFilters (); */
NS_IMETHODIMP _MYCLASS_::ClearFilters()
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void enumerateScripts (in jsdIScriptEnumerator enumerator); */
NS_IMETHODIMP _MYCLASS_::EnumerateScripts(jsdIScriptEnumerator *enumerator)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void clearAllBreakpoints (); */
NS_IMETHODIMP _MYCLASS_::ClearAllBreakpoints()
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* unsigned long enterNestedEventLoop (in jsdINestCallback callback); */
NS_IMETHODIMP _MYCLASS_::EnterNestedEventLoop(jsdINestCallback *callback, PRUint32 *_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* unsigned long exitNestedEventLoop (); */
NS_IMETHODIMP _MYCLASS_::ExitNestedEventLoop(PRUint32 *_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* End of implementation class template. */
#endif


/* starting interface:    jsdIFilter */
#define JSDIFILTER_IID_STR "05593438-1b83-4517-864f-3cea3d37a266"

#define JSDIFILTER_IID \
  {0x05593438, 0x1b83, 0x4517, \
    { 0x86, 0x4f, 0x3c, 0xea, 0x3d, 0x37, 0xa2, 0x66 }}

class NS_NO_VTABLE jsdIFilter : public nsISupports {
 public: 

  NS_DEFINE_STATIC_IID_ACCESSOR(JSDIFILTER_IID)

  /**
 * Object representing a pattern of global object and/or url the debugger should
 * ignore.  The debugger service itself will not modify properties of these
 * objects.
 */
/**
     * These two bytes of the flags attribute are reserved for interpretation
     * by the jsdService implementation.  You can do what you like with the
     * remaining flags.
     */
  enum { FLAG_RESERVED_MASK = 255U };

  /**
     * Filters without this flag set are ignored.
     */
  enum { FLAG_ENABLED = 1U };

  /**
     * Filters with this flag set are "pass" filters, they allow matching hooks
     * to continue.  Filters without this flag block matching hooks.
     */
  enum { FLAG_PASS = 2U };

  /**
     * FLAG_* values from above, OR'd together.
     */
  /* attribute unsigned long flags; */
  NS_IMETHOD GetFlags(PRUint32 *aFlags) = 0;
  NS_IMETHOD SetFlags(PRUint32 aFlags) = 0;

  /**
     * An nsISupports version of the global object to be filtered.  A null glob
     * matches all hooks.  This attribute must be QI'able to the
     * (non-scriptable) nsIScriptGlobalObject interface.
     *
     * The jsdIService caches this value internally, to if it changes you must
     * swap the filter with itself using jsdIService::swapFilters.
     */
  /* attribute nsISupports glob; */
  NS_IMETHOD GetGlob(nsISupports * *aGlob) = 0;
  NS_IMETHOD SetGlob(nsISupports * aGlob) = 0;

  /**
     * String representing the url pattern to be filtered.  Supports limited
     * glob matching, at the beginning and end of the pattern only.  For example,
     * "chrome://venkman*" filters all urls that start with chrome/venkman,
     * "*.cgi" filters all cgi's, and "http://myserver/utils.js" filters only
     * the utils.js file on "myserver".   A null urlPattern matches all urls.
     *
     * The jsdIService caches this value internally, to if it changes you must
     * swap the filter with itself using jsdIService::swapFilters.
     */
  /* attribute string urlPattern; */
  NS_IMETHOD GetUrlPattern(char * *aUrlPattern) = 0;
  NS_IMETHOD SetUrlPattern(const char * aUrlPattern) = 0;

  /**
     * Line number for the start of this filter.  Line numbers are one based.
     * Assigning a 0 to this attribute will tell the debugger to ignore the
     * entire file.
     */
  /* attribute unsigned long startLine; */
  NS_IMETHOD GetStartLine(PRUint32 *aStartLine) = 0;
  NS_IMETHOD SetStartLine(PRUint32 aStartLine) = 0;

  /**
     * Line number for the end of this filter.  Line numbers are one based.
     * Assigning a 0 to this attribute will tell the debugger to ignore from
     * |startLine| to the end of the file.
     */
  /* attribute unsigned long endLine; */
  NS_IMETHOD GetEndLine(PRUint32 *aEndLine) = 0;
  NS_IMETHOD SetEndLine(PRUint32 aEndLine) = 0;

};

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_JSDIFILTER \
  NS_IMETHOD GetFlags(PRUint32 *aFlags); \
  NS_IMETHOD SetFlags(PRUint32 aFlags); \
  NS_IMETHOD GetGlob(nsISupports * *aGlob); \
  NS_IMETHOD SetGlob(nsISupports * aGlob); \
  NS_IMETHOD GetUrlPattern(char * *aUrlPattern); \
  NS_IMETHOD SetUrlPattern(const char * aUrlPattern); \
  NS_IMETHOD GetStartLine(PRUint32 *aStartLine); \
  NS_IMETHOD SetStartLine(PRUint32 aStartLine); \
  NS_IMETHOD GetEndLine(PRUint32 *aEndLine); \
  NS_IMETHOD SetEndLine(PRUint32 aEndLine); 

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_JSDIFILTER(_to) \
  NS_IMETHOD GetFlags(PRUint32 *aFlags) { return _to GetFlags(aFlags); } \
  NS_IMETHOD SetFlags(PRUint32 aFlags) { return _to SetFlags(aFlags); } \
  NS_IMETHOD GetGlob(nsISupports * *aGlob) { return _to GetGlob(aGlob); } \
  NS_IMETHOD SetGlob(nsISupports * aGlob) { return _to SetGlob(aGlob); } \
  NS_IMETHOD GetUrlPattern(char * *aUrlPattern) { return _to GetUrlPattern(aUrlPattern); } \
  NS_IMETHOD SetUrlPattern(const char * aUrlPattern) { return _to SetUrlPattern(aUrlPattern); } \
  NS_IMETHOD GetStartLine(PRUint32 *aStartLine) { return _to GetStartLine(aStartLine); } \
  NS_IMETHOD SetStartLine(PRUint32 aStartLine) { return _to SetStartLine(aStartLine); } \
  NS_IMETHOD GetEndLine(PRUint32 *aEndLine) { return _to GetEndLine(aEndLine); } \
  NS_IMETHOD SetEndLine(PRUint32 aEndLine) { return _to SetEndLine(aEndLine); } 

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_JSDIFILTER(_to) \
  NS_IMETHOD GetFlags(PRUint32 *aFlags) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetFlags(aFlags); } \
  NS_IMETHOD SetFlags(PRUint32 aFlags) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetFlags(aFlags); } \
  NS_IMETHOD GetGlob(nsISupports * *aGlob) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetGlob(aGlob); } \
  NS_IMETHOD SetGlob(nsISupports * aGlob) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetGlob(aGlob); } \
  NS_IMETHOD GetUrlPattern(char * *aUrlPattern) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetUrlPattern(aUrlPattern); } \
  NS_IMETHOD SetUrlPattern(const char * aUrlPattern) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetUrlPattern(aUrlPattern); } \
  NS_IMETHOD GetStartLine(PRUint32 *aStartLine) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetStartLine(aStartLine); } \
  NS_IMETHOD SetStartLine(PRUint32 aStartLine) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetStartLine(aStartLine); } \
  NS_IMETHOD GetEndLine(PRUint32 *aEndLine) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetEndLine(aEndLine); } \
  NS_IMETHOD SetEndLine(PRUint32 aEndLine) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetEndLine(aEndLine); } 

#if 0
/* Use the code below as a template for the implementation class for this interface. */

/* Header file */
class _MYCLASS_ : public jsdIFilter
{
public:
  NS_DECL_ISUPPORTS
  NS_DECL_JSDIFILTER

  _MYCLASS_();
  virtual ~_MYCLASS_();
  /* additional members */
};

/* Implementation file */
NS_IMPL_ISUPPORTS1(_MYCLASS_, jsdIFilter)

_MYCLASS_::_MYCLASS_()
{
  NS_INIT_ISUPPORTS();
  /* member initializers and constructor code */
}

_MYCLASS_::~_MYCLASS_()
{
  /* destructor code */
}

/* attribute unsigned long flags; */
NS_IMETHODIMP _MYCLASS_::GetFlags(PRUint32 *aFlags)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetFlags(PRUint32 aFlags)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute nsISupports glob; */
NS_IMETHODIMP _MYCLASS_::GetGlob(nsISupports * *aGlob)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetGlob(nsISupports * aGlob)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute string urlPattern; */
NS_IMETHODIMP _MYCLASS_::GetUrlPattern(char * *aUrlPattern)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetUrlPattern(const char * aUrlPattern)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute unsigned long startLine; */
NS_IMETHODIMP _MYCLASS_::GetStartLine(PRUint32 *aStartLine)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetStartLine(PRUint32 aStartLine)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute unsigned long endLine; */
NS_IMETHODIMP _MYCLASS_::GetEndLine(PRUint32 *aEndLine)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetEndLine(PRUint32 aEndLine)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* End of implementation class template. */
#endif


/* starting interface:    jsdINestCallback */
#define JSDINESTCALLBACK_IID_STR "88bea60f-9b5d-4b39-b08b-1c3a278782c6"

#define JSDINESTCALLBACK_IID \
  {0x88bea60f, 0x9b5d, 0x4b39, \
    { 0xb0, 0x8b, 0x1c, 0x3a, 0x27, 0x87, 0x82, 0xc6 }}

class NS_NO_VTABLE jsdINestCallback : public nsISupports {
 public: 

  NS_DEFINE_STATIC_IID_ACCESSOR(JSDINESTCALLBACK_IID)

  /**
 * Pass an instance of one of these to jsdIDebuggerService::enterNestedEventLoop.
 */
/**
     * This method will be called after pre-nesting work has completed, such
     * as pushing the js context and network event queue, but before the new
     * event loop starts.
     */
  /* void onNest (); */
  NS_IMETHOD OnNest(void) = 0;

};

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_JSDINESTCALLBACK \
  NS_IMETHOD OnNest(void); 

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_JSDINESTCALLBACK(_to) \
  NS_IMETHOD OnNest(void) { return _to OnNest(); } 

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_JSDINESTCALLBACK(_to) \
  NS_IMETHOD OnNest(void) { return !_to ? NS_ERROR_NULL_POINTER : _to->OnNest(); } 

#if 0
/* Use the code below as a template for the implementation class for this interface. */

/* Header file */
class _MYCLASS_ : public jsdINestCallback
{
public:
  NS_DECL_ISUPPORTS
  NS_DECL_JSDINESTCALLBACK

  _MYCLASS_();
  virtual ~_MYCLASS_();
  /* additional members */
};

/* Implementation file */
NS_IMPL_ISUPPORTS1(_MYCLASS_, jsdINestCallback)

_MYCLASS_::_MYCLASS_()
{
  NS_INIT_ISUPPORTS();
  /* member initializers and constructor code */
}

_MYCLASS_::~_MYCLASS_()
{
  /* destructor code */
}

/* void onNest (); */
NS_IMETHODIMP _MYCLASS_::OnNest()
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* End of implementation class template. */
#endif


/* starting interface:    jsdIFilterEnumerator */
#define JSDIFILTERENUMERATOR_IID_STR "54382875-ed12-4f90-9a63-1f0498d0a3f2"

#define JSDIFILTERENUMERATOR_IID \
  {0x54382875, 0xed12, 0x4f90, \
    { 0x9a, 0x63, 0x1f, 0x04, 0x98, 0xd0, 0xa3, 0xf2 }}

class NS_NO_VTABLE jsdIFilterEnumerator : public nsISupports {
 public: 

  NS_DEFINE_STATIC_IID_ACCESSOR(JSDIFILTERENUMERATOR_IID)

  /**
 * Pass an instance of one of these to jsdIDebuggerService::enumerateFilters.
 */
/**
     * The enumerateFilter method will be called once for every filter the
     * debugger knows about.
     */
  /* void enumerateFilter (in jsdIFilter filter); */
  NS_IMETHOD EnumerateFilter(jsdIFilter *filter) = 0;

};

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_JSDIFILTERENUMERATOR \
  NS_IMETHOD EnumerateFilter(jsdIFilter *filter); 

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_JSDIFILTERENUMERATOR(_to) \
  NS_IMETHOD EnumerateFilter(jsdIFilter *filter) { return _to EnumerateFilter(filter); } 

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_JSDIFILTERENUMERATOR(_to) \
  NS_IMETHOD EnumerateFilter(jsdIFilter *filter) { return !_to ? NS_ERROR_NULL_POINTER : _to->EnumerateFilter(filter); } 

#if 0
/* Use the code below as a template for the implementation class for this interface. */

/* Header file */
class _MYCLASS_ : public jsdIFilterEnumerator
{
public:
  NS_DECL_ISUPPORTS
  NS_DECL_JSDIFILTERENUMERATOR

  _MYCLASS_();
  virtual ~_MYCLASS_();
  /* additional members */
};

/* Implementation file */
NS_IMPL_ISUPPORTS1(_MYCLASS_, jsdIFilterEnumerator)

_MYCLASS_::_MYCLASS_()
{
  NS_INIT_ISUPPORTS();
  /* member initializers and constructor code */
}

_MYCLASS_::~_MYCLASS_()
{
  /* destructor code */
}

/* void enumerateFilter (in jsdIFilter filter); */
NS_IMETHODIMP _MYCLASS_::EnumerateFilter(jsdIFilter *filter)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* End of implementation class template. */
#endif


/* starting interface:    jsdIScriptEnumerator */
#define JSDISCRIPTENUMERATOR_IID_STR "4c2f706e-1dd2-11b2-9ebc-85a06e948830"

#define JSDISCRIPTENUMERATOR_IID \
  {0x4c2f706e, 0x1dd2, 0x11b2, \
    { 0x9e, 0xbc, 0x85, 0xa0, 0x6e, 0x94, 0x88, 0x30 }}

class NS_NO_VTABLE jsdIScriptEnumerator : public nsISupports {
 public: 

  NS_DEFINE_STATIC_IID_ACCESSOR(JSDISCRIPTENUMERATOR_IID)

  /**
 * Pass an instance of one of these to jsdIDebuggerService::enumerateScripts.
 */
/**
     * The enumerateScript method will be called once for every script the
     * debugger knows about.
     */
  /* void enumerateScript (in jsdIScript script); */
  NS_IMETHOD EnumerateScript(jsdIScript *script) = 0;

};

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_JSDISCRIPTENUMERATOR \
  NS_IMETHOD EnumerateScript(jsdIScript *script); 

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_JSDISCRIPTENUMERATOR(_to) \
  NS_IMETHOD EnumerateScript(jsdIScript *script) { return _to EnumerateScript(script); } 

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_JSDISCRIPTENUMERATOR(_to) \
  NS_IMETHOD EnumerateScript(jsdIScript *script) { return !_to ? NS_ERROR_NULL_POINTER : _to->EnumerateScript(script); } 

#if 0
/* Use the code below as a template for the implementation class for this interface. */

/* Header file */
class _MYCLASS_ : public jsdIScriptEnumerator
{
public:
  NS_DECL_ISUPPORTS
  NS_DECL_JSDISCRIPTENUMERATOR

  _MYCLASS_();
  virtual ~_MYCLASS_();
  /* additional members */
};

/* Implementation file */
NS_IMPL_ISUPPORTS1(_MYCLASS_, jsdIScriptEnumerator)

_MYCLASS_::_MYCLASS_()
{
  NS_INIT_ISUPPORTS();
  /* member initializers and constructor code */
}

_MYCLASS_::~_MYCLASS_()
{
  /* destructor code */
}

/* void enumerateScript (in jsdIScript script); */
NS_IMETHODIMP _MYCLASS_::EnumerateScript(jsdIScript *script)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* End of implementation class template. */
#endif


/* starting interface:    jsdIScriptHook */
#define JSDISCRIPTHOOK_IID_STR "ae89a7e2-1dd1-11b2-8c2f-af82086291a5"

#define JSDISCRIPTHOOK_IID \
  {0xae89a7e2, 0x1dd1, 0x11b2, \
    { 0x8c, 0x2f, 0xaf, 0x82, 0x08, 0x62, 0x91, 0xa5 }}

class NS_NO_VTABLE jsdIScriptHook : public nsISupports {
 public: 

  NS_DEFINE_STATIC_IID_ACCESSOR(JSDISCRIPTHOOK_IID)

  /**
 * Set jsdIDebuggerService::scriptHook to an instance of one of these.
 */
/**
     * Called when scripts are created.
     */
  /* void onScriptCreated (in jsdIScript script); */
  NS_IMETHOD OnScriptCreated(jsdIScript *script) = 0;

  /**
     * Called when the JavaScript engine destroys a script.  The jsdIScript
     * object passed in will already be invalidated.
     */
  /* void onScriptDestroyed (in jsdIScript script); */
  NS_IMETHOD OnScriptDestroyed(jsdIScript *script) = 0;

};

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_JSDISCRIPTHOOK \
  NS_IMETHOD OnScriptCreated(jsdIScript *script); \
  NS_IMETHOD OnScriptDestroyed(jsdIScript *script); 

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_JSDISCRIPTHOOK(_to) \
  NS_IMETHOD OnScriptCreated(jsdIScript *script) { return _to OnScriptCreated(script); } \
  NS_IMETHOD OnScriptDestroyed(jsdIScript *script) { return _to OnScriptDestroyed(script); } 

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_JSDISCRIPTHOOK(_to) \
  NS_IMETHOD OnScriptCreated(jsdIScript *script) { return !_to ? NS_ERROR_NULL_POINTER : _to->OnScriptCreated(script); } \
  NS_IMETHOD OnScriptDestroyed(jsdIScript *script) { return !_to ? NS_ERROR_NULL_POINTER : _to->OnScriptDestroyed(script); } 

#if 0
/* Use the code below as a template for the implementation class for this interface. */

/* Header file */
class _MYCLASS_ : public jsdIScriptHook
{
public:
  NS_DECL_ISUPPORTS
  NS_DECL_JSDISCRIPTHOOK

  _MYCLASS_();
  virtual ~_MYCLASS_();
  /* additional members */
};

/* Implementation file */
NS_IMPL_ISUPPORTS1(_MYCLASS_, jsdIScriptHook)

_MYCLASS_::_MYCLASS_()
{
  NS_INIT_ISUPPORTS();
  /* member initializers and constructor code */
}

_MYCLASS_::~_MYCLASS_()
{
  /* destructor code */
}

/* void onScriptCreated (in jsdIScript script); */
NS_IMETHODIMP _MYCLASS_::OnScriptCreated(jsdIScript *script)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void onScriptDestroyed (in jsdIScript script); */
NS_IMETHODIMP _MYCLASS_::OnScriptDestroyed(jsdIScript *script)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* End of implementation class template. */
#endif


/* starting interface:    jsdICallHook */
#define JSDICALLHOOK_IID_STR "f102caf6-1dd1-11b2-bd43-c1dbacb95a98"

#define JSDICALLHOOK_IID \
  {0xf102caf6, 0x1dd1, 0x11b2, \
    { 0xbd, 0x43, 0xc1, 0xdb, 0xac, 0xb9, 0x5a, 0x98 }}

class NS_NO_VTABLE jsdICallHook : public nsISupports {
 public: 

  NS_DEFINE_STATIC_IID_ACCESSOR(JSDICALLHOOK_IID)

  /**
 * Hook instances of this interface up to the
 * jsdIDebuggerService::functionHook and toplevelHook properties.
 */
  enum { TYPE_TOPLEVEL_START = 0U };

  enum { TYPE_TOPLEVEL_END = 1U };

  enum { TYPE_FUNCTION_CALL = 2U };

  enum { TYPE_FUNCTION_RETURN = 3U };

  /* void onCall (in jsdIStackFrame frame, in unsigned long type); */
  NS_IMETHOD OnCall(jsdIStackFrame *frame, PRUint32 type) = 0;

};

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_JSDICALLHOOK \
  NS_IMETHOD OnCall(jsdIStackFrame *frame, PRUint32 type); 

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_JSDICALLHOOK(_to) \
  NS_IMETHOD OnCall(jsdIStackFrame *frame, PRUint32 type) { return _to OnCall(frame, type); } 

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_JSDICALLHOOK(_to) \
  NS_IMETHOD OnCall(jsdIStackFrame *frame, PRUint32 type) { return !_to ? NS_ERROR_NULL_POINTER : _to->OnCall(frame, type); } 

#if 0
/* Use the code below as a template for the implementation class for this interface. */

/* Header file */
class _MYCLASS_ : public jsdICallHook
{
public:
  NS_DECL_ISUPPORTS
  NS_DECL_JSDICALLHOOK

  _MYCLASS_();
  virtual ~_MYCLASS_();
  /* additional members */
};

/* Implementation file */
NS_IMPL_ISUPPORTS1(_MYCLASS_, jsdICallHook)

_MYCLASS_::_MYCLASS_()
{
  NS_INIT_ISUPPORTS();
  /* member initializers and constructor code */
}

_MYCLASS_::~_MYCLASS_()
{
  /* destructor code */
}

/* void onCall (in jsdIStackFrame frame, in unsigned long type); */
NS_IMETHODIMP _MYCLASS_::OnCall(jsdIStackFrame *frame, PRUint32 type)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* End of implementation class template. */
#endif


/* starting interface:    jsdIExecutionHook */
#define JSDIEXECUTIONHOOK_IID_STR "9a7b6ad0-1dd1-11b2-a789-fcfae96356a2"

#define JSDIEXECUTIONHOOK_IID \
  {0x9a7b6ad0, 0x1dd1, 0x11b2, \
    { 0xa7, 0x89, 0xfc, 0xfa, 0xe9, 0x63, 0x56, 0xa2 }}

class NS_NO_VTABLE jsdIExecutionHook : public nsISupports {
 public: 

  NS_DEFINE_STATIC_IID_ACCESSOR(JSDIEXECUTIONHOOK_IID)

  /**
 * Hook instances of this interface up to the
 * jsdIDebuggerService::breakpointHook, debuggerHook, errorHook, interruptHook,
 * and throwHook properties.
 */
  enum { TYPE_INTERRUPTED = 0U };

  enum { TYPE_BREAKPOINT = 1U };

  enum { TYPE_DEBUG_REQUESTED = 2U };

  enum { TYPE_DEBUGGER_KEYWORD = 3U };

  enum { TYPE_THROW = 4U };

  /**
     * Indicates unrecoverable error processing the hook.  This will cause
     * the script being executed to be aborted without raising a JavaScript
     * exception.
     */
  enum { RETURN_HOOK_ERROR = 0U };

  /**
     * Continue processing normally.  This is the "do nothing special" return
     * value for all hook types *except* TYPE_THROW.  Returning RETURN_CONTINUE
     * from TYPE_THROW cause the exception to be ignored.  Return
     * RETURN_CONTINUE_THROW to continue exception processing from TYPE_THROW
     * hooks.
     */
  enum { RETURN_CONTINUE = 1U };

  enum { RETURN_ABORT = 2U };

  enum { RETURN_RET_WITH_VAL = 3U };

  enum { RETURN_THROW_WITH_VAL = 4U };

  enum { RETURN_CONTINUE_THROW = 5U };

  /**
     * @param frame A jsdIStackFrame object representing the bottom stack frame.
     * @param type  One of the jsdIExecutionHook::TYPE_ constants.
     * @param val   in  - Current exception (if any) when this method is called.
     *              out - If you return RETURN_THROW_WITH_VAL, value to be
     *                    thrown.
     *                    If you return RETURN_RET_WITH_VAL, value to return.
     *                    All other return values, not significant.
     * @retval      One of the jsdIExecutionHook::RETURN_* constants.
     */
  /* unsigned long onExecute (in jsdIStackFrame frame, in unsigned long type, inout jsdIValue val); */
  NS_IMETHOD OnExecute(jsdIStackFrame *frame, PRUint32 type, jsdIValue **val, PRUint32 *_retval) = 0;

};

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_JSDIEXECUTIONHOOK \
  NS_IMETHOD OnExecute(jsdIStackFrame *frame, PRUint32 type, jsdIValue **val, PRUint32 *_retval); 

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_JSDIEXECUTIONHOOK(_to) \
  NS_IMETHOD OnExecute(jsdIStackFrame *frame, PRUint32 type, jsdIValue **val, PRUint32 *_retval) { return _to OnExecute(frame, type, val, _retval); } 

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_JSDIEXECUTIONHOOK(_to) \
  NS_IMETHOD OnExecute(jsdIStackFrame *frame, PRUint32 type, jsdIValue **val, PRUint32 *_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->OnExecute(frame, type, val, _retval); } 

#if 0
/* Use the code below as a template for the implementation class for this interface. */

/* Header file */
class _MYCLASS_ : public jsdIExecutionHook
{
public:
  NS_DECL_ISUPPORTS
  NS_DECL_JSDIEXECUTIONHOOK

  _MYCLASS_();
  virtual ~_MYCLASS_();
  /* additional members */
};

/* Implementation file */
NS_IMPL_ISUPPORTS1(_MYCLASS_, jsdIExecutionHook)

_MYCLASS_::_MYCLASS_()
{
  NS_INIT_ISUPPORTS();
  /* member initializers and constructor code */
}

_MYCLASS_::~_MYCLASS_()
{
  /* destructor code */
}

/* unsigned long onExecute (in jsdIStackFrame frame, in unsigned long type, inout jsdIValue val); */
NS_IMETHODIMP _MYCLASS_::OnExecute(jsdIStackFrame *frame, PRUint32 type, jsdIValue **val, PRUint32 *_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* End of implementation class template. */
#endif


/* starting interface:    jsdIEphemeral */
#define JSDIEPHEMERAL_IID_STR "46f1e23e-1dd2-11b2-9ceb-8285f2e95e69"

#define JSDIEPHEMERAL_IID \
  {0x46f1e23e, 0x1dd2, 0x11b2, \
    { 0x9c, 0xeb, 0x82, 0x85, 0xf2, 0xe9, 0x5e, 0x69 }}

class NS_NO_VTABLE jsdIEphemeral : public nsISupports {
 public: 

  NS_DEFINE_STATIC_IID_ACCESSOR(JSDIEPHEMERAL_IID)

  /**
 * Objects which inherit this interface may go away, with (jsdIScript) or
 * without (all others) notification.  These objects are generally wrappers
 * around JSD structures that go away when you call jsdService::Off().
 */
/**
     * |true| if this object is still valid.  If not, many or all of the methods
     * and/or properties of the inheritor may no longer be callable.
     */
  /* readonly attribute boolean isValid; */
  NS_IMETHOD GetIsValid(PRBool *aIsValid) = 0;

  /**
     * Mark this instance as invalid.
     */
  /* [noscript] void invalidate (); */
  NS_IMETHOD Invalidate(void) = 0;

};

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_JSDIEPHEMERAL \
  NS_IMETHOD GetIsValid(PRBool *aIsValid); \
  NS_IMETHOD Invalidate(void); 

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_JSDIEPHEMERAL(_to) \
  NS_IMETHOD GetIsValid(PRBool *aIsValid) { return _to GetIsValid(aIsValid); } \
  NS_IMETHOD Invalidate(void) { return _to Invalidate(); } 

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_JSDIEPHEMERAL(_to) \
  NS_IMETHOD GetIsValid(PRBool *aIsValid) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetIsValid(aIsValid); } \
  NS_IMETHOD Invalidate(void) { return !_to ? NS_ERROR_NULL_POINTER : _to->Invalidate(); } 

#if 0
/* Use the code below as a template for the implementation class for this interface. */

/* Header file */
class _MYCLASS_ : public jsdIEphemeral
{
public:
  NS_DECL_ISUPPORTS
  NS_DECL_JSDIEPHEMERAL

  _MYCLASS_();
  virtual ~_MYCLASS_();
  /* additional members */
};

/* Implementation file */
NS_IMPL_ISUPPORTS1(_MYCLASS_, jsdIEphemeral)

_MYCLASS_::_MYCLASS_()
{
  NS_INIT_ISUPPORTS();
  /* member initializers and constructor code */
}

_MYCLASS_::~_MYCLASS_()
{
  /* destructor code */
}

/* readonly attribute boolean isValid; */
NS_IMETHODIMP _MYCLASS_::GetIsValid(PRBool *aIsValid)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* [noscript] void invalidate (); */
NS_IMETHODIMP _MYCLASS_::Invalidate()
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* End of implementation class template. */
#endif


/* starting interface:    jsdIPC */
#define JSDIPC_IID_STR "e7c8ea2c-1dd1-11b2-9242-f2768e04e92e"

#define JSDIPC_IID \
  {0xe7c8ea2c, 0x1dd1, 0x11b2, \
    { 0x92, 0x42, 0xf2, 0x76, 0x8e, 0x04, 0xe9, 0x2e }}

class NS_NO_VTABLE jsdIPC : public nsISupports {
 public: 

  NS_DEFINE_STATIC_IID_ACCESSOR(JSDIPC_IID)

  /**
 * XXX can't reflect the jsuword pc because it'll change sizes on 64 bit systems,
 * but we could represent all pcs as offsets, and store them in ulongs.  This
 * would allow us to get rid of jsdIPC, and simplify things in some places.  The
 * only tradeoff would be that scripts with more than 2^32 instructions would
 * have pc's we can't represent.  If you're script is that large, you need more
 * help than the debugger can provide.
 */
/** Internal use only. */
  /* [noscript] readonly attribute jsuword pc; */
  NS_IMETHOD GetPc(jsuword *aPc) = 0;

};

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_JSDIPC \
  NS_IMETHOD GetPc(jsuword *aPc); 

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_JSDIPC(_to) \
  NS_IMETHOD GetPc(jsuword *aPc) { return _to GetPc(aPc); } 

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_JSDIPC(_to) \
  NS_IMETHOD GetPc(jsuword *aPc) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetPc(aPc); } 

#if 0
/* Use the code below as a template for the implementation class for this interface. */

/* Header file */
class _MYCLASS_ : public jsdIPC
{
public:
  NS_DECL_ISUPPORTS
  NS_DECL_JSDIPC

  _MYCLASS_();
  virtual ~_MYCLASS_();
  /* additional members */
};

/* Implementation file */
NS_IMPL_ISUPPORTS1(_MYCLASS_, jsdIPC)

_MYCLASS_::_MYCLASS_()
{
  NS_INIT_ISUPPORTS();
  /* member initializers and constructor code */
}

_MYCLASS_::~_MYCLASS_()
{
  /* destructor code */
}

/* [noscript] readonly attribute jsuword pc; */
NS_IMETHODIMP _MYCLASS_::GetPc(jsuword *aPc)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* End of implementation class template. */
#endif


/* starting interface:    jsdIStackFrame */
#define JSDISTACKFRAME_IID_STR "b6d50784-1dd1-11b2-a932-882246c6fe45"

#define JSDISTACKFRAME_IID \
  {0xb6d50784, 0x1dd1, 0x11b2, \
    { 0xa9, 0x32, 0x88, 0x22, 0x46, 0xc6, 0xfe, 0x45 }}

class NS_NO_VTABLE jsdIStackFrame : public jsdIEphemeral {
 public: 

  NS_DEFINE_STATIC_IID_ACCESSOR(JSDISTACKFRAME_IID)

  /**
 * Stack frame objects.  These are only valid inside the jsdIExecutionHook which
 * gave it to you.  After you return from that handler the bottom frame, and any
 * frame you found attached through it, are invalidated via the jsdIEphemeral
 * interface.  Once a jsdIStackFrame has been invalidated all method and
 * property accesses will throw a NS_ERROR_NOT_AVAILABLE exception.
 */
/** Internal use only. */
  /* [noscript] readonly attribute JSDContext JSDContext; */
  NS_IMETHOD GetJSDContext(JSDContext * *aJSDContext) = 0;

  /** Internal use only. */
  /* [noscript] readonly attribute JSDThreadState JSDThreadState; */
  NS_IMETHOD GetJSDThreadState(JSDThreadState * *aJSDThreadState) = 0;

  /** Internal use only. */
  /* [noscript] readonly attribute JSDStackFrameInfo JSDStackFrameInfo; */
  NS_IMETHOD GetJSDStackFrameInfo(JSDStackFrameInfo * *aJSDStackFrameInfo) = 0;

  /**
     * Link to the caller's stack frame.
     */
  /* readonly attribute jsdIStackFrame callingFrame; */
  NS_IMETHOD GetCallingFrame(jsdIStackFrame * *aCallingFrame) = 0;

  /**
     * Script running in this stack frame.
     */
  /* readonly attribute jsdIScript script; */
  NS_IMETHOD GetScript(jsdIScript * *aScript) = 0;

  /**
     * Current program counter in this stack frame.
     */
  /* readonly attribute jsdIPC pc; */
  NS_IMETHOD GetPc(jsdIPC * *aPc) = 0;

  /**
     * Current line number (using the script's pc to line map.)
     */
  /* readonly attribute unsigned long line; */
  NS_IMETHOD GetLine(PRUint32 *aLine) = 0;

  /**
     * Function object running in this stack frame.
     */
  /* readonly attribute jsdIValue callee; */
  NS_IMETHOD GetCallee(jsdIValue * *aCallee) = 0;

  /**
     * Top object in the scope chain.
     */
  /* readonly attribute jsdIValue scope; */
  NS_IMETHOD GetScope(jsdIValue * *aScope) = 0;

  /**
     * |this| object for this stack frame.
     */
  /* readonly attribute jsdIValue thisValue; */
  NS_IMETHOD GetThisValue(jsdIValue * *aThisValue) = 0;

  /**
     * Evaluate arbitrary JavaScript in this stack frame.
     * @param bytes    Script to be evaluated.
     * @param fileName Filename to compile this script under.  This is the
     *                 filename you'll see in error messages, etc.
     * @param line     Starting line number for this script.  One based.
     * @retval         Result of evaluating the script.
     */
  /* jsdIValue eval (in AString bytes, in string fileName, in unsigned long line); */
  NS_IMETHOD Eval(const nsAString & bytes, const char *fileName, PRUint32 line, jsdIValue **_retval) = 0;

};

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_JSDISTACKFRAME \
  NS_IMETHOD GetJSDContext(JSDContext * *aJSDContext); \
  NS_IMETHOD GetJSDThreadState(JSDThreadState * *aJSDThreadState); \
  NS_IMETHOD GetJSDStackFrameInfo(JSDStackFrameInfo * *aJSDStackFrameInfo); \
  NS_IMETHOD GetCallingFrame(jsdIStackFrame * *aCallingFrame); \
  NS_IMETHOD GetScript(jsdIScript * *aScript); \
  NS_IMETHOD GetPc(jsdIPC * *aPc); \
  NS_IMETHOD GetLine(PRUint32 *aLine); \
  NS_IMETHOD GetCallee(jsdIValue * *aCallee); \
  NS_IMETHOD GetScope(jsdIValue * *aScope); \
  NS_IMETHOD GetThisValue(jsdIValue * *aThisValue); \
  NS_IMETHOD Eval(const nsAString & bytes, const char *fileName, PRUint32 line, jsdIValue **_retval); 

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_JSDISTACKFRAME(_to) \
  NS_IMETHOD GetJSDContext(JSDContext * *aJSDContext) { return _to GetJSDContext(aJSDContext); } \
  NS_IMETHOD GetJSDThreadState(JSDThreadState * *aJSDThreadState) { return _to GetJSDThreadState(aJSDThreadState); } \
  NS_IMETHOD GetJSDStackFrameInfo(JSDStackFrameInfo * *aJSDStackFrameInfo) { return _to GetJSDStackFrameInfo(aJSDStackFrameInfo); } \
  NS_IMETHOD GetCallingFrame(jsdIStackFrame * *aCallingFrame) { return _to GetCallingFrame(aCallingFrame); } \
  NS_IMETHOD GetScript(jsdIScript * *aScript) { return _to GetScript(aScript); } \
  NS_IMETHOD GetPc(jsdIPC * *aPc) { return _to GetPc(aPc); } \
  NS_IMETHOD GetLine(PRUint32 *aLine) { return _to GetLine(aLine); } \
  NS_IMETHOD GetCallee(jsdIValue * *aCallee) { return _to GetCallee(aCallee); } \
  NS_IMETHOD GetScope(jsdIValue * *aScope) { return _to GetScope(aScope); } \
  NS_IMETHOD GetThisValue(jsdIValue * *aThisValue) { return _to GetThisValue(aThisValue); } \
  NS_IMETHOD Eval(const nsAString & bytes, const char *fileName, PRUint32 line, jsdIValue **_retval) { return _to Eval(bytes, fileName, line, _retval); } 

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_JSDISTACKFRAME(_to) \
  NS_IMETHOD GetJSDContext(JSDContext * *aJSDContext) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetJSDContext(aJSDContext); } \
  NS_IMETHOD GetJSDThreadState(JSDThreadState * *aJSDThreadState) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetJSDThreadState(aJSDThreadState); } \
  NS_IMETHOD GetJSDStackFrameInfo(JSDStackFrameInfo * *aJSDStackFrameInfo) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetJSDStackFrameInfo(aJSDStackFrameInfo); } \
  NS_IMETHOD GetCallingFrame(jsdIStackFrame * *aCallingFrame) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetCallingFrame(aCallingFrame); } \
  NS_IMETHOD GetScript(jsdIScript * *aScript) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetScript(aScript); } \
  NS_IMETHOD GetPc(jsdIPC * *aPc) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetPc(aPc); } \
  NS_IMETHOD GetLine(PRUint32 *aLine) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetLine(aLine); } \
  NS_IMETHOD GetCallee(jsdIValue * *aCallee) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetCallee(aCallee); } \
  NS_IMETHOD GetScope(jsdIValue * *aScope) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetScope(aScope); } \
  NS_IMETHOD GetThisValue(jsdIValue * *aThisValue) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetThisValue(aThisValue); } \
  NS_IMETHOD Eval(const nsAString & bytes, const char *fileName, PRUint32 line, jsdIValue **_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->Eval(bytes, fileName, line, _retval); } 

#if 0
/* Use the code below as a template for the implementation class for this interface. */

/* Header file */
class _MYCLASS_ : public jsdIStackFrame
{
public:
  NS_DECL_ISUPPORTS
  NS_DECL_JSDISTACKFRAME

  _MYCLASS_();
  virtual ~_MYCLASS_();
  /* additional members */
};

/* Implementation file */
NS_IMPL_ISUPPORTS1(_MYCLASS_, jsdIStackFrame)

_MYCLASS_::_MYCLASS_()
{
  NS_INIT_ISUPPORTS();
  /* member initializers and constructor code */
}

_MYCLASS_::~_MYCLASS_()
{
  /* destructor code */
}

/* [noscript] readonly attribute JSDContext JSDContext; */
NS_IMETHODIMP _MYCLASS_::GetJSDContext(JSDContext * *aJSDContext)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* [noscript] readonly attribute JSDThreadState JSDThreadState; */
NS_IMETHODIMP _MYCLASS_::GetJSDThreadState(JSDThreadState * *aJSDThreadState)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* [noscript] readonly attribute JSDStackFrameInfo JSDStackFrameInfo; */
NS_IMETHODIMP _MYCLASS_::GetJSDStackFrameInfo(JSDStackFrameInfo * *aJSDStackFrameInfo)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute jsdIStackFrame callingFrame; */
NS_IMETHODIMP _MYCLASS_::GetCallingFrame(jsdIStackFrame * *aCallingFrame)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute jsdIScript script; */
NS_IMETHODIMP _MYCLASS_::GetScript(jsdIScript * *aScript)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute jsdIPC pc; */
NS_IMETHODIMP _MYCLASS_::GetPc(jsdIPC * *aPc)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute unsigned long line; */
NS_IMETHODIMP _MYCLASS_::GetLine(PRUint32 *aLine)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute jsdIValue callee; */
NS_IMETHODIMP _MYCLASS_::GetCallee(jsdIValue * *aCallee)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute jsdIValue scope; */
NS_IMETHODIMP _MYCLASS_::GetScope(jsdIValue * *aScope)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute jsdIValue thisValue; */
NS_IMETHODIMP _MYCLASS_::GetThisValue(jsdIValue * *aThisValue)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* jsdIValue eval (in AString bytes, in string fileName, in unsigned long line); */
NS_IMETHODIMP _MYCLASS_::Eval(const nsAString & bytes, const char *fileName, PRUint32 line, jsdIValue **_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* End of implementation class template. */
#endif


/* starting interface:    jsdIScript */
#define JSDISCRIPT_IID_STR "a38f65ca-1dd1-11b2-95d5-ff2947e9c920"

#define JSDISCRIPT_IID \
  {0xa38f65ca, 0x1dd1, 0x11b2, \
    { 0x95, 0xd5, 0xff, 0x29, 0x47, 0xe9, 0xc9, 0x20 }}

class NS_NO_VTABLE jsdIScript : public jsdIEphemeral {
 public: 

  NS_DEFINE_STATIC_IID_ACCESSOR(JSDISCRIPT_IID)

  /**
 * Script object.  In JavaScript engine terms, there's a single script for each
 * function, and one for the top level script.
 */
/** Internal use only. */
  /* [noscript] readonly attribute JSDContext JSDContext; */
  NS_IMETHOD GetJSDContext(JSDContext * *aJSDContext) = 0;

  /** Internal use only. */
  /* [noscript] readonly attribute JSDScript JSDScript; */
  NS_IMETHOD GetJSDScript(JSDScript * *aJSDScript) = 0;

  /**
     * Filename given for this script when it was compiled.
     * This data is copied from the underlying structure when the jsdIScript
     * instance is created and is therefore available even after the script is
     * invalidated.
     */
  /* readonly attribute string fileName; */
  NS_IMETHOD GetFileName(char * *aFileName) = 0;

  /**
     * Function name for this script.  "anonymous" for unnamed functions (or
     * a function actually named anonymous), empty for top level scripts.
     * This data is copied from the underlying structure when the jsdIScript
     * instance is created and is therefore available even after the script is
     * invalidated.
     */
  /* readonly attribute string functionName; */
  NS_IMETHOD GetFunctionName(char * *aFunctionName) = 0;

  /**
     * Line number in source file containing the first line of this script.
     * This data is copied from the underlying structure when the jsdIScript
     * instance is created and is therefore available even after the script is
     * invalidated.
     */
  /* readonly attribute unsigned long baseLineNumber; */
  NS_IMETHOD GetBaseLineNumber(PRUint32 *aBaseLineNumber) = 0;

  /**
     * Total number of lines in this script.
     * This data is copied from the underlying structure when the jsdIScript
     * instance is created and is therefore available even after the script is
     * invalidated.
     */
  /* readonly attribute unsigned long lineExtent; */
  NS_IMETHOD GetLineExtent(PRUint32 *aLineExtent) = 0;

  /**
     * Get the closest line number to a given PC.
     */
  /* unsigned long pcToLine (in jsdIPC pc); */
  NS_IMETHOD PcToLine(jsdIPC *pc, PRUint32 *_retval) = 0;

  /**
     * Get the first PC associated with a line.
     */
  /* jsdIPC lineToPc (in unsigned long line); */
  NS_IMETHOD LineToPc(PRUint32 line, jsdIPC **_retval) = 0;

  /**
     * Determine is a particular line is executable, like checking that
     * lineToPc == pcToLine, except in one call.
     */
  /* boolean isLineExecutable (in unsigned long line); */
  NS_IMETHOD IsLineExecutable(PRUint32 line, PRBool *_retval) = 0;

  /**
     * Set a breakpoint at a PC in this script.
     */
  /* void setBreakpoint (in jsdIPC pc); */
  NS_IMETHOD SetBreakpoint(jsdIPC *pc) = 0;

  /**
     * Clear a breakpoint at a PC in this script.
     */
  /* void clearBreakpoint (in jsdIPC pc); */
  NS_IMETHOD ClearBreakpoint(jsdIPC *pc) = 0;

  /**
     * Clear all breakpoints set in this script.
     */
  /* void clearAllBreakpoints (); */
  NS_IMETHOD ClearAllBreakpoints(void) = 0;

};

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_JSDISCRIPT \
  NS_IMETHOD GetJSDContext(JSDContext * *aJSDContext); \
  NS_IMETHOD GetJSDScript(JSDScript * *aJSDScript); \
  NS_IMETHOD GetFileName(char * *aFileName); \
  NS_IMETHOD GetFunctionName(char * *aFunctionName); \
  NS_IMETHOD GetBaseLineNumber(PRUint32 *aBaseLineNumber); \
  NS_IMETHOD GetLineExtent(PRUint32 *aLineExtent); \
  NS_IMETHOD PcToLine(jsdIPC *pc, PRUint32 *_retval); \
  NS_IMETHOD LineToPc(PRUint32 line, jsdIPC **_retval); \
  NS_IMETHOD IsLineExecutable(PRUint32 line, PRBool *_retval); \
  NS_IMETHOD SetBreakpoint(jsdIPC *pc); \
  NS_IMETHOD ClearBreakpoint(jsdIPC *pc); \
  NS_IMETHOD ClearAllBreakpoints(void); 

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_JSDISCRIPT(_to) \
  NS_IMETHOD GetJSDContext(JSDContext * *aJSDContext) { return _to GetJSDContext(aJSDContext); } \
  NS_IMETHOD GetJSDScript(JSDScript * *aJSDScript) { return _to GetJSDScript(aJSDScript); } \
  NS_IMETHOD GetFileName(char * *aFileName) { return _to GetFileName(aFileName); } \
  NS_IMETHOD GetFunctionName(char * *aFunctionName) { return _to GetFunctionName(aFunctionName); } \
  NS_IMETHOD GetBaseLineNumber(PRUint32 *aBaseLineNumber) { return _to GetBaseLineNumber(aBaseLineNumber); } \
  NS_IMETHOD GetLineExtent(PRUint32 *aLineExtent) { return _to GetLineExtent(aLineExtent); } \
  NS_IMETHOD PcToLine(jsdIPC *pc, PRUint32 *_retval) { return _to PcToLine(pc, _retval); } \
  NS_IMETHOD LineToPc(PRUint32 line, jsdIPC **_retval) { return _to LineToPc(line, _retval); } \
  NS_IMETHOD IsLineExecutable(PRUint32 line, PRBool *_retval) { return _to IsLineExecutable(line, _retval); } \
  NS_IMETHOD SetBreakpoint(jsdIPC *pc) { return _to SetBreakpoint(pc); } \
  NS_IMETHOD ClearBreakpoint(jsdIPC *pc) { return _to ClearBreakpoint(pc); } \
  NS_IMETHOD ClearAllBreakpoints(void) { return _to ClearAllBreakpoints(); } 

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_JSDISCRIPT(_to) \
  NS_IMETHOD GetJSDContext(JSDContext * *aJSDContext) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetJSDContext(aJSDContext); } \
  NS_IMETHOD GetJSDScript(JSDScript * *aJSDScript) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetJSDScript(aJSDScript); } \
  NS_IMETHOD GetFileName(char * *aFileName) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetFileName(aFileName); } \
  NS_IMETHOD GetFunctionName(char * *aFunctionName) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetFunctionName(aFunctionName); } \
  NS_IMETHOD GetBaseLineNumber(PRUint32 *aBaseLineNumber) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetBaseLineNumber(aBaseLineNumber); } \
  NS_IMETHOD GetLineExtent(PRUint32 *aLineExtent) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetLineExtent(aLineExtent); } \
  NS_IMETHOD PcToLine(jsdIPC *pc, PRUint32 *_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->PcToLine(pc, _retval); } \
  NS_IMETHOD LineToPc(PRUint32 line, jsdIPC **_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->LineToPc(line, _retval); } \
  NS_IMETHOD IsLineExecutable(PRUint32 line, PRBool *_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->IsLineExecutable(line, _retval); } \
  NS_IMETHOD SetBreakpoint(jsdIPC *pc) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetBreakpoint(pc); } \
  NS_IMETHOD ClearBreakpoint(jsdIPC *pc) { return !_to ? NS_ERROR_NULL_POINTER : _to->ClearBreakpoint(pc); } \
  NS_IMETHOD ClearAllBreakpoints(void) { return !_to ? NS_ERROR_NULL_POINTER : _to->ClearAllBreakpoints(); } 

#if 0
/* Use the code below as a template for the implementation class for this interface. */

/* Header file */
class _MYCLASS_ : public jsdIScript
{
public:
  NS_DECL_ISUPPORTS
  NS_DECL_JSDISCRIPT

  _MYCLASS_();
  virtual ~_MYCLASS_();
  /* additional members */
};

/* Implementation file */
NS_IMPL_ISUPPORTS1(_MYCLASS_, jsdIScript)

_MYCLASS_::_MYCLASS_()
{
  NS_INIT_ISUPPORTS();
  /* member initializers and constructor code */
}

_MYCLASS_::~_MYCLASS_()
{
  /* destructor code */
}

/* [noscript] readonly attribute JSDContext JSDContext; */
NS_IMETHODIMP _MYCLASS_::GetJSDContext(JSDContext * *aJSDContext)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* [noscript] readonly attribute JSDScript JSDScript; */
NS_IMETHODIMP _MYCLASS_::GetJSDScript(JSDScript * *aJSDScript)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute string fileName; */
NS_IMETHODIMP _MYCLASS_::GetFileName(char * *aFileName)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute string functionName; */
NS_IMETHODIMP _MYCLASS_::GetFunctionName(char * *aFunctionName)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute unsigned long baseLineNumber; */
NS_IMETHODIMP _MYCLASS_::GetBaseLineNumber(PRUint32 *aBaseLineNumber)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute unsigned long lineExtent; */
NS_IMETHODIMP _MYCLASS_::GetLineExtent(PRUint32 *aLineExtent)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* unsigned long pcToLine (in jsdIPC pc); */
NS_IMETHODIMP _MYCLASS_::PcToLine(jsdIPC *pc, PRUint32 *_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* jsdIPC lineToPc (in unsigned long line); */
NS_IMETHODIMP _MYCLASS_::LineToPc(PRUint32 line, jsdIPC **_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* boolean isLineExecutable (in unsigned long line); */
NS_IMETHODIMP _MYCLASS_::IsLineExecutable(PRUint32 line, PRBool *_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void setBreakpoint (in jsdIPC pc); */
NS_IMETHODIMP _MYCLASS_::SetBreakpoint(jsdIPC *pc)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void clearBreakpoint (in jsdIPC pc); */
NS_IMETHODIMP _MYCLASS_::ClearBreakpoint(jsdIPC *pc)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void clearAllBreakpoints (); */
NS_IMETHODIMP _MYCLASS_::ClearAllBreakpoints()
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* End of implementation class template. */
#endif


/* starting interface:    jsdIValue */
#define JSDIVALUE_IID_STR "b7964304-1dd1-11b2-ba20-cf4205772e9d"

#define JSDIVALUE_IID \
  {0xb7964304, 0x1dd1, 0x11b2, \
    { 0xba, 0x20, 0xcf, 0x42, 0x05, 0x77, 0x2e, 0x9d }}

class NS_NO_VTABLE jsdIValue : public jsdIEphemeral {
 public: 

  NS_DEFINE_STATIC_IID_ACCESSOR(JSDIVALUE_IID)

  /**
 * Value objects.  Represents typeless JavaScript values (jsval in SpiderMonkey
 * terminology.)  These are valid until the debugger is turned off.  Holding a
 * jsdIValue adds a root for the underlying JavaScript value, so don't keep it
 * if you don't need to.
 */
/** Internal use only. */
  /* [noscript] readonly attribute JSDContext JSDContext; */
  NS_IMETHOD GetJSDContext(JSDContext * *aJSDContext) = 0;

  /** Internal use only. */
  /* [noscript] readonly attribute JSDValue JSDValue; */
  NS_IMETHOD GetJSDValue(JSDValue * *aJSDValue) = 0;

  /**
     * |false| unless the value is a function declared in script.
     */
  /* readonly attribute boolean isNative; */
  NS_IMETHOD GetIsNative(PRBool *aIsNative) = 0;

  /**
     * |true| if the value represents a number, either double or integer.
     * |false| for all other values, including numbers assigned as strings
     * (eg. x = "1";)
     */
  /* readonly attribute boolean isNumber; */
  NS_IMETHOD GetIsNumber(PRBool *aIsNumber) = 0;

  /**
     * |true| if the value represents a JavaScript primitive number or string
     */
  /* readonly attribute boolean isPrimitive; */
  NS_IMETHOD GetIsPrimitive(PRBool *aIsPrimitive) = 0;

  /** Value is either |true| or |false|. */
  enum { TYPE_BOOLEAN = 0U };

  /** Value is a primitive number that is too large to fit in an integer. */
  enum { TYPE_DOUBLE = 1U };

  /** Value is a number that fits into an integer. */
  enum { TYPE_INT = 2U };

  /** Value is a function. */
  enum { TYPE_FUNCTION = 3U };

  /** Value is |null|. */
  enum { TYPE_NULL = 4U };

  /** Value is an object. */
  enum { TYPE_OBJECT = 5U };

  /** Value is a primitive string. */
  enum { TYPE_STRING = 6U };

  /** Value is void. */
  enum { TYPE_VOID = 7U };

  /**
     * One of the TYPE_* values above.
     */
  /* readonly attribute unsigned long jsType; */
  NS_IMETHOD GetJsType(PRUint32 *aJsType) = 0;

  /**
     * Prototype value if this value represents an object, null if the value is
     * not an object or the object has no prototype.
     */
  /* readonly attribute jsdIValue jsPrototype; */
  NS_IMETHOD GetJsPrototype(jsdIValue * *aJsPrototype) = 0;

  /**
     * Parent value if this value represents an object, null if the value is not
     * an object or the object has no parent.
     */
  /* readonly attribute jsdIValue jsParent; */
  NS_IMETHOD GetJsParent(jsdIValue * *aJsParent) = 0;

  /**
     * Class name if this value represents an object.  Empty string if the value
     * is not an object.
     */
  /* readonly attribute string jsClassName; */
  NS_IMETHOD GetJsClassName(char * *aJsClassName) = 0;

  /**
     * Constructor name if this value represents an object.  Empty string if the
     * value is not an object.
     */
  /* readonly attribute jsdIValue jsConstructor; */
  NS_IMETHOD GetJsConstructor(jsdIValue * *aJsConstructor) = 0;

  /**
     * Function name if this value represents a function.  Empty string if the
     * value is not a function.
     */
  /* readonly attribute string jsFunctionName; */
  NS_IMETHOD GetJsFunctionName(char * *aJsFunctionName) = 0;

  /**
     * Value if interpreted as a boolean.  Converts if necessary.
     */
  /* readonly attribute boolean booleanValue; */
  NS_IMETHOD GetBooleanValue(PRBool *aBooleanValue) = 0;

  /**
     * Value if interpreted as a double.  Converts if necessary.
     */
  /* readonly attribute double doubleValue; */
  NS_IMETHOD GetDoubleValue(double *aDoubleValue) = 0;

  /**
     * Value if interpreted as an integer.  Converts if necessary.
     */
  /* readonly attribute long intValue; */
  NS_IMETHOD GetIntValue(PRInt32 *aIntValue) = 0;

  /**
     * Value if interpreted as an object.
     */
  /* readonly attribute jsdIObject objectValue; */
  NS_IMETHOD GetObjectValue(jsdIObject * *aObjectValue) = 0;

  /**
     * Value if interpreted as a string.  Converts if necessary.
     */
  /* readonly attribute string stringValue; */
  NS_IMETHOD GetStringValue(char * *aStringValue) = 0;

  /**
     * Number of properties.  0 if the value is not an object, or the value is
     * an object but has no properties.
     */
  /* readonly attribute long propertyCount; */
  NS_IMETHOD GetPropertyCount(PRInt32 *aPropertyCount) = 0;

  /**
     * Retrieves all properties if this value represents an object.  If this
     * value is not an object a 0 element array is returned.
     * @param propArray Array of jsdIProperty values for this value.
     * @param length    Size of array.
     */
  /* void getProperties ([array, size_is (length)] out jsdIProperty propArray, out unsigned long length); */
  NS_IMETHOD GetProperties(jsdIProperty ***propArray, PRUint32 *length) = 0;

  /**
     * Retrieves a single property from the value.  Only valid if the value
     * represents an object.
     * @param name Name of the property to retrieve.
     * @retval     jsdIProperty for the requested property name or null if no
     *             property exists for the requested name.
     */
  /* jsdIProperty getProperty (in string name); */
  NS_IMETHOD GetProperty(const char *name, jsdIProperty **_retval) = 0;

  /**
     * jsdIValues are wrappers around JavaScript engine structures.  Much of the
     * data is copied instead of shared.  The refresh method is used to resync
     * the jsdIValue with the underlying structure.
     */
  /* void refresh (); */
  NS_IMETHOD Refresh(void) = 0;

};

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_JSDIVALUE \
  NS_IMETHOD GetJSDContext(JSDContext * *aJSDContext); \
  NS_IMETHOD GetJSDValue(JSDValue * *aJSDValue); \
  NS_IMETHOD GetIsNative(PRBool *aIsNative); \
  NS_IMETHOD GetIsNumber(PRBool *aIsNumber); \
  NS_IMETHOD GetIsPrimitive(PRBool *aIsPrimitive); \
  NS_IMETHOD GetJsType(PRUint32 *aJsType); \
  NS_IMETHOD GetJsPrototype(jsdIValue * *aJsPrototype); \
  NS_IMETHOD GetJsParent(jsdIValue * *aJsParent); \
  NS_IMETHOD GetJsClassName(char * *aJsClassName); \
  NS_IMETHOD GetJsConstructor(jsdIValue * *aJsConstructor); \
  NS_IMETHOD GetJsFunctionName(char * *aJsFunctionName); \
  NS_IMETHOD GetBooleanValue(PRBool *aBooleanValue); \
  NS_IMETHOD GetDoubleValue(double *aDoubleValue); \
  NS_IMETHOD GetIntValue(PRInt32 *aIntValue); \
  NS_IMETHOD GetObjectValue(jsdIObject * *aObjectValue); \
  NS_IMETHOD GetStringValue(char * *aStringValue); \
  NS_IMETHOD GetPropertyCount(PRInt32 *aPropertyCount); \
  NS_IMETHOD GetProperties(jsdIProperty ***propArray, PRUint32 *length); \
  NS_IMETHOD GetProperty(const char *name, jsdIProperty **_retval); \
  NS_IMETHOD Refresh(void); 

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_JSDIVALUE(_to) \
  NS_IMETHOD GetJSDContext(JSDContext * *aJSDContext) { return _to GetJSDContext(aJSDContext); } \
  NS_IMETHOD GetJSDValue(JSDValue * *aJSDValue) { return _to GetJSDValue(aJSDValue); } \
  NS_IMETHOD GetIsNative(PRBool *aIsNative) { return _to GetIsNative(aIsNative); } \
  NS_IMETHOD GetIsNumber(PRBool *aIsNumber) { return _to GetIsNumber(aIsNumber); } \
  NS_IMETHOD GetIsPrimitive(PRBool *aIsPrimitive) { return _to GetIsPrimitive(aIsPrimitive); } \
  NS_IMETHOD GetJsType(PRUint32 *aJsType) { return _to GetJsType(aJsType); } \
  NS_IMETHOD GetJsPrototype(jsdIValue * *aJsPrototype) { return _to GetJsPrototype(aJsPrototype); } \
  NS_IMETHOD GetJsParent(jsdIValue * *aJsParent) { return _to GetJsParent(aJsParent); } \
  NS_IMETHOD GetJsClassName(char * *aJsClassName) { return _to GetJsClassName(aJsClassName); } \
  NS_IMETHOD GetJsConstructor(jsdIValue * *aJsConstructor) { return _to GetJsConstructor(aJsConstructor); } \
  NS_IMETHOD GetJsFunctionName(char * *aJsFunctionName) { return _to GetJsFunctionName(aJsFunctionName); } \
  NS_IMETHOD GetBooleanValue(PRBool *aBooleanValue) { return _to GetBooleanValue(aBooleanValue); } \
  NS_IMETHOD GetDoubleValue(double *aDoubleValue) { return _to GetDoubleValue(aDoubleValue); } \
  NS_IMETHOD GetIntValue(PRInt32 *aIntValue) { return _to GetIntValue(aIntValue); } \
  NS_IMETHOD GetObjectValue(jsdIObject * *aObjectValue) { return _to GetObjectValue(aObjectValue); } \
  NS_IMETHOD GetStringValue(char * *aStringValue) { return _to GetStringValue(aStringValue); } \
  NS_IMETHOD GetPropertyCount(PRInt32 *aPropertyCount) { return _to GetPropertyCount(aPropertyCount); } \
  NS_IMETHOD GetProperties(jsdIProperty ***propArray, PRUint32 *length) { return _to GetProperties(propArray, length); } \
  NS_IMETHOD GetProperty(const char *name, jsdIProperty **_retval) { return _to GetProperty(name, _retval); } \
  NS_IMETHOD Refresh(void) { return _to Refresh(); } 

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_JSDIVALUE(_to) \
  NS_IMETHOD GetJSDContext(JSDContext * *aJSDContext) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetJSDContext(aJSDContext); } \
  NS_IMETHOD GetJSDValue(JSDValue * *aJSDValue) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetJSDValue(aJSDValue); } \
  NS_IMETHOD GetIsNative(PRBool *aIsNative) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetIsNative(aIsNative); } \
  NS_IMETHOD GetIsNumber(PRBool *aIsNumber) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetIsNumber(aIsNumber); } \
  NS_IMETHOD GetIsPrimitive(PRBool *aIsPrimitive) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetIsPrimitive(aIsPrimitive); } \
  NS_IMETHOD GetJsType(PRUint32 *aJsType) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetJsType(aJsType); } \
  NS_IMETHOD GetJsPrototype(jsdIValue * *aJsPrototype) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetJsPrototype(aJsPrototype); } \
  NS_IMETHOD GetJsParent(jsdIValue * *aJsParent) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetJsParent(aJsParent); } \
  NS_IMETHOD GetJsClassName(char * *aJsClassName) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetJsClassName(aJsClassName); } \
  NS_IMETHOD GetJsConstructor(jsdIValue * *aJsConstructor) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetJsConstructor(aJsConstructor); } \
  NS_IMETHOD GetJsFunctionName(char * *aJsFunctionName) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetJsFunctionName(aJsFunctionName); } \
  NS_IMETHOD GetBooleanValue(PRBool *aBooleanValue) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetBooleanValue(aBooleanValue); } \
  NS_IMETHOD GetDoubleValue(double *aDoubleValue) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetDoubleValue(aDoubleValue); } \
  NS_IMETHOD GetIntValue(PRInt32 *aIntValue) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetIntValue(aIntValue); } \
  NS_IMETHOD GetObjectValue(jsdIObject * *aObjectValue) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetObjectValue(aObjectValue); } \
  NS_IMETHOD GetStringValue(char * *aStringValue) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetStringValue(aStringValue); } \
  NS_IMETHOD GetPropertyCount(PRInt32 *aPropertyCount) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetPropertyCount(aPropertyCount); } \
  NS_IMETHOD GetProperties(jsdIProperty ***propArray, PRUint32 *length) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetProperties(propArray, length); } \
  NS_IMETHOD GetProperty(const char *name, jsdIProperty **_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetProperty(name, _retval); } \
  NS_IMETHOD Refresh(void) { return !_to ? NS_ERROR_NULL_POINTER : _to->Refresh(); } 

#if 0
/* Use the code below as a template for the implementation class for this interface. */

/* Header file */
class _MYCLASS_ : public jsdIValue
{
public:
  NS_DECL_ISUPPORTS
  NS_DECL_JSDIVALUE

  _MYCLASS_();
  virtual ~_MYCLASS_();
  /* additional members */
};

/* Implementation file */
NS_IMPL_ISUPPORTS1(_MYCLASS_, jsdIValue)

_MYCLASS_::_MYCLASS_()
{
  NS_INIT_ISUPPORTS();
  /* member initializers and constructor code */
}

_MYCLASS_::~_MYCLASS_()
{
  /* destructor code */
}

/* [noscript] readonly attribute JSDContext JSDContext; */
NS_IMETHODIMP _MYCLASS_::GetJSDContext(JSDContext * *aJSDContext)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* [noscript] readonly attribute JSDValue JSDValue; */
NS_IMETHODIMP _MYCLASS_::GetJSDValue(JSDValue * *aJSDValue)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute boolean isNative; */
NS_IMETHODIMP _MYCLASS_::GetIsNative(PRBool *aIsNative)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute boolean isNumber; */
NS_IMETHODIMP _MYCLASS_::GetIsNumber(PRBool *aIsNumber)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute boolean isPrimitive; */
NS_IMETHODIMP _MYCLASS_::GetIsPrimitive(PRBool *aIsPrimitive)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute unsigned long jsType; */
NS_IMETHODIMP _MYCLASS_::GetJsType(PRUint32 *aJsType)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute jsdIValue jsPrototype; */
NS_IMETHODIMP _MYCLASS_::GetJsPrototype(jsdIValue * *aJsPrototype)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute jsdIValue jsParent; */
NS_IMETHODIMP _MYCLASS_::GetJsParent(jsdIValue * *aJsParent)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute string jsClassName; */
NS_IMETHODIMP _MYCLASS_::GetJsClassName(char * *aJsClassName)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute jsdIValue jsConstructor; */
NS_IMETHODIMP _MYCLASS_::GetJsConstructor(jsdIValue * *aJsConstructor)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute string jsFunctionName; */
NS_IMETHODIMP _MYCLASS_::GetJsFunctionName(char * *aJsFunctionName)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute boolean booleanValue; */
NS_IMETHODIMP _MYCLASS_::GetBooleanValue(PRBool *aBooleanValue)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute double doubleValue; */
NS_IMETHODIMP _MYCLASS_::GetDoubleValue(double *aDoubleValue)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute long intValue; */
NS_IMETHODIMP _MYCLASS_::GetIntValue(PRInt32 *aIntValue)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute jsdIObject objectValue; */
NS_IMETHODIMP _MYCLASS_::GetObjectValue(jsdIObject * *aObjectValue)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute string stringValue; */
NS_IMETHODIMP _MYCLASS_::GetStringValue(char * *aStringValue)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute long propertyCount; */
NS_IMETHODIMP _MYCLASS_::GetPropertyCount(PRInt32 *aPropertyCount)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void getProperties ([array, size_is (length)] out jsdIProperty propArray, out unsigned long length); */
NS_IMETHODIMP _MYCLASS_::GetProperties(jsdIProperty ***propArray, PRUint32 *length)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* jsdIProperty getProperty (in string name); */
NS_IMETHODIMP _MYCLASS_::GetProperty(const char *name, jsdIProperty **_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void refresh (); */
NS_IMETHODIMP _MYCLASS_::Refresh()
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* End of implementation class template. */
#endif


/* starting interface:    jsdIObject */
#define JSDIOBJECT_IID_STR "d500e8b8-1dd1-11b2-89a1-cdf55d91cbbd"

#define JSDIOBJECT_IID \
  {0xd500e8b8, 0x1dd1, 0x11b2, \
    { 0x89, 0xa1, 0xcd, 0xf5, 0x5d, 0x91, 0xcb, 0xbd }}

class NS_NO_VTABLE jsdIObject : public nsISupports {
 public: 

  NS_DEFINE_STATIC_IID_ACCESSOR(JSDIOBJECT_IID)

  /**
 * Properties specific to values which are also objects.
 * XXX We don't add roots for these yet, so make sure you hold on to the
 * jsdIValue from whence your jsdIObject instance came for at least as long as
 * you hold the jsdIObject.
 * XXX Maybe the jsClassName, jsConstructorName, and property related attribute/
 * functions from jsdIValue should move to this interface.  We could inherit from
 * jsdIValue or use interface flattening or something.
 */
/** Internal use only. */
  /* [noscript] readonly attribute JSDContext JSDContext; */
  NS_IMETHOD GetJSDContext(JSDContext * *aJSDContext) = 0;

  /** Internal use only. */
  /* [noscript] readonly attribute JSDObject JSDObject; */
  NS_IMETHOD GetJSDObject(JSDObject * *aJSDObject) = 0;

  /**
     * The URL (filename) that contains the script which caused this object
     * to be created.
     */
  /* readonly attribute string creatorURL; */
  NS_IMETHOD GetCreatorURL(char * *aCreatorURL) = 0;

  /**
     * Line number in the creatorURL where this object was created.
     */
  /* readonly attribute unsigned long creatorLine; */
  NS_IMETHOD GetCreatorLine(PRUint32 *aCreatorLine) = 0;

  /**
     * The URL (filename) that contains the script which defined the constructor
     * used to create this object.
     */
  /* readonly attribute string constructorURL; */
  NS_IMETHOD GetConstructorURL(char * *aConstructorURL) = 0;

  /**
     * Line number in the creatorURL where this object was created.
     */
  /* readonly attribute unsigned long constructorLine; */
  NS_IMETHOD GetConstructorLine(PRUint32 *aConstructorLine) = 0;

  /**
     * jsdIValue for this object.
     */
  /* readonly attribute jsdIValue value; */
  NS_IMETHOD GetValue(jsdIValue * *aValue) = 0;

};

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_JSDIOBJECT \
  NS_IMETHOD GetJSDContext(JSDContext * *aJSDContext); \
  NS_IMETHOD GetJSDObject(JSDObject * *aJSDObject); \
  NS_IMETHOD GetCreatorURL(char * *aCreatorURL); \
  NS_IMETHOD GetCreatorLine(PRUint32 *aCreatorLine); \
  NS_IMETHOD GetConstructorURL(char * *aConstructorURL); \
  NS_IMETHOD GetConstructorLine(PRUint32 *aConstructorLine); \
  NS_IMETHOD GetValue(jsdIValue * *aValue); 

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_JSDIOBJECT(_to) \
  NS_IMETHOD GetJSDContext(JSDContext * *aJSDContext) { return _to GetJSDContext(aJSDContext); } \
  NS_IMETHOD GetJSDObject(JSDObject * *aJSDObject) { return _to GetJSDObject(aJSDObject); } \
  NS_IMETHOD GetCreatorURL(char * *aCreatorURL) { return _to GetCreatorURL(aCreatorURL); } \
  NS_IMETHOD GetCreatorLine(PRUint32 *aCreatorLine) { return _to GetCreatorLine(aCreatorLine); } \
  NS_IMETHOD GetConstructorURL(char * *aConstructorURL) { return _to GetConstructorURL(aConstructorURL); } \
  NS_IMETHOD GetConstructorLine(PRUint32 *aConstructorLine) { return _to GetConstructorLine(aConstructorLine); } \
  NS_IMETHOD GetValue(jsdIValue * *aValue) { return _to GetValue(aValue); } 

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_JSDIOBJECT(_to) \
  NS_IMETHOD GetJSDContext(JSDContext * *aJSDContext) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetJSDContext(aJSDContext); } \
  NS_IMETHOD GetJSDObject(JSDObject * *aJSDObject) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetJSDObject(aJSDObject); } \
  NS_IMETHOD GetCreatorURL(char * *aCreatorURL) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetCreatorURL(aCreatorURL); } \
  NS_IMETHOD GetCreatorLine(PRUint32 *aCreatorLine) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetCreatorLine(aCreatorLine); } \
  NS_IMETHOD GetConstructorURL(char * *aConstructorURL) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetConstructorURL(aConstructorURL); } \
  NS_IMETHOD GetConstructorLine(PRUint32 *aConstructorLine) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetConstructorLine(aConstructorLine); } \
  NS_IMETHOD GetValue(jsdIValue * *aValue) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetValue(aValue); } 

#if 0
/* Use the code below as a template for the implementation class for this interface. */

/* Header file */
class _MYCLASS_ : public jsdIObject
{
public:
  NS_DECL_ISUPPORTS
  NS_DECL_JSDIOBJECT

  _MYCLASS_();
  virtual ~_MYCLASS_();
  /* additional members */
};

/* Implementation file */
NS_IMPL_ISUPPORTS1(_MYCLASS_, jsdIObject)

_MYCLASS_::_MYCLASS_()
{
  NS_INIT_ISUPPORTS();
  /* member initializers and constructor code */
}

_MYCLASS_::~_MYCLASS_()
{
  /* destructor code */
}

/* [noscript] readonly attribute JSDContext JSDContext; */
NS_IMETHODIMP _MYCLASS_::GetJSDContext(JSDContext * *aJSDContext)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* [noscript] readonly attribute JSDObject JSDObject; */
NS_IMETHODIMP _MYCLASS_::GetJSDObject(JSDObject * *aJSDObject)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute string creatorURL; */
NS_IMETHODIMP _MYCLASS_::GetCreatorURL(char * *aCreatorURL)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute unsigned long creatorLine; */
NS_IMETHODIMP _MYCLASS_::GetCreatorLine(PRUint32 *aCreatorLine)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute string constructorURL; */
NS_IMETHODIMP _MYCLASS_::GetConstructorURL(char * *aConstructorURL)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute unsigned long constructorLine; */
NS_IMETHODIMP _MYCLASS_::GetConstructorLine(PRUint32 *aConstructorLine)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute jsdIValue value; */
NS_IMETHODIMP _MYCLASS_::GetValue(jsdIValue * *aValue)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* End of implementation class template. */
#endif


/* starting interface:    jsdIProperty */
#define JSDIPROPERTY_IID_STR "b8816e56-1dd1-11b2-81dc-8ba99a833d9e"

#define JSDIPROPERTY_IID \
  {0xb8816e56, 0x1dd1, 0x11b2, \
    { 0x81, 0xdc, 0x8b, 0xa9, 0x9a, 0x83, 0x3d, 0x9e }}

class NS_NO_VTABLE jsdIProperty : public jsdIEphemeral {
 public: 

  NS_DEFINE_STATIC_IID_ACCESSOR(JSDIPROPERTY_IID)

  /**
 * Representation of a property of an object.  When an instance is invalid, all
 * method and property access will result in a NS_UNAVAILABLE error.
 */
/** Internal use only. */
  /* [noscript] readonly attribute JSDContext JSDContext; */
  NS_IMETHOD GetJSDContext(JSDContext * *aJSDContext) = 0;

  /** Internal use only. */
  /* [noscript] readonly attribute JSDProperty JSDProperty; */
  NS_IMETHOD GetJSDProperty(JSDProperty * *aJSDProperty) = 0;

  /** visible to for/in loop */
  enum { FLAG_ENUMERATE = 1U };

  /** assignment is error */
  enum { FLAG_READONLY = 2U };

  /** property cannot be deleted */
  enum { FLAG_PERMANENT = 4U };

  /** property has an alias id */
  enum { FLAG_ALIAS = 8U };

  /** argument to function */
  enum { FLAG_ARGUMENT = 16U };

  /** local variable in function */
  enum { FLAG_VARIABLE = 32U };

  /** found via explicit lookup */
  enum { FLAG_HINTED = 2048U };

  /** FLAG_* values OR'd together, representing the flags for this property. */
  /* readonly attribute unsigned long flags; */
  NS_IMETHOD GetFlags(PRUint32 *aFlags) = 0;

  /** jsdIValue representing the alias for this property. */
  /* readonly attribute jsdIValue alias; */
  NS_IMETHOD GetAlias(jsdIValue * *aAlias) = 0;

  /** name for this property. */
  /* readonly attribute jsdIValue name; */
  NS_IMETHOD GetName(jsdIValue * *aName) = 0;

  /** value of this property. */
  /* readonly attribute jsdIValue value; */
  NS_IMETHOD GetValue(jsdIValue * *aValue) = 0;

  /** slot number if this property is a local variable or parameter. */
  /* readonly attribute unsigned long varArgSlot; */
  NS_IMETHOD GetVarArgSlot(PRUint32 *aVarArgSlot) = 0;

};

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_JSDIPROPERTY \
  NS_IMETHOD GetJSDContext(JSDContext * *aJSDContext); \
  NS_IMETHOD GetJSDProperty(JSDProperty * *aJSDProperty); \
  NS_IMETHOD GetFlags(PRUint32 *aFlags); \
  NS_IMETHOD GetAlias(jsdIValue * *aAlias); \
  NS_IMETHOD GetName(jsdIValue * *aName); \
  NS_IMETHOD GetValue(jsdIValue * *aValue); \
  NS_IMETHOD GetVarArgSlot(PRUint32 *aVarArgSlot); 

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_JSDIPROPERTY(_to) \
  NS_IMETHOD GetJSDContext(JSDContext * *aJSDContext) { return _to GetJSDContext(aJSDContext); } \
  NS_IMETHOD GetJSDProperty(JSDProperty * *aJSDProperty) { return _to GetJSDProperty(aJSDProperty); } \
  NS_IMETHOD GetFlags(PRUint32 *aFlags) { return _to GetFlags(aFlags); } \
  NS_IMETHOD GetAlias(jsdIValue * *aAlias) { return _to GetAlias(aAlias); } \
  NS_IMETHOD GetName(jsdIValue * *aName) { return _to GetName(aName); } \
  NS_IMETHOD GetValue(jsdIValue * *aValue) { return _to GetValue(aValue); } \
  NS_IMETHOD GetVarArgSlot(PRUint32 *aVarArgSlot) { return _to GetVarArgSlot(aVarArgSlot); } 

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_JSDIPROPERTY(_to) \
  NS_IMETHOD GetJSDContext(JSDContext * *aJSDContext) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetJSDContext(aJSDContext); } \
  NS_IMETHOD GetJSDProperty(JSDProperty * *aJSDProperty) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetJSDProperty(aJSDProperty); } \
  NS_IMETHOD GetFlags(PRUint32 *aFlags) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetFlags(aFlags); } \
  NS_IMETHOD GetAlias(jsdIValue * *aAlias) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetAlias(aAlias); } \
  NS_IMETHOD GetName(jsdIValue * *aName) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetName(aName); } \
  NS_IMETHOD GetValue(jsdIValue * *aValue) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetValue(aValue); } \
  NS_IMETHOD GetVarArgSlot(PRUint32 *aVarArgSlot) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetVarArgSlot(aVarArgSlot); } 

#if 0
/* Use the code below as a template for the implementation class for this interface. */

/* Header file */
class _MYCLASS_ : public jsdIProperty
{
public:
  NS_DECL_ISUPPORTS
  NS_DECL_JSDIPROPERTY

  _MYCLASS_();
  virtual ~_MYCLASS_();
  /* additional members */
};

/* Implementation file */
NS_IMPL_ISUPPORTS1(_MYCLASS_, jsdIProperty)

_MYCLASS_::_MYCLASS_()
{
  NS_INIT_ISUPPORTS();
  /* member initializers and constructor code */
}

_MYCLASS_::~_MYCLASS_()
{
  /* destructor code */
}

/* [noscript] readonly attribute JSDContext JSDContext; */
NS_IMETHODIMP _MYCLASS_::GetJSDContext(JSDContext * *aJSDContext)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* [noscript] readonly attribute JSDProperty JSDProperty; */
NS_IMETHODIMP _MYCLASS_::GetJSDProperty(JSDProperty * *aJSDProperty)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute unsigned long flags; */
NS_IMETHODIMP _MYCLASS_::GetFlags(PRUint32 *aFlags)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute jsdIValue alias; */
NS_IMETHODIMP _MYCLASS_::GetAlias(jsdIValue * *aAlias)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute jsdIValue name; */
NS_IMETHODIMP _MYCLASS_::GetName(jsdIValue * *aName)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute jsdIValue value; */
NS_IMETHODIMP _MYCLASS_::GetValue(jsdIValue * *aValue)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute unsigned long varArgSlot; */
NS_IMETHODIMP _MYCLASS_::GetVarArgSlot(PRUint32 *aVarArgSlot)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* End of implementation class template. */
#endif


#endif /* __gen_jsdIDebuggerService_h__ */
