jakarta-bsf-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Sanjiva Weerawarana" <sanj...@watson.ibm.com>
Subject Re: [GUMP] Build Failure - jakarta-bsf
Date Sun, 09 Mar 2003 23:27:37 GMT
Hi Igor,

I was looking thru the diff to see what the changes were and you seem
to have changed some public functions to non-public. Was that
intentional?

Also, most of the changes are to the debug stuff that I'm not familiar
with. Can someone else eyeball it for correctness?

If no one volunteers I'll go ahead and commit as the darn thing doesn't
even compile now and Igor at least took the time to provide patches
to make it compilable.

Bye,

Sanjiva.

----- Original Message -----
From: "Igor Bukanov" <igor_ml@fastmail.fm>
To: "Bean Scripting Framework developers" <bsf-dev@jakarta.apache.org>
Sent: Friday, March 07, 2003 4:56 PM
Subject: Re: [GUMP] Build Failure - jakarta-bsf


> Here is a patch that at least fixes the compilation problem. I wonder is
> anybody interested in that?
>
> Regards, Igor Bukanov
>
> Stefan Bodewig wrote:
> > ----------------------------------------------------
> > This email is autogenerated from the output from:
> > <http://cvs.apache.org/builds/gump/2003-03-07/jakarta-bsf.html>
> > ----------------------------------------------------
> >
> > Buildfile: build.xml
> >
> > init:
> >
> > prepare:
> >     [mkdir] Created dir:
/home/rubys/jakarta/jakarta-bsf/src/bsf-2.3/build
> >
> > bsf_debug-compile:
> >      [echo] Target: bsf_debug - Compile ...
> >
> > init:
> >
> > prepare:
> >     [mkdir] Created dir:
/home/rubys/jakarta/jakarta-bsf/src/bsf-2.3/bsf_debug/build/lib
> >
> > compile:
> >     [javac] Compiling 40 source files to
/home/rubys/jakarta/jakarta-bsf/src/bsf-2.3/bsf_debug/build/classes
> >       [jar] Building jar:
/home/rubys/jakarta/jakarta-bsf/src/bsf-2.3/bsf_debug/build/lib/bsf_debug.ja
r
> >
> > bsf-compile:
> >      [echo] Target: bsf - Compile ...
> >
> > init:
> >
> > prepare:
> >
> > checkDependencies:
> >
> > checkJacl:
> >      [echo] Warning: Jacl dependencies were not resolved.
> >
> > checkJPython:
> >      [echo] Warning: JPython dependencies were not resolved.
> >
> > checkJython:
> >
> > checkNetRexx:
> >      [echo] Warning: NetRexx dependencies were not resolved.
> >
> > checkRhino:
> >
> > checkXalan:
> >
> > compile:
> >      [copy] Copying 1 file to
/home/rubys/jakarta/jakarta-bsf/src/bsf-2.3/bsf/build/classes
> >     [javac] Compiling 66 source files to
/home/rubys/jakarta/jakarta-bsf/src/bsf-2.3/bsf/build/classes
> >     [javac]
/home/rubys/jakarta/jakarta-bsf/src/bsf-2.3/bsf/src/org/apache/bsf/engines/j
avascript/RhinoContextProxy.java:79: cannot resolve symbol
> >     [javac] symbol  : class DebuggableEngine
> >     [javac] location: class
org.apache.bsf.engines.javascript.RhinoContextProxy
> >     [javac]     DebuggableEngine m_engine;
> >     [javac]     ^
> >     [javac]
/home/rubys/jakarta/jakarta-bsf/src/bsf-2.3/bsf/src/org/apache/bsf/engines/j
avascript/JsEngineStub.java:65: cannot resolve symbol
> >     [javac] symbol  : class DebuggableEngine
> >     [javac] location: package debug
> >     [javac] import org.mozilla.javascript.debug.DebuggableEngine;
> >     [javac]                                     ^
> >     [javac]
/home/rubys/jakarta/jakarta-bsf/src/bsf-2.3/bsf/src/org/apache/bsf/engines/j
avascript/CompilationUnit.java:124: cannot resolve symbol
> >     [javac] symbol  : method getScriptable ()
> >     [javac] location: interface
org.mozilla.javascript.debug.DebuggableScript
> >     [javac] Scriptable scriptable = dbgScript.getScriptable();
> >     [javac]                                                  ^
> >     [javac]
/home/rubys/jakarta/jakarta-bsf/src/bsf-2.3/bsf/src/org/apache/bsf/engines/j
avascript/CompilationUnit.java:157: cannot resolve symbol
> >     [javac] symbol  : method placeBreakpoint (int)
> >     [javac] location: interface
org.mozilla.javascript.debug.DebuggableScript
> >     [javac] m_dbgScript.placeBreakpoint(lineno);
> >     [javac]                                    ^
> >     [javac]
/home/rubys/jakarta/jakarta-bsf/src/bsf-2.3/bsf/src/org/apache/bsf/engines/j
avascript/CompilationUnit.java:167: cannot resolve symbol
> >     [javac] symbol  : method removeBreakpoint (int)
> >     [javac] location: interface
org.mozilla.javascript.debug.DebuggableScript
> >     [javac] m_dbgScript.removeBreakpoint(lineno);
> >     [javac]                                    ^
> >     [javac]
/home/rubys/jakarta/jakarta-bsf/src/bsf-2.3/bsf/src/org/apache/bsf/engines/j
avascript/RhinoEngineDebugger.java:77:
org.apache.bsf.engines.javascript.RhinoEngineDebugger should be declared
abstract; it does not define
handleCompilationDone(org.mozilla.javascript.Context,org.mozilla.javascript.
debug.DebuggableScript,java.lang.String) in
org.apache.bsf.engines.javascript.RhinoEngineDebugger
> >     [javac] public class RhinoEngineDebugger implements Debugger {
> >     [javac]        ^
> >     [javac]
/home/rubys/jakarta/jakarta-bsf/src/bsf-2.3/bsf/src/org/apache/bsf/engines/j
avascript/RhinoEngineDebugger.java:476: org.mozilla.javascript.NativeError
is not public in org.mozilla.javascript; cannot be accessed from outside
package
> >     [javac]         NativeError error;
> >     [javac]         ^
> >     [javac]
/home/rubys/jakarta/jakarta-bsf/src/bsf-2.3/bsf/src/org/apache/bsf/engines/j
avascript/RhinoEngineDebugger.java:498: org.mozilla.javascript.NativeError
is not public in org.mozilla.javascript; cannot be accessed from outside
package
> >     [javac]                 error = (NativeError)exceptionThrown;
> >     [javac]                          ^
> >     [javac]
/home/rubys/jakarta/jakarta-bsf/src/bsf-2.3/bsf/src/org/apache/bsf/engines/j
avascript/RhinoEngineDebugger.java:499: getName() is not public in
org.mozilla.javascript.NativeError; cannot be accessed from outside package
> >     [javac]                 msg = error.getName() + ": " +
error.getMessage();
> >     [javac]                            ^
> >     [javac]
/home/rubys/jakarta/jakarta-bsf/src/bsf-2.3/bsf/src/org/apache/bsf/engines/j
avascript/RhinoEngineDebugger.java:499: getMessage() is not public in
org.mozilla.javascript.NativeError; cannot be accessed from outside package
> >     [javac]                 msg = error.getName() + ": " +
error.getMessage();
> >     [javac]                                                     ^
> >     [javac]
/home/rubys/jakarta/jakarta-bsf/src/bsf-2.3/bsf/src/org/apache/bsf/engines/j
avascript/RhinoContextProxy.java:93: cannot resolve symbol
> >     [javac] symbol  : method getDebuggableEngine ()
> >     [javac] location: class org.mozilla.javascript.Context
> >     [javac]         m_engine = cx.getDebuggableEngine();
> >     [javac]                      ^
> >     [javac]
/home/rubys/jakarta/jakarta-bsf/src/bsf-2.3/bsf/src/org/apache/bsf/engines/j
avascript/RhinoContextProxy.java:122: cannot resolve symbol
> >     [javac] symbol  : method getLineNumber ()
> >     [javac] location: interface org.mozilla.javascript.debug.DebugFrame
> >     [javac]         return frame.getLineNumber();
> >     [javac]                     ^
> >     [javac]
/home/rubys/jakarta/jakarta-bsf/src/bsf-2.3/bsf/src/org/apache/bsf/engines/j
avascript/RhinoContextProxy.java:132: cannot resolve symbol
> >     [javac] symbol  : method getSourceName ()
> >     [javac] location: interface org.mozilla.javascript.debug.DebugFrame
> >     [javac]         return frame.getSourceName();
> >     [javac]                     ^
> >     [javac]
/home/rubys/jakarta/jakarta-bsf/src/bsf-2.3/bsf/src/org/apache/bsf/engines/j
avascript/JsContextStub.java:103: cannot resolve symbol
> >     [javac] symbol  : method getVariableObject ()
> >     [javac] location: interface org.mozilla.javascript.debug.DebugFrame
> >     [javac] Scriptable obj = m_frame.getVariableObject();
> >     [javac]                                                 ^
> >     [javac]
/home/rubys/jakarta/jakarta-bsf/src/bsf-2.3/bsf/src/org/apache/bsf/engines/j
avascript/JsContextStub.java:152: cannot resolve symbol
> >     [javac] symbol  : method getLineNumber ()
> >     [javac] location: interface org.mozilla.javascript.debug.DebugFrame
> >     [javac] return m_frame.getLineNumber();
> >     [javac]                                       ^
> >     [javac]
/home/rubys/jakarta/jakarta-bsf/src/bsf-2.3/bsf/src/org/apache/bsf/engines/j
avascript/JsContextStub.java:167: cannot resolve symbol
> >     [javac] symbol  : method getVariableObject ()
> >     [javac] location: interface org.mozilla.javascript.debug.DebugFrame
> >     [javac] Scriptable varobj = m_frame.getVariableObject();
> >     [javac]                                                    ^
> >     [javac]
/home/rubys/jakarta/jakarta-bsf/src/bsf-2.3/bsf/src/org/apache/bsf/engines/j
avascript/JsContextStub.java:183: cannot resolve symbol
> >     [javac] symbol  : method getSourceName ()
> >     [javac] location: interface org.mozilla.javascript.debug.DebugFrame
> >     [javac] return m_frame.getSourceName();
> >     [javac]                                       ^
> >     [javac]
/home/rubys/jakarta/jakarta-bsf/src/bsf-2.3/bsf/src/org/apache/bsf/engines/j
avascript/JsContextStub.java:201: cannot resolve symbol
> >     [javac] symbol  : method getVariableObject ()
> >     [javac] location: interface org.mozilla.javascript.debug.DebugFrame
> >     [javac] Scriptable varobj = m_frame.getVariableObject();
> >     [javac]                                                    ^
> >     [javac]
/home/rubys/jakarta/jakarta-bsf/src/bsf-2.3/bsf/src/org/apache/bsf/engines/j
avascript/JsContextStub.java:261: cannot resolve symbol
> >     [javac] symbol  : method getVariableObject ()
> >     [javac] location: interface org.mozilla.javascript.debug.DebugFrame
> >     [javac] Scriptable obj = m_frame.getVariableObject();
> >     [javac]                                                 ^
> >     [javac]
/home/rubys/jakarta/jakarta-bsf/src/bsf-2.3/bsf/src/org/apache/bsf/engines/j
avascript/JavaScriptEngine.java:143: cannot resolve symbol
> >     [javac] symbol  : class DebuggableEngine
> >     [javac] location: class
org.apache.bsf.engines.javascript.JavaScriptEngine
> >     [javac]         DebuggableEngine engine;
> >     [javac]         ^
> >     [javac]
/home/rubys/jakarta/jakarta-bsf/src/bsf-2.3/bsf/src/org/apache/bsf/engines/j
avascript/JavaScriptEngine.java:163: cannot resolve symbol
> >     [javac] symbol  : method getDebuggableEngine ()
> >     [javac] location: class org.mozilla.javascript.Context
> >     [javac]                 engine = cx.getDebuggableEngine();
> >     [javac]                            ^
> >     [javac]
/home/rubys/jakarta/jakarta-bsf/src/bsf-2.3/bsf/src/org/apache/bsf/engines/j
avascript/JavaScriptEngine.java:178: cannot resolve symbol
> >     [javac] symbol  : method getDebuggableEngine ()
> >     [javac] location: class org.mozilla.javascript.Context
> >     [javac]                 engine = cx.getDebuggableEngine();
> >     [javac]                            ^
> >     [javac]
/home/rubys/jakarta/jakarta-bsf/src/bsf-2.3/bsf/src/org/apache/bsf/engines/j
avascript/JavaScriptEngine.java:219: cannot resolve symbol
> >     [javac] symbol  : class DebuggableEngine
> >     [javac] location: class
org.apache.bsf.engines.javascript.JavaScriptEngine
> >     [javac]         DebuggableEngine engine;
> >     [javac]         ^
> >     [javac]
/home/rubys/jakarta/jakarta-bsf/src/bsf-2.3/bsf/src/org/apache/bsf/engines/j
avascript/JavaScriptEngine.java:240: cannot resolve symbol
> >     [javac] symbol  : method getDebuggableEngine ()
> >     [javac] location: class org.mozilla.javascript.Context
> >     [javac]                 engine = cx.getDebuggableEngine();
> >     [javac]                            ^
> >     [javac]
/home/rubys/jakarta/jakarta-bsf/src/bsf-2.3/bsf/src/org/apache/bsf/engines/j
avascript/JavaScriptEngine.java:263: cannot resolve symbol
> >     [javac] symbol  : method getDebuggableEngine ()
> >     [javac] location: class org.mozilla.javascript.Context
> >     [javac]                 engine = cx.getDebuggableEngine();
> >     [javac]                            ^
> >     [javac] 25 errors
> >
> > BUILD FAILED
> > file:///home/rubys/jakarta/jakarta-bsf/src/bsf-2.3/bsf/build.xml:211:
Compile failed; see the compiler error output for details.
> >
> > Total time: 9 seconds
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: bsf-dev-unsubscribe@jakarta.apache.org
> > For additional commands, e-mail: bsf-dev-help@jakarta.apache.org
> >
> >
>
>
>


----------------------------------------------------------------------------
----


> Index: CompilationUnit.java
> ===================================================================
> RCS file:
/home/cvspublic/jakarta-bsf/src/bsf-2.3/bsf/src/org/apache/bsf/engines/javas
cript/CompilationUnit.java,v
> retrieving revision 1.2
> diff -u -r1.2 CompilationUnit.java
> --- CompilationUnit.java 7 Nov 2002 01:49:12 -0000 1.2
> +++ CompilationUnit.java 14 Feb 2003 22:05:46 -0000
> @@ -74,7 +74,7 @@
>   * of script is sliced into compilation units.
>   * For instance, the script text may contain a function
>   * declaration and an expression to eval. The compilation
> - * will result in two compilation units: the function and
> + * will result in two compilation units: the function and
>   * the expression. Each compilation unit will correspond
>   * to a range of the lines of the original script compiled.
>   * All line numbers are global to the document the compiled
> @@ -82,89 +82,95 @@
>   * It is on compilation units that breakpoints can be set
>   * or removed, more exactly on the DebuggableScript attached
>   * to them. See Rhino for more details.
> - *
> + *
>   * @author: Olivier Gruber.
> - */
> + */
>  public class CompilationUnit {
>
> - FnOrScript m_fnOrScript;
> - int m_firstLine;
> - int m_lineCount;
> - String m_fnName;
> - DebuggableScript m_dbgScript;
> - int m_validBrkptLines[];
> -
> - /**
> - * CompilationUnit constructor comment.
> - */
> - public CompilationUnit(FnOrScript fnOrScript, DebuggableScript
dbgScript) {
> -
> - int lastLine, lineno;
> -
> - m_fnOrScript = fnOrScript;
> - m_dbgScript = dbgScript;
> -
> - try {
> - m_validBrkptLines = dbgScript.getLineNumbers();
> - m_firstLine = 99999;
> - lastLine = 0;
> - for (int l = 0; l < m_validBrkptLines.length; l++) {
> - lineno = m_validBrkptLines[l];
> - if (m_firstLine > lineno)
> - m_firstLine = lineno;
> - if (lastLine < lineno)
> - lastLine = lineno;
> - }
> - m_lineCount = lastLine - m_firstLine + 1;
> - } catch (Throwable t) {
> - DebugLog.stderrPrintln("\nWarning: can't get valid line numbers for
breakpoints.", DebugLog.BSF_LOG_L2);
> - m_validBrkptLines = null;
> - }
> -
> - Scriptable scriptable = dbgScript.getScriptable();
> - if (scriptable instanceof NativeFunction) {
> - NativeFunction f = (NativeFunction) scriptable;
> - String name = f.getFunctionName();
> - if (name.length() > 0 && !name.equals("anonymous")) {
> - m_fnName = name;
> - }
> - }
> - }
> - //----------------------------------------------------------
> - boolean contains(int lineno) {
> - return (m_firstLine <= lineno && lineno < m_firstLine + m_lineCount);
> - }
> - /**
> - * Returns true if the compilation unit contains
> - * the breakpoint.
> - * Notice only breakpoint defined at a line number
> - * are supported here.
> - */
> - boolean contains(BreakPoint bp) {
> - try {
> - return contains(bp.getLineNo());
> - } catch (BSFException ex) {
> - return false;
> - }
> - }
> - /**
> - * Propagates (i.e. set) this breakpoint to the underlying Rhino
> - * engine if Rhino has provided us with the valid lines
> - * information. Otherwise, Rhino crashes with a NullPointerException.
> - */
> - void propagate(int lineno) {
> - if (m_validBrkptLines != null) {
> - m_dbgScript.placeBreakpoint(lineno);
> - }
> - }
> - /**
> - * Unpropagates (i.e. unset) this breakpoint to the underlying Rhino
> - * engine if Rhino has provided us with the valid lines
> - * information. Otherwise, Rhino crashes with a NullPointerException.
> - */
> - void unpropagate(int lineno) {
> - if (m_validBrkptLines != null) {
> - m_dbgScript.removeBreakpoint(lineno);
> - }
> - }
> +    FnOrScript m_fnOrScript;
> +    int m_firstLine;
> +    int m_lineCount;
> +    String m_fnName;
> +    DebuggableScript m_dbgScript;
> +    boolean[] m_breakpoints;
> +
> +    /**
> +     * CompilationUnit constructor comment.
> +     */
> +    public CompilationUnit(FnOrScript fnOrScript, DebuggableScript
dbgScript) {
> +
> +        m_fnOrScript = fnOrScript;
> +        m_dbgScript = dbgScript;
> +
> +        int[] lines = dbgScript.getLineNumbers();
> +        if (lines.length != 0) {
> +            int lastLine;
> +            m_firstLine = lines[0];
> +            lastLine = m_firstLine;
> +            for (int i = 1; i != lines.length; ++i) {
> +                int lineno = lines[i];
> +                if (m_firstLine > lineno) {
> +                    m_firstLine = lineno;
> +                } else if (lastLine < lineno) {
> +                    lastLine = lineno;
> +                }
> +            }
> +            m_lineCount = lastLine - m_firstLine + 1;
> +            m_breakpoints = new boolean[m_lineCount];
> +        }
> +
> +        String name = dbgScript.getFunctionName();
> +        if (name != null && name.length() != 0 &&
!name.equals("anonymous")) {
> +            m_fnName = name;
> +        }
> +    }
> +    //----------------------------------------------------------
> +    boolean contains(int lineno) {
> +        return (m_firstLine <= lineno && lineno < m_firstLine +
m_lineCount);
> +    }
> +    /**
> +     * Returns true if the compilation unit contains
> +     * the breakpoint.
> +     * Notice only breakpoint defined at a line number
> +     * are supported here.
> +     */
> +    boolean contains(BreakPoint bp) {
> +        try {
> +            return contains(bp.getLineNo());
> +        } catch (BSFException ex) {
> +            return false;
> +        }
> +    }
> +    /**
> +     * Set a breakpoint at the given line if Rhino has provided us with
the
> +     * valid lines information.
> +     */
> +    void propagate(int lineno) {
> +        if (m_breakpoints != null) {
> +            int i = lineno - m_firstLine;
> +            if (0 <= i && i < m_lineCount) {
> +                m_breakpoints[i] = true;
> +            }
> +        }
> +    }
> +    /**
> +     * Clear a breakpoint at the given line if Rhino has provided us with
the
> +     * valid lines information.
> +     */
> +    void unpropagate(int lineno) {
> +        if (m_breakpoints != null) {
> +            int i = lineno - m_firstLine;
> +            if (0 <= i && i < m_lineCount) {
> +                m_breakpoints[i] = false;
> +            }
> +        }
> +    }
> +
> +    boolean hasBreakpoint(int lineno) {
> +        if (m_breakpoints != null) {
> +            int i = lineno - m_firstLine;
> +            return 0 <= i && i < m_lineCount && m_breakpoints[i];
> +        }
> +        return false;
> +    }
>  }
> Index: FnOrScript.java
> ===================================================================
> RCS file:
/home/cvspublic/jakarta-bsf/src/bsf-2.3/bsf/src/org/apache/bsf/engines/javas
cript/FnOrScript.java,v
> retrieving revision 1.2
> diff -u -r1.2 FnOrScript.java
> --- FnOrScript.java 7 Nov 2002 01:49:12 -0000 1.2
> +++ FnOrScript.java 14 Feb 2003 22:05:46 -0000
> @@ -71,25 +71,25 @@
>   * This class represents a function or script, that is,
>   * a piece of a document that is provided to the JavaScript
>   * engine for evaluation, execution, or simply compilation.
> - *
> + *
>   * A FnOrScript represents a range of lines or characters
> - * in its document. For now, Rhino only supports ranges
> + * in its document. For now, Rhino only supports ranges
>   * of lines, really, but the code for offsets is there anyway.
>   *
>   * Warning: Offsets have never been quite tested yet...
> - *
> + *
>   * A FnOrScript has compilation units. When Rhino compiles
>   * a function or a script, even in interpreted mode where the
>   * compilation is done to JavaScript bytecode, it calls back
> - * its debugger with different compilation units; see
> + * its debugger with different compilation units; see
>   * Debugger::handleCompilationDone method on the RhinoEngineDebugger
>   * class.
>   *
>   * A FnOrScript also keeps track of the known breakpoints
>   * in its range of lines or characters. It makes sure
> - * that they are propagated to the underlying Rhino
> + * that they are propagated to the underlying Rhino
>   * engine (i.e. set) as well as unpropagated (i.e. unset).
> - *
> + *
>   * @author: Olivier Gruber
>   */
>  public class FnOrScript {
> @@ -103,9 +103,11 @@
>
>      protected StringBuffer m_text;
>
> -    protected Vector m_units; // of CompilationUnit.
>      protected Script m_script;
>
> +    private Vector m_units; // of CompilationUnit.
> +    private Hashtable m_functionToUnit;
> +
>      protected Hashtable m_functionMap;
>
>      public FnOrScript(DocumentCell cell) {
> @@ -116,8 +118,9 @@
>          m_lineCount = 0;
>          m_breakpoints = new Vector();
>          m_text = new StringBuffer();
> -
> +
>          m_units = new Vector();
> +        m_functionToUnit = new Hashtable();
>          m_functionMap = new Hashtable();
>      }
>
> @@ -131,7 +134,7 @@
>
>          m_breakpoints.addElement(bp);
>
> -        // now, look for a unit containing it and
> +        // now, look for a unit containing it and
>          // if one is found, set the breakpoint unit
>          // and propagate...
>          Enumeration e;
> @@ -147,7 +150,7 @@
>          }
>          return bp;
>      }
> -
> +
>      private BreakPoint _removeBreakpoint(int brkptId) {
>          Enumeration e;
>          BreakPoint bp;
> @@ -173,13 +176,13 @@
>              bp = (BreakPoint) e.nextElement();
>              if (bpid == bp.getId()) {
>                  m_breakpoints.removeElement(bp);
> -                bp.unpropagate();
> +                bp.unpropagate();
>                  return bp;
>              }
>          }
>          return null;
>      }
> -
> +
>      boolean contains(BreakPoint bp) throws BSFException {
>          if (m_lineDefined) {
>              int line = bp.getLineNo();
> @@ -194,7 +197,7 @@
>      // This protected method works as a factory
>      // for language-specific breakpoints.
>      // The default behavior is to use the provided
> -    // generic breakpoint.
> +    // generic breakpoint.
>      // See javascript for an example of language-specific
>      // breakpoints.
>
> @@ -360,17 +363,18 @@
>
>      public void addCompilationUnit(Context cx,
>                                     DebuggableScript dbgScript,
> -                                   StringBuffer source) {
> +                                   String source) {
>
>          CompilationUnit unit;
>
>          unit = new CompilationUnit(this, dbgScript);
>          m_units.addElement(unit);
> +        m_functionToUnit.put(dbgScript, unit);
>          if (unit.m_fnName != null) {
>              m_functionMap.put(unit.m_fnName, unit);
>          }
>
> -        // Associate breakpoints to this unit if
> +        // Associate breakpoints to this unit if
>          // the unit contains them...
>          Enumeration e;
>          BreakPoint bp;
> @@ -383,13 +387,17 @@
>          propagateAll();
>      }
>
> +    CompilationUnit getCompilationUnit(DebuggableScript dbgScript) {
> +        return (CompilationUnit)m_functionToUnit.get(dbgScript);
> +    }
> +
>      public void compile(Context cx, Scriptable global)
>          throws BSFException, IOException {
>
>          Enumeration e;
>          Reader reader = new StringReader(m_text.toString());
>          m_script =
> -            cx.compileReader(global, reader, m_cell.getName(),
> +            cx.compileReader(global, reader, m_cell.getName(),
>                               m_startLine, null);
>          if (m_script == null)
>              throw new BSFException("Compilation of the script "
> Index: JavaScriptEngine.java
> ===================================================================
> RCS file:
/home/cvspublic/jakarta-bsf/src/bsf-2.3/bsf/src/org/apache/bsf/engines/javas
cript/JavaScriptEngine.java,v
> retrieving revision 1.3
> diff -u -r1.3 JavaScriptEngine.java
> --- JavaScriptEngine.java 13 Feb 2003 08:25:30 -0000 1.3
> +++ JavaScriptEngine.java 14 Feb 2003 22:05:46 -0000
> @@ -104,7 +104,7 @@
>      public void disconnectedDebuggerNotify() {
>          m_rhinoDbg.disconnectedDebuggerNotify();
>      }
> -
> +
>      BSFDebugManagerImpl getDebugManager() {
>          return dbgmgr;
>      }
> @@ -114,7 +114,7 @@
>          m_rhinoDbg.placeBreakpointAtLine(brkptid, docname, lineno);
>      }
>
> -    public void placeBreakpointAtOffset(int brkptid, String docname,
> +    public void placeBreakpointAtOffset(int brkptid, String docname,
>                                          int offset) throws BSFException {
>          m_rhinoDbg.placeBreakpointAtOffset(brkptid, docname, offset);
>      }
> @@ -140,7 +140,6 @@
>      public Object call(Object object, String method, Object[] args)
>          throws BSFException {
>          Object theReturnValue = null;
> -        DebuggableEngine engine;
>          Context cx;
>          try {
>
> @@ -160,13 +159,12 @@
>
>                  cx.setOptimizationLevel(-1);
>
> -                engine = cx.getDebuggableEngine();
> -                engine.setDebugger(m_rhinoDbg);
> +                cx.setDebugger(m_rhinoDbg, new
RhinoContextProxy(m_rhinoDbg));
>
> -                theReturnValue = ScriptRuntime.call(cx, fun, global,
args,
> +                theReturnValue = ScriptRuntime.call(cx, fun, global,
args,
>                                                      null);
>
> -            }
> +            }
>              else {
>                  cx.setOptimizationLevel(-1);
>
> @@ -175,10 +173,9 @@
>
>                  cx.setOptimizationLevel(0);
>
> -                engine = cx.getDebuggableEngine();
> -                engine.setDebugger(null);
> +                cx.setDebugger(null, null);
>
> -                theReturnValue = ScriptRuntime.call(cx, fun, global,
args,
> +                theReturnValue = ScriptRuntime.call(cx, fun, global,
args,
>                                                      null);
>              }
>              if (theReturnValue instanceof Wrapper) {
> @@ -203,7 +200,7 @@
>              global.put(bean.name, global, wrapped);
>          }
>      }
> -
> +
>      /**
>       * This is used by an application to evaluate a string containing
>       * some expression.
> @@ -216,7 +213,6 @@
>          DocumentCell cell;
>          FnOrScript fnOrScript;
>          Script script;
> -        DebuggableEngine engine;
>          Context cx;
>
>          try {
> @@ -237,13 +233,7 @@
>
>                  cx.setOptimizationLevel(-1);
>
> -                engine = cx.getDebuggableEngine();
> -                engine.setDebugger(m_rhinoDbg);
> -
> -                // Muck w/ this iff someone else hasn't already got it
true
> -                if (!engine.getBreakNextLine()) {
> -                    engine.setBreakNextLine(cell.getEntryExit());
> -                }
> +                cx.setDebugger(m_rhinoDbg, new
RhinoContextProxy(m_rhinoDbg));
>
>                  fnOrScript.compile(cx, global);
>                  m_rhinoDbg.setCompilingFnOrScript(null);
> @@ -251,7 +241,7 @@
>
>                  if (script != null) retval = script.exec(cx, global);
>                  else retval = null;
> -            }
> +            }
>              else {
>                  cx.setOptimizationLevel(-1);
>
> @@ -260,11 +250,10 @@
>
>                  cx.setOptimizationLevel(0);
>
> -                engine = cx.getDebuggableEngine();
> -                engine.setDebugger(null);
> +                cx.setDebugger(null, null);
>
>                  retval = cx.evaluateString(global, scriptText,
> -                                           source, lineNo,
> +                                           source, lineNo,
>                                             null);
>              }
>
> @@ -302,14 +291,14 @@
>                  // Display its stack trace as a diagnostic
>                  target = (Throwable) value;
>              }
> -        }
> -        else if (t instanceof EvaluatorException ||
> +        }
> +        else if (t instanceof EvaluatorException ||
>                   t instanceof SecurityException) {
>              message = t.getLocalizedMessage();
> -        }
> +        }
>          else if (t instanceof RuntimeException) {
>              message = "Internal Error: " + t.toString();
> -        }
> +        }
>          else if (t instanceof StackOverflowError) {
>              message = "Stack Overflow";
>          }
> @@ -319,7 +308,7 @@
>          }
>
>          //REMIND: can we recover the line number here?  I think
> -        // Rhino does this by looking up the stack for bytecode
> +        // Rhino does this by looking up the stack for bytecode
>          // see Context.getSourcePositionFromStack()
>          // but I don't think this would work in interpreted mode
>
> @@ -329,7 +318,7 @@
>              // corrected the situation by aborting the loop and
>              // a long stacktrace would end up on the user's console
>              throw (Error) t;
> -        }
> +        }
>          else {
>              throw new BSFException(BSFException.REASON_OTHER_ERROR,
>                                     "JavaScript Error: " + message,
> @@ -339,7 +328,7 @@
>
>      /**
>       * initialize the engine. put the manager into the context -> manager
> -     * map hashtable too.
> +     * map hashtable too.
>       */
>      public void initialize(BSFManager mgr, String lang, Vector
declaredBeans)
>          throws BSFException {
> Index: JsContextStub.java
> ===================================================================
> RCS file:
/home/cvspublic/jakarta-bsf/src/bsf-2.3/bsf/src/org/apache/bsf/engines/javas
cript/JsContextStub.java,v
> retrieving revision 1.2
> diff -u -r1.2 JsContextStub.java
> --- JsContextStub.java 7 Nov 2002 01:49:12 -0000 1.2
> +++ JsContextStub.java 14 Feb 2003 22:05:46 -0000
> @@ -68,235 +68,267 @@
>  * @author: Administrator
>  */
>
> -public class JsContextStub
> +public class JsContextStub
>  extends org.apache.bsf.debug.util.Skeleton
>     implements JsContext {
>
> - RhinoContextProxy m_rcp;
> - RhinoEngineDebugger m_rhinoDbg;
> - DebugFrame m_frame;
> - int m_frameno;
> - boolean m_atBreakpoint;
> - boolean m_invalid;
> -
> - /**
> - * JsContextStub constructor comment.
> - */
> - public JsContextStub(RhinoContextProxy rcp, DebugFrame frame, int
frameno)
> - throws RemoteException {
> - super(org.apache.bsf.debug.util.DebugConstants.JS_CONTEXT_TID);
> -
> - m_rhinoDbg = rcp.getRhinoEngineDebugger();
> - m_rcp = rcp;
> - m_frame = frame;
> - m_frameno = frameno;
> - m_invalid = false;
> - m_atBreakpoint = true;
> - }
> - //--------------------------------------------------
> - void atBreakpoint(boolean atbrkpt) {
> - m_atBreakpoint = atbrkpt;
> - }
> - public JsObject bind(String id) throws RemoteException {
> - try {
> - Context.enter();
> - Scriptable obj = m_frame.getVariableObject();
> - Object prop;
> - while (obj != null) {
> - Scriptable m = obj;
> - do {
> - if (m.has(id, obj))
> - return m_rhinoDbg.marshallScriptable(obj);
> - m = m.getPrototype();
> - } while (m != null);
> - obj = obj.getParentScope();
> - }
> - throw new JsdiException("Name not in scope.");
> - } finally {
> - Context.exit();
> - }
> - }
> - //--------------------------------------------------
> - public JsCode getCode() {
> - if (m_invalid)
> - throw new JsdiException("This context no longer exists.");
> - if (!m_atBreakpoint)
> - throw new JsdiException("Resumed context, can't get the code.");
> -
> - try {
> - Context.enter();
> - return null;
> - } finally {
> - Context.exit();
> - }
> - }
> - public int getDepth() {
> - return m_frameno;
> - }
> - //--------------------------------------------------
> - public JsEngine getEngine() {
> - RhinoEngineDebugger redbg;
> - redbg = m_rcp.getRhinoEngineDebugger();
> - return (JsEngine) redbg.getDebugInterface();
> -
> - }
> - //--------------------------------------------------
> - public int getLineNumber() {
> - if (m_invalid)
> - throw new JsdiException("This context no longer exists.");
> - if (!m_atBreakpoint)
> - throw new JsdiException("Resumed context, can't get line number.");
> -
> - try {
> - Context.enter();
> - return m_frame.getLineNumber();
> - } finally {
> - Context.exit();
> - }
> - }
> - //------------------------------------------------------
> - public JsObject getScope() throws RemoteException {
> -
> - if (m_invalid)
> - throw new JsdiException("This context no longer exists.");
> - if (!m_atBreakpoint)
> - throw new JsdiException("Resumed context, can't get line number.");
> -
> - try {
> - Context.enter();
> - Scriptable varobj = m_frame.getVariableObject();
> - JsObject scope = m_rhinoDbg.marshallScriptable(varobj);
> - return scope;
> - } finally {
> - Context.exit();
> - }
> - }
> - //------------------------------------------------------
> - public String getSourceName() {
> - if (m_invalid)
> - throw new JsdiException("This context no longer exists.");
> - if (!m_atBreakpoint)
> - throw new JsdiException("Resumed context, can't get line number.");
> -
> - try {
> - Context.enter();
> - return m_frame.getSourceName();
> - } finally {
> - Context.exit();
> - }
> - }
> - //------------------------------------------------------
> - public JsObject getThis() throws RemoteException {
> -
> - if (m_invalid)
> - throw new JsdiException("This context no longer exists.");
> - if (!m_atBreakpoint)
> - throw new JsdiException("Resumed context, can't get line number.");
> -
> - try {
> - Context.enter();
> - JsObject thisobj = null;
> - Scriptable obj = null;
> - NativeCall call = null;
> - Scriptable varobj = m_frame.getVariableObject();
> - if (varobj instanceof NativeCall) {
> - call = (NativeCall) varobj;
> - obj = call.getThisObj();
> - thisobj = m_rhinoDbg.marshallScriptable(varobj);
> - }
> - return thisobj;
> - } finally {
> - Context.exit();
> - }
> - }
> - //--------------------------------------------------
> - void invalidate() {
> - m_invalid = true;
> - }
> - //------------------------------------------------------
> - public boolean isEvalContext() {
> - if (m_invalid)
> - throw new JsdiException("This context no longer exists.");
> - if (!m_atBreakpoint)
> - throw new JsdiException("Resumed context, can't get line number.");
> -
> - try {
> - Context.enter();
> - return false;
> - } finally {
> - Context.exit();
> - }
> - }
> - //------------------------------------------------------
> - public boolean isFunctionContext() {
> - if (m_invalid)
> - throw new JsdiException("This context no longer exists.");
> - if (!m_atBreakpoint)
> - throw new JsdiException("Resumed context, can't get line number.");
> -
> - try {
> - Context.enter();
> - return false;
> - } finally {
> - Context.exit();
> - }
> - }
> - //------------------------------------------------------
> - public boolean isScriptContext() {
> - if (m_invalid)
> - throw new JsdiException("This context no longer exists.");
> - if (!m_atBreakpoint)
> - throw new JsdiException("Resumed context, can't get line number.");
> - try {
> - Context.enter();
> - return true;
> - } finally {
> - Context.exit();
> - }
> - }
> - public Object lookupName(String name) {
> -
> - try {
> - Context.enter();
> - Scriptable obj = m_frame.getVariableObject();
> - Object prop;
> - while (obj != null) {
> - Scriptable m = obj;
> - do {
> - Object result = m.get(name, obj);
> - if (result != Scriptable.NOT_FOUND)
> - return result;
> - m = m.getPrototype();
> - } while (m != null);
> - obj = obj.getParentScope();
> - }
> - throw new JsdiException("Name is not in scope.");
> - } finally {
> - Context.exit();
> - }
> - }
> - /**
> - * Looks up a name in the scope chain and returns its value.
> - */
> - public Object lookupName(Scriptable scopeChain, String id) {
> -
> - try {
> - Context.enter();
> - Scriptable obj = scopeChain;
> - Object prop;
> - while (obj != null) {
> - Scriptable m = obj;
> - do {
> - Object result = m.get(id, obj);
> - if (result != Scriptable.NOT_FOUND)
> - return result;
> - m = m.getPrototype();
> - } while (m != null);
> - obj = obj.getParentScope();
> - }
> - return null;
> - } finally {
> - Context.exit();
> - }
> - }
> +    RhinoContextProxy m_rcp;
> +    RhinoEngineDebugger m_rhinoDbg;
> +    int m_frameno;
> +    int m_lineno;
> +    boolean m_atBreakpoint;
> +    boolean m_invalid;
> +
> +    CompilationUnit m_unit;
> +    Scriptable m_variableObject;
> +    Scriptable m_thisObj;
> +
> +    /**
> +     * JsContextStub constructor comment.
> +     */
> +    JsContextStub(RhinoContextProxy rcp, CompilationUnit unit)
> +    throws RemoteException {
> +        super(org.apache.bsf.debug.util.DebugConstants.JS_CONTEXT_TID);
> +
> +        m_rhinoDbg = rcp.getRhinoEngineDebugger();
> +        m_rcp = rcp;
> +        m_unit = unit;
> +        m_invalid = false;
> +        m_atBreakpoint = true;
> +    }
> +
> +    DebugFrame getRhinoDebugFrame() {
> +        return new RhinoDebugFrame(this);
> +    }
> +
> +    //--------------------------------------------------
> +    void atBreakpoint(boolean atbrkpt) {
> +        m_atBreakpoint = atbrkpt;
> +    }
> +    public JsObject bind(String id) throws RemoteException {
> +        try {
> +            Context.enter();
> +            Scriptable obj = m_variableObject;
> +            Object prop;
> +            while (obj != null) {
> +                Scriptable m = obj;
> +                do {
> +                    if (m.has(id, obj))
> +                        return m_rhinoDbg.marshallScriptable(obj);
> +                    m = m.getPrototype();
> +                } while (m != null);
> +                obj = obj.getParentScope();
> +            }
> +            throw new JsdiException("Name not in scope.");
> +        } finally {
> +            Context.exit();
> +        }
> +    }
> +    //--------------------------------------------------
> +    public JsCode getCode() {
> +        if (m_invalid)
> +            throw new JsdiException("This context no longer exists.");
> +        if (!m_atBreakpoint)
> +            throw new JsdiException("Resumed context, can't get the
code.");
> +
> +        try {
> +            Context.enter();
> +            return null;
> +        } finally {
> +            Context.exit();
> +        }
> +    }
> +    public int getDepth() {
> +        return m_frameno;
> +    }
> +    //--------------------------------------------------
> +    public JsEngine getEngine() {
> +        RhinoEngineDebugger redbg;
> +        redbg = m_rcp.getRhinoEngineDebugger();
> +        return (JsEngine) redbg.getDebugInterface();
> +
> +    }
> +    //--------------------------------------------------
> +    public int getLineNumber() {
> +        if (m_invalid)
> +            throw new JsdiException("This context no longer exists.");
> +        if (!m_atBreakpoint)
> +            throw new JsdiException("Resumed context, can't get line
number.");
> +
> +        return m_lineno;
> +    }
> +    //------------------------------------------------------
> +    public JsObject getScope() throws RemoteException {
> +
> +        if (m_invalid)
> +            throw new JsdiException("This context no longer exists.");
> +        if (!m_atBreakpoint)
> +            throw new JsdiException("Resumed context, can't get line
number.");
> +
> +        try {
> +            Context.enter();
> +            JsObject scope =
m_rhinoDbg.marshallScriptable(m_variableObject);
> +            return scope;
> +        } finally {
> +            Context.exit();
> +        }
> +    }
> +    //------------------------------------------------------
> +    public String getSourceName() {
> +        if (m_invalid)
> +            throw new JsdiException("This context no longer exists.");
> +        if (!m_atBreakpoint)
> +            throw new JsdiException("Resumed context, can't get line
number.");
> +
> +        return m_unit.m_dbgScript.getSourceName();
> +    }
> +    //------------------------------------------------------
> +    public JsObject getThis() throws RemoteException {
> +
> +        if (m_invalid)
> +            throw new JsdiException("This context no longer exists.");
> +        if (!m_atBreakpoint)
> +            throw new JsdiException("Resumed context, can't get line
number.");
> +
> +        try {
> +            Context.enter();
> +            JsObject thisobj = null;
> +            Scriptable obj = null;
> +            NativeCall call = null;
> +            Scriptable varobj = m_variableObject;
> +            if (varobj instanceof NativeCall) {
> +                call = (NativeCall) varobj;
> +                obj = call.getThisObj();
> +                thisobj = m_rhinoDbg.marshallScriptable(varobj);
> +            }
> +            return thisobj;
> +        } finally {
> +            Context.exit();
> +        }
> +    }
> +    //--------------------------------------------------
> +    void invalidate() {
> +        m_invalid = true;
> +    }
> +    //------------------------------------------------------
> +    public boolean isEvalContext() {
> +        if (m_invalid)
> +            throw new JsdiException("This context no longer exists.");
> +        if (!m_atBreakpoint)
> +            throw new JsdiException("Resumed context, can't get line
number.");
> +
> +        try {
> +            Context.enter();
> +            return false;
> +        } finally {
> +            Context.exit();
> +        }
> +    }
> +    //------------------------------------------------------
> +    public boolean isFunctionContext() {
> +        if (m_invalid)
> +            throw new JsdiException("This context no longer exists.");
> +        if (!m_atBreakpoint)
> +            throw new JsdiException("Resumed context, can't get line
number.");
> +
> +        try {
> +            Context.enter();
> +            return false;
> +        } finally {
> +            Context.exit();
> +        }
> +    }
> +    //------------------------------------------------------
> +    public boolean isScriptContext() {
> +        if (m_invalid)
> +            throw new JsdiException("This context no longer exists.");
> +        if (!m_atBreakpoint)
> +            throw new JsdiException("Resumed context, can't get line
number.");
> +        try {
> +            Context.enter();
> +            return true;
> +        } finally {
> +            Context.exit();
> +        }
> +    }
> +    public Object lookupName(String name) {
> +
> +        try {
> +            Context.enter();
> +            Scriptable obj = m_variableObject;
> +            Object prop;
> +            while (obj != null) {
> +                Scriptable m = obj;
> +                do {
> +                    Object result = m.get(name, obj);
> +                    if (result != Scriptable.NOT_FOUND)
> +                        return result;
> +                    m = m.getPrototype();
> +                } while (m != null);
> +                obj = obj.getParentScope();
> +            }
> +            throw new JsdiException("Name is not in scope.");
> +        } finally {
> +            Context.exit();
> +        }
> +    }
> +    /**
> +     * Looks up a name in the scope chain and returns its value.
> +     */
> +    public Object lookupName(Scriptable scopeChain, String id) {
> +
> +        try {
> +            Context.enter();
> +            Scriptable obj = scopeChain;
> +            Object prop;
> +            while (obj != null) {
> +                Scriptable m = obj;
> +                do {
> +                    Object result = m.get(id, obj);
> +                    if (result != Scriptable.NOT_FOUND)
> +                        return result;
> +                    m = m.getPrototype();
> +                } while (m != null);
> +                obj = obj.getParentScope();
> +            }
> +            return null;
> +        } finally {
> +            Context.exit();
> +        }
> +    }
> +}
> +
> +class RhinoDebugFrame implements DebugFrame {
> +
> +    JsContextStub m_stub;
> +
> +    RhinoDebugFrame(JsContextStub stub) {
> +        m_stub = stub;
> +    }
> +
> +    public void onEnter(Context cx, Scriptable activation,
> +                        Scriptable thisObj, Object[] args)
> +    {
> +        m_stub.m_variableObject = activation;
> +        m_stub.m_thisObj = thisObj;
> +        m_stub.m_frameno = m_stub.m_rcp.m_frameStack.size();
> +        m_stub.m_rcp.m_frameStack.push(m_stub);
> +    }
> +
> +    public void onExit(Context cx, boolean byThrow, Object
resultOrException)
> +    {
> +        m_stub.m_rcp.m_frameStack.pop();
> +        m_stub.invalidate();
> +    }
> +
> +    public void onExceptionThrown(Context cx, Throwable ex) {
> +        m_stub.m_rcp.m_reDbg.handleExceptionThrown(cx, m_stub.m_rcp, ex);
> +    }
> +
> +    public void onLineChange(Context cx, int lineNumber) {
> +        m_stub.m_lineno = lineNumber;
> +        if (m_stub.m_unit.hasBreakpoint(lineNumber)) {
> +            m_stub.m_rcp.m_reDbg.handleBreakpointHit(cx, m_stub.m_rcp);
> +        }
> +    }
>  }
> Index: JsEngineStub.java
> ===================================================================
> RCS file:
/home/cvspublic/jakarta-bsf/src/bsf-2.3/bsf/src/org/apache/bsf/engines/javas
cript/JsEngineStub.java,v
> retrieving revision 1.2
> diff -u -r1.2 JsEngineStub.java
> --- JsEngineStub.java 7 Nov 2002 01:49:12 -0000 1.2
> +++ JsEngineStub.java 14 Feb 2003 22:05:46 -0000
> @@ -62,38 +62,37 @@
>  import org.apache.bsf.debug.jsdi.*;
>  import org.mozilla.javascript.Context;
>  import org.mozilla.javascript.Script;
> -import org.mozilla.javascript.debug.DebuggableEngine;
>
>  /**
>   * Insert the type's description here.
>   * Creation date: (9/6/2001 1:21:46 PM)
>   * @author: Administrator
>   */
> -public class JsEngineStub
> +public class JsEngineStub
>      extends org.apache.bsf.debug.util.Skeleton
>      implements JsEngine {
>
>      RhinoEngineDebugger m_rhinoDbg;
>      boolean m_inCallback;
>      boolean m_resumeExecution;
> -    Object  m_lock;
> -
> +    Object  m_lock;
> +
>      /**
>       * JsEngineStub constructor comment.
>       */
> -    public JsEngineStub(RhinoEngineDebugger rhinoDbg)
> +    public JsEngineStub(RhinoEngineDebugger rhinoDbg)
>          throws RemoteException {
>          super(org.apache.bsf.debug.util.DebugConstants.JS_ENGINE_TID);
>          m_rhinoDbg = rhinoDbg;
>          m_lock = new Object();
>      }
> -
> +
>      public boolean isSuspended() throws RemoteException {
>          return m_inCallback;
>      }
> -
> +
>      public boolean poll() { return true; }
> -
> +
>      public Object eval(String docname, String exp, int lineNo)
>          throws RemoteException {
>
> @@ -125,7 +124,7 @@
>          try {
>              Context.enter();
>              count = m_rhinoDbg.getContextCount();
> -            DebugLog.stdoutPrintln(" count = "+count,
> +            DebugLog.stdoutPrintln("    count = "+count,
>                                     DebugLog.BSF_LOG_L3);
>              return count;
>          } finally {
> @@ -133,7 +132,7 @@
>          }
>
>      }
> -
> +
>      public String getThread() throws RemoteException {
>          return m_rhinoDbg.getThread();
>      }
> @@ -203,7 +202,7 @@
>      public void stepIn() throws RemoteException {
>          try {
>              Context.enter();
> -            DebugLog.stdoutPrintln("Step In command on "+this,
> +            DebugLog.stdoutPrintln("Step In command on "+this,
>                                     DebugLog.BSF_LOG_L3);
>              m_rhinoDbg.stepIn(this);
>          } catch (Exception ex) {
> @@ -225,7 +224,6 @@
>      }
>
>      public void stepOver() throws RemoteException {
> -        RhinoContextProxy rcp;
>          try {
>              Context.enter();
>              m_rhinoDbg.stepOver(this);
> Index: RhinoContextProxy.java
> ===================================================================
> RCS file:
/home/cvspublic/jakarta-bsf/src/bsf-2.3/bsf/src/org/apache/bsf/engines/javas
cript/RhinoContextProxy.java,v
> retrieving revision 1.3
> diff -u -r1.3 RhinoContextProxy.java
> --- RhinoContextProxy.java 15 Jan 2003 08:15:14 -0000 1.3
> +++ RhinoContextProxy.java 14 Feb 2003 22:05:46 -0000
> @@ -70,133 +70,107 @@
>
>  import java.rmi.RemoteException;
>
> -public class RhinoContextProxy {
> +class RhinoContextProxy {
>
>      RhinoEngineDebugger m_reDbg;
> -    Context m_context;
> -    JsContextStub m_contextStub;
>
> -    DebuggableEngine m_engine;
> -
> -    boolean m_atBreakpoint;
> -    int m_frameCount;
> -    JsContextStub m_frames[];
> +    ObjArray m_frameStack = new ObjArray();
>
>      private static final int NO_STEP = 0, STEP_IN = 1, STEP_OVER = 2,
>          STEP_OUT = 3, STOP_ENGINE = 4, RUNNING = 5;
>
>      private int m_stepCmd, m_stepDepth;
>
> -    RhinoContextProxy(RhinoEngineDebugger reDbg, Context cx) {
> +    RhinoContextProxy(RhinoEngineDebugger reDbg) {
>          m_reDbg = reDbg;
> -        m_context = cx;
> -        m_engine = cx.getDebuggableEngine();
>      }
>
> -    public void cancelStepping() {
> +    static RhinoContextProxy getCurrent() {
> +        Context cx = Context.getCurrentContext();
> +        if (cx == null) { return null; }
> +        return (RhinoContextProxy)cx.getDebuggerContextData();
> +    }
> +
> +    void cancelStepping() {
>          m_stepCmd = NO_STEP;
>          m_stepDepth = -1;
> -        m_engine.setBreakNextLine(false);
>      }
>
> -    public JsContextStub getContext(int depth) {
> -        return m_frames[depth];
> +    int getContextCount() {
> +        return m_frameStack.size();
>      }
>
> -    public int getContextCount() {
> -        return m_frameCount;
> +    JsContextStub getContextStub(int no) {
> +        if (!(0 <= no && no < m_frameStack.size())) { return null; }
> +        return (JsContextStub)m_frameStack.get(no);
>      }
>
> -    public JsContextStub getFrame(int no) {
> -        if (no < 0 || no > m_frameCount)
> -            return null;
> -        if (no == m_frameCount)
> -            return m_contextStub;
> -        else
> -            return m_frames[no];
> +    JsContextStub getTopContextStub() {
> +        return getContextStub(m_frameStack.size() - 1);
>      }
>
> -    public int getLineNumber() {
> -        DebugFrame frame = m_engine.getFrame(0);
> -
> -        return frame.getLineNumber();
> +    int getLineNumber() {
> +        JsContextStub stub = getTopContextStub();
> +        return stub.m_lineno;
>      }
>
> -    public RhinoEngineDebugger getRhinoEngineDebugger() {
> +    RhinoEngineDebugger getRhinoEngineDebugger() {
>          return m_reDbg;
>      }
>
>      String getSourceName() {
> -        DebugFrame frame = m_engine.getFrame(0);
> -
> -        return frame.getSourceName();
> +        JsContextStub stub = getTopContextStub();
> +        return stub.m_unit.m_dbgScript.getSourceName();
>      }
>
> -
>      // We hit a known breakpoint.
>      // We need to update the stack.
>      // Also, cancel any pending stepping operation.
> -    public JsContextStub hitBreakpoint() throws RemoteException {
> +    JsContextStub hitBreakpoint() throws RemoteException {
>          cancelStepping();
> -        updateStack();
> -        return m_frames[0];
> +        return getTopContextStub();
>      }
>
> -
> -    public JsContextStub exceptionThrown() throws RemoteException {
> +    JsContextStub exceptionThrown() throws RemoteException {
>          cancelStepping();
> -        updateStack();
> -        return m_frames[0];
> +        return getTopContextStub();
>      }
>
> -    public void resumed() {
> -        JsContextStub stub;
> -        DebugFrame frame;
> -
> -        m_atBreakpoint = false;
> -
> -        for (int f = 0; f < m_frameCount; f++) {
> -            stub = m_frames[f];
> -            stub.atBreakpoint(false);
> +    void resumed() {
> +        for (int f = 0, N = getContextCount(); f != N; ++f) {
> +            getContextStub(f).atBreakpoint(false);
>          }
>      }
>
> -    public void run() {
> -        m_engine.setBreakNextLine(false);
> +    void run() {
>          m_stepCmd = RUNNING;
>          m_stepDepth = -1;
> -
>      }
>
> -    public void stepIn() {
> -        m_engine.setBreakNextLine(true);
> +    void stepIn() {
>          m_stepCmd = STEP_IN;
> -        m_stepDepth = m_frameCount;
> +        m_stepDepth = getContextCount();
>      }
>
> -    public void stepOut() {
> -        m_engine.setBreakNextLine(true);
> +    void stepOut() {
>          m_stepCmd = STEP_OUT;
> -        m_stepDepth = m_frameCount;
> -
> +        m_stepDepth = getContextCount();
>      }
>
> -    public void stepOver() {
> -        m_engine.setBreakNextLine(true);
> +    void stepOver() {
>          m_stepCmd = STEP_OVER;
> -        m_stepDepth = m_frameCount;
> +        m_stepDepth = getContextCount();
>      }
>
> -    public JsContextStub entry_exit_mode() throws RemoteException {
> +    JsContextStub entry_exit_mode() throws RemoteException {
>          cancelStepping();
> -        updateStack();
> -        return m_frames[0];
> +        return getTopContextStub();
>      }
>
> -    public JsContextStub stepping() {
> +    JsContextStub stepping() {
>          // Did we hit a known breakpoint?
>
> -        int frameCount = m_engine.getFrameCount();
> +        int frameCount = getContextCount();
>
>          try {
>              switch (m_stepCmd) {
> @@ -204,35 +178,31 @@
>                  cancelStepping();
>                  break;
>              case STOP_ENGINE :
> -                updateStack();
>                  cancelStepping();
> -                return m_frames[0];
> +                return getTopContextStub();
>              case STEP_IN :
> -                // OG if ((frameCount == m_stepDepth + 1) ||
> +                // OG if ((frameCount == m_stepDepth + 1) ||
>                  // (frameCount == m_stepDepth)) {
>                  // step if we are in the same frame (nothing to step
in... :-)
>                  // if we are in a called frame...
>                  // but also if we stepped out of the current frame...
> -                    updateStack();
>                      cancelStepping();
> -                    return m_frames[0];
> +                    return getTopContextStub();
>              case STEP_OVER :
>                  // OG if (frameCount == m_stepDepth) {
>                  // step if we are in the same frame or above...
> -                // this basically avoids any children frame but
> +                // this basically avoids any children frame but
>                  // covers the return of the current frame.
>                  if (frameCount <= m_stepDepth) {
> -                    updateStack();
>                      cancelStepping();
> -                    return m_frames[0];
> +                    return getTopContextStub();
>                  }
>                  break;
>              case STEP_OUT :
>                  // OG if (frameCount == m_stepDepth - 1) {
>                  if (frameCount < m_stepDepth) {
> -                    updateStack();
>                      cancelStepping();
> -                    return m_frames[0];
> +                    return getTopContextStub();
>                  }
>                  break;
>              default :
> @@ -245,51 +215,8 @@
>          return null;
>      }
>
> -    public void stopEngine() {
> -        m_engine.setBreakNextLine(true);
> +    void stopEngine() {
>          m_stepCmd = STOP_ENGINE;
>          m_stepDepth = -1;
> -    }
> -
> -    public void updateStack() throws RemoteException {
> -        int nf, of, frameCount = m_engine.getFrameCount();
> -        JsContextStub frames[] = new JsContextStub[frameCount];
> -        DebugFrame frame;
> -
> -        m_atBreakpoint = true;
> -
> -        // scan the stacks from the outer frame down
> -        // to the inner one of the shortest of the old
> -        // and the new known stack.
> -        // The goal is to recognize the DebugFrame objects
> -        // that are the sames so that we can reuse the
> -        // stubs for those.
> -        // As soon as a DebugFrame object is found different,
> -        // the rest of the stack is different, all the old
> -        // stubs can be dropped and invalidated, new ones
> -        // must be created.
> -
> -        for (nf = 0, of = 0;
> -             nf < frameCount && of < m_frameCount;
> -             nf++, of++) {
> -            frame = m_engine.getFrame(nf);
> -            if (frame == m_frames[of].m_frame) {
> -                frames[nf] = m_frames[of];
> -            } else
> -                break;
> -        }
> -        // now drop all old frames that diverged.
> -        // Also invalidate the frame stubs so to
> -        // tracked that they are no longer valid.
> -        for (; of < m_frameCount; of++) {
> -            m_reDbg.dropStub(m_frames[of].m_frame);
> -            m_frames[of].invalidate();
> -        }
> -        for (; nf < frameCount; nf++) {
> -            frame = m_engine.getFrame(nf);
> -            frames[nf] = new JsContextStub(this, frame, nf);
> -        }
> -        m_frames = frames;
> -        m_frameCount = frameCount;
>      }
>  }
> Index: RhinoEngineDebugger.java
> ===================================================================
> RCS file:
/home/cvspublic/jakarta-bsf/src/bsf-2.3/bsf/src/org/apache/bsf/engines/javas
cript/RhinoEngineDebugger.java,v
> retrieving revision 1.2
> diff -u -r1.2 RhinoEngineDebugger.java
> --- RhinoEngineDebugger.java 7 Nov 2002 01:49:12 -0000 1.2
> +++ RhinoEngineDebugger.java 14 Feb 2003 22:05:47 -0000
> @@ -74,24 +74,23 @@
>  import org.apache.bsf.debug.*;
>  import org.apache.bsf.debug.jsdi.*;
>
> -public class RhinoEngineDebugger implements Debugger {
> +class RhinoEngineDebugger implements Debugger {
>
>      /** The global script object, where all embedded functions are
defined,
>       * as well as the standard ECMA "core" objects.
> -     */
> +     */
>      private Scriptable global;
>      private JsObject globalstub;
>
> -    private RhinoContextProxy m_rcp;
>      private Scriptable undefined;
>      private JsObject undefinedStub;
>
> -    /**
> +    /**
>       *  Hashtable allowing to find the stub for an object in the
JavaScript
>       *  environment if one exists.
>       *  Typically: Scriptable, Function, Script, etc.
>       *  This is not used for Context and DebugFrame.
> -     *  They typically contains JsObject associated to
> +     *  They typically contains JsObject associated to
>       *  org.mozilla.javascript.ScriptableObject
>       */
>      private Hashtable stubs;
> @@ -102,16 +101,13 @@
>      private FnOrScript m_compilingFnOrScript;
>      private JavaScriptEngine m_eng;
>
> -    private Thread m_thread;
> -
>      private Hashtable m_documents;
>
>      BSFDebugManagerImpl dbgmgr;
>
> -    public RhinoEngineDebugger(JavaScriptEngine eng)
> +    RhinoEngineDebugger(JavaScriptEngine eng)
>          throws RemoteException {
>          super();
> -        m_thread = Thread.currentThread();
>          m_eng = eng;
>          dbgmgr = eng.getDebugManager();
>
> @@ -127,45 +123,37 @@
>      /**
>       * Called when our debugger has been disconnected.
>       */
> -    public void disconnectedDebuggerNotify() {
> +    void disconnectedDebuggerNotify() {
>          m_callbacks = null;
>      }
>
> -    void addStub(Context cx, RhinoContextProxy jscx) {
> -        stubs.put(cx, jscx);
> -    }
> -
> -    void addStub(DebugFrame frame, JsContextStub stub) {
> -        stubs.put(frame, stub);
> -    }
> -
>      void addStub(Scriptable sobj, JsObject jsobj) {
>          stubs.put(sobj, jsobj);
>      }
>
> -    void dropStub(Object key) {
> +    void dropStub(Scriptable key) {
>          stubs.remove(key);
>      }
>
> -    public synchronized DocumentCell getDocumentCell(String name) {
> +    synchronized DocumentCell getDocumentCell(String name) {
>          return (DocumentCell) m_documents.get(name);
>      }
>
>      // Called upon creation of a BSFManager.
> -    public synchronized DocumentCell loadDocumentNotify(String name) {
> +    synchronized DocumentCell loadDocumentNotify(String name) {
>          DocumentCell cell;
>
>          cell = (DocumentCell) m_documents.get(name);
>          if (cell == null) {
>              cell = new DocumentCell(this, name);
>              m_documents.put(name, cell);
> -            if (dbgmgr!=null)
> +            if (dbgmgr!=null)
>                  dbgmgr.loadDocumentNotify(m_eng, name);
>          }
>          return cell;
>      }
>
> -    public synchronized void placeBreakpointAtLine(int brkptid,
> +    synchronized void placeBreakpointAtLine(int brkptid,
>                                                     String docname,
>                                                     int lineno) {
>
> @@ -174,7 +162,7 @@
>          cell.addBreakpointAtLine(brkptid, lineno);
>      }
>
> -    public synchronized void placeBreakpointAtOffset(int brkptid,
> +    synchronized void placeBreakpointAtOffset(int brkptid,
>                                                       String docname,
>                                                       int offset) {
>
> @@ -183,7 +171,7 @@
>          cell.addBreakpointAtOffset(brkptid, offset);
>      }
>
> -    public void removeBreakpoint(String docname, int brkptid)
> +    void removeBreakpoint(String docname, int brkptid)
>          throws BSFException {
>
>          DocumentCell cell;
> @@ -191,7 +179,7 @@
>          cell.removeBreakpoint(brkptid);
>      }
>
> -    public void setEntryExit(String docname, boolean on)
> +    void setEntryExit(String docname, boolean on)
>          throws BSFException {
>
>          DocumentCell cell;
> @@ -199,7 +187,7 @@
>          cell.setEntryExit(on);
>      }
>
> -    public Object eval(String docname, String fnOrScript, int lineno)
> +    Object eval(String docname, String fnOrScript, int lineno)
>          throws RemoteException {
>          Object retval;
>          try {
> @@ -210,13 +198,15 @@
>          }
>      }
>
> -    public JsContext getContext(int depth) {
> -        if (m_rcp != null) return m_rcp.getContext(depth);
> +    JsContext getContext(int depth) {
> +        RhinoContextProxy rcp = RhinoContextProxy.getCurrent();
> +        if (rcp != null) return rcp.getContextStub(depth);
>          return null;
>      }
>
> -    public int getContextCount() {
> -        if (m_rcp != null) return m_rcp.getContextCount();
> +    int getContextCount() {
> +        RhinoContextProxy rcp = RhinoContextProxy.getCurrent();
> +        if (rcp != null) return rcp.getContextCount();
>          return -1;
>      }
>
> @@ -224,24 +214,20 @@
>       * Return the current debugger.
>       * @return the debugger, or null if none is attached.
>       */
> -    public JsCallbacks getDebugger() {
> +    JsCallbacks getDebugger() {
>          return m_callbacks;
>      }
>
> -    public Object getDebugInterface() {
> +    Object getDebugInterface() {
>          return engineStub;
>      }
>
> -    public JsObject getGlobalObject() {
> +    JsObject getGlobalObject() {
>          return globalstub;
>      }
>
> -    public RhinoContextProxy getRhinoContextProxy() {
> -        return m_rcp;
> -    }
> -
>      RhinoContextProxy getStub(Context cx) {
> -        return (RhinoContextProxy) stubs.get(cx);
> +        return (RhinoContextProxy)cx.getDebuggerContextData();
>      }
>
>      JsContextStub getStub(DebugFrame frame) {
> @@ -252,19 +238,20 @@
>          return (JsObject) stubs.get(sobj);
>      }
>
> -    public JsObject getUndefinedValue() {
> +    JsObject getUndefinedValue() {
>          return undefinedStub;
>      }
>
> -    public String getThread() {
> +    String getThread() {
> +        Context cx = Context.getCurrentContext();
>          String resultstr = "";
>
> -        if (m_thread != null) {
> +        if (cx != null) {
>              try {
>                  final String resultstrf = (String)
>                  AccessController.doPrivileged(new
PrivilegedExceptionAction() {
>                          public Object run() throws Exception {
> -                            return m_thread.getName();
> +                            return Thread.currentThread().getName();
>                          }
>                      });
>              resultstr = resultstrf;
> @@ -277,15 +264,17 @@
>          return resultstr;
>      }
>
> -    public String getThreadGroup() {
> +    String getThreadGroup() {
> +        Context cx = Context.getCurrentContext();
>          String resultstr = "";
>
> -        if (m_thread != null) {
> +        if (cx != null) {
>              try {
>                  final String resultstrf = (String)
>                  AccessController.doPrivileged(new
PrivilegedExceptionAction() {
>                          public Object run() throws Exception {
> -                            return m_thread.getThreadGroup().getName();
> +                            return
Thread.currentThread().getThreadGroup().
> +                                        getName();
>                          }
>                      });
>              resultstr = resultstrf;
> @@ -305,7 +294,7 @@
>      // to implement STEP_IN, STEP_OUT, and STEP_OVER.
>      //---------------------------------------------------------
>
> -    public void handleBreakpointHit(Context cx) {
> +    void handleBreakpointHit(Context cx, RhinoContextProxy rcp) {
>          JsCallbacks debugger;
>          BreakPoint bp;
>          Enumeration e;
> @@ -313,48 +302,41 @@
>          boolean breakpointFound=false;
>          String name;
>          int lineno;
> -        boolean suspend=false;
> -
> -        m_thread = Thread.currentThread();
> -        DebugLog.stdoutPrintln("**** Handling a breakpoint hit...",
> +
> +        DebugLog.stdoutPrintln("**** Handling a breakpoint hit...",
>                                 DebugLog.BSF_LOG_L3);
> -        m_rcp = getStub(cx);
> -        if (m_rcp == null) {
> -            m_rcp = new RhinoContextProxy(this, cx);
> -            addStub(cx, m_rcp);
> -        }
> -        // if we have no callbacks... then just
> +        // if we have no callbacks... then just
>          // ignore the breakpoint hit, do a run
>          // so that execution resumes...
>          if (m_callbacks==null) {
> -            DebugLog.stdoutPrintln(" No callbacks, resuming...",
DebugLog.BSF_LOG_L3);
> -            m_rcp.run();
> +            DebugLog.stdoutPrintln("    No callbacks, resuming...",
DebugLog.BSF_LOG_L3);
> +            rcp.run();
>
>          } else {
>              // First, check that we didn't hit a known breakpoint.
>              // First, search if we have breakpoints for the current
documents
>
> -            name = m_rcp.getSourceName();
> -            lineno = m_rcp.getLineNumber();
> +            name = rcp.getSourceName();
> +            lineno = rcp.getLineNumber();
>
> -            DebugLog.stdoutPrintln(" in "+name+" at "+lineno,
DebugLog.BSF_LOG_L3);
> +            DebugLog.stdoutPrintln("    in "+name+" at "+lineno,
DebugLog.BSF_LOG_L3);
>
>              cell = getDocumentCell(name);
> -            if (cell != null)
> -                _handleBreakpointHit(cell,lineno);
> -        }
> -        m_rcp = null;
> +            if (cell != null)
> +                _handleBreakpointHit(rcp,cell,lineno);
> +        }
>      }
>
> -    public void _handleBreakpointHit(DocumentCell cell, int lineno) {
> -
> +    void _handleBreakpointHit(RhinoContextProxy rcp,
> +                              DocumentCell cell, int lineno)
> +    {
>          JsCallbacks debugger;
>          BreakPoint bp;
>          Enumeration e;
>          JsContext stub=null;
>          boolean breakpointFound=false;
>          boolean suspend=false;
> -
> +
>          try {
>              bp = cell.findBreakpointAtLine(lineno);
>          } catch (BSFException bsfex) {
> @@ -363,19 +345,19 @@
>          if (bp != null) {
>              breakpointFound = true;
>              try {
> -                stub = m_rcp.hitBreakpoint();
> -                DebugLog.stdoutPrintln(" breakpoint callback...",
DebugLog.BSF_LOG_L3);
> -             m_callbacks.createFuture(m_rcp);
> +                stub = rcp.hitBreakpoint();
> +                DebugLog.stdoutPrintln("    breakpoint callback...",
DebugLog.BSF_LOG_L3);
> +                 m_callbacks.createFuture(rcp);
>                  m_callbacks.handleBreakpointHit(stub);
>                  suspend = true;
>              } catch (RemoteException rex) {
> -                DebugLog.stderrPrintln(" EXCEPTION OCCURED DURING
BREAKPOINT CALLBACK", DebugLog.BSF_LOG_L0);
> +                DebugLog.stderrPrintln("    EXCEPTION OCCURED DURING
BREAKPOINT CALLBACK", DebugLog.BSF_LOG_L0);
>                  DebugLog.stderrPrintln(rex.getMessage(),
DebugLog.BSF_LOG_L0);
>                  rex.printStackTrace();
>                  suspend = false;
>              }
>          } else {
> -            DebugLog.stdoutPrintln(" didn't find a breakpoint...",
DebugLog.BSF_LOG_L3);
> +            DebugLog.stdoutPrintln("    didn't find a breakpoint...",
DebugLog.BSF_LOG_L3);
>              breakpointFound = false;
>          }
>
> @@ -384,87 +366,107 @@
>              // line in the current document, we must be stepping
>              // or in entry/exit mode
>              try {
> -                stub = m_rcp.stepping();
> +                stub = rcp.stepping();
>                  FnOrScript current =
cell.findFnOrScriptContaining(lineno);
>                  if (stub != null) {
>                      cell.setLastFnOrScript(current);
> -                    DebugLog.stdoutPrintln(" stepping-done callback...",
> +                    DebugLog.stdoutPrintln("    stepping-done
callback...",
>                                             DebugLog.BSF_LOG_L3);
> -                m_callbacks.createFuture(m_rcp);
> +                    m_callbacks.createFuture(rcp);
>                      m_callbacks.handleSteppingDone(stub);
>                      suspend = true;
> -                }
> +                }
>                  else if (cell.getEntryExit() &&
>                           (current != cell.getLastFnOrScript()) &&
> -                         (m_rcp.getContextCount() == 0)) {
> +                         (rcp.getContextCount() == 0)) {
>                      cell.setLastFnOrScript(current);
> -                    stub = m_rcp.entry_exit_mode();
> -                    DebugLog.stdoutPrintln("    entry/exit mode...",
> +                    stub = rcp.entry_exit_mode();
> +                    DebugLog.stdoutPrintln("    entry/exit mode...",
>                                             DebugLog.BSF_LOG_L3);
> -                m_callbacks.createFuture(m_rcp);
> +                    m_callbacks.createFuture(rcp);
>                      m_callbacks.handleSteppingDone(stub);
>                      suspend = true;
>                  }
>                  else {
> -                    DebugLog.stdoutPrintln(" No reason to suspend
execution.", DebugLog.BSF_LOG_L3);
> +                    DebugLog.stdoutPrintln("    No reason to suspend
execution.", DebugLog.BSF_LOG_L3);
>                      suspend = false;
>                  }
>              } catch (RemoteException rex) {
> -                DebugLog.stderrPrintln(" EXCEPTION OCCURED DURING
STEPPING-DONE CALLBACK", DebugLog.BSF_LOG_L0);
> +                DebugLog.stderrPrintln("    EXCEPTION OCCURED DURING
STEPPING-DONE CALLBACK", DebugLog.BSF_LOG_L0);
>                  DebugLog.stderrPrintln(rex.getMessage(),
DebugLog.BSF_LOG_L0);
>                  rex.printStackTrace();
>                  suspend = false;
>              }
>          }
>          if (suspend) {
> -            // now, suspend this thread... until
> +            // now, suspend this thread... until
>              // we restart.
>              try {
> -                m_callbacks.suspendFuture(m_rcp);
> +                m_callbacks.suspendFuture(rcp);
>              } catch (Exception ex) {
>                  DebugLog.stdoutPrintln("Future creation failed...
releasing the engine", DebugLog.BSF_LOG_L3);
> -                m_rcp.run();
> +                rcp.run();
>              }
> -        }
> +        }
>      }
>
> -    public void run(JsEngineStub eng) throws Exception {
> +    void run(JsEngineStub eng) throws Exception {
>          DebugLog.stdoutPrintln("RhinoEngineDebugger::run()...",
>                                 DebugLog.BSF_LOG_L3);
> -        m_rcp.run();
> -        m_callbacks.completeFuture(m_rcp);
> +        RhinoContextProxy rcp = RhinoContextProxy.getCurrent();
> +        rcp.run();
> +        m_callbacks.completeFuture(rcp);
>      }
>
> -    public void stepIn(JsEngineStub eng) throws Exception {
> +    void stepIn(JsEngineStub eng) throws Exception {
>          DebugLog.stdoutPrintln("RhinoEngineDebugger::stepIn()...",
>                                 DebugLog.BSF_LOG_L3);
> -        m_rcp.stepIn();
> -        m_callbacks.completeFuture(m_rcp);
> +        RhinoContextProxy rcp = RhinoContextProxy.getCurrent();
> +        rcp.stepIn();
> +        m_callbacks.completeFuture(rcp);
>      }
>
> -    public void stepOut(JsEngineStub eng) throws Exception {
> +    void stepOut(JsEngineStub eng) throws Exception {
>          DebugLog.stdoutPrintln("RhinoEngineDebugger::stepOut()...",
>                                 DebugLog.BSF_LOG_L3);
> -        m_rcp.stepOut();
> -        m_callbacks.completeFuture(m_rcp);
> +        RhinoContextProxy rcp = RhinoContextProxy.getCurrent();
> +        rcp.stepOut();
> +        m_callbacks.completeFuture(rcp);
>      }
> -    public void stepOver(JsEngineStub eng) throws Exception {
> +    void stepOver(JsEngineStub eng) throws Exception {
>
>          DebugLog.stdoutPrintln("RhinoEngineDebugger::stepOver()...",
>                                 DebugLog.BSF_LOG_L3);
> -        m_rcp.stepOver();
> -        m_callbacks.completeFuture(m_rcp);
> +        RhinoContextProxy rcp = RhinoContextProxy.getCurrent();
> +        rcp.stepOver();
> +        m_callbacks.completeFuture(rcp);
>      }
> -
> +
>      public void handleCompilationDone(Context cx,
>                                        DebuggableScript fnOrScript,
> -                                      StringBuffer source) {
> +                                      String source) {
>
> -        m_thread = Thread.currentThread();
>          m_compilingFnOrScript.addCompilationUnit(cx, fnOrScript, source);
>      }
>
> -    public void handleExceptionThrown(Context cx, Object exceptionThrown)
{
> +    public DebugFrame getFrame(Context cx, DebuggableScript fnOrScript) {
> +        CompilationUnit unit;
> +        unit = m_compilingFnOrScript.getCompilationUnit(fnOrScript);
> +        RhinoContextProxy rcp = getStub(cx);
> +        try {
> +            JsContextStub stub = new JsContextStub(rcp, unit);
> +            return stub.getRhinoDebugFrame();
> +        } catch (RemoteException rex) {
> +            DebugLog.stderrPrintln("    EXCEPTION OCCURED DURING FRAME
INITIALIZATION", DebugLog.BSF_LOG_L0);
> +            DebugLog.stderrPrintln(rex.getMessage(),
DebugLog.BSF_LOG_L0);
> +            rex.printStackTrace();
> +            return null;
> +        }
> +    }
> +
> +    void handleExceptionThrown(Context cx, RhinoContextProxy rcp,
> +                               Throwable exceptionThrown)
> +    {
>          JsContext stub;
>          JsCallbacks debugger;
>          BreakPoint bp;
> @@ -473,53 +475,40 @@
>          String name,msg;
>          Exception ex;
>          int lineno;
> -        NativeError error;
> -
> -        m_thread = Thread.currentThread();
> -        m_rcp = getStub(cx);
> -        if (m_rcp == null) {
> -            m_rcp = new RhinoContextProxy(this, cx);
> -            addStub(cx, m_rcp);
> +
> +        // if we have no callbacks... then just
> +        // ignore the breakpoint hit, do a run
> +        // so that execution resumes...
> +        if (m_callbacks==null) {
> +            rcp.run();
> +            return;
>          }
> -        try {
> -            // if we have no callbacks... then just
> -            // ignore the breakpoint hit, do a run
> -            // so that execution resumes...
> -            if (m_callbacks==null) {
> -                m_rcp.run();
> -                return;
> -            }
>
> -            // First, check that we didn't hit a known breakpoint.
> -            // First, search if we have breakpoints for the current
documents
> -            name = m_rcp.getSourceName();
> -            lineno = m_rcp.getLineNumber();
> -            try {
> -                error = (NativeError)exceptionThrown;
> -                msg = error.getName() + ": " + error.getMessage();
> -            } catch (ClassCastException ccex) {
> -                msg = "Unknown JavaScript Exception";
> -            }
> -            ex = new Exception(msg);
> +        // First, check that we didn't hit a known breakpoint.
> +        // First, search if we have breakpoints for the current documents
> +        name = rcp.getSourceName();
> +        lineno = rcp.getLineNumber();
> +        if (exceptionThrown instanceof EcmaError) {
> +            msg =
((EcmaError)exceptionThrown).getErrorObject().toString();
> +        } else {
> +            msg = exceptionThrown.toString();
> +        }
> +        ex = new Exception(msg);
>
> -            cell = getDocumentCell(name);
> -            if (cell == null) return;
> +        cell = getDocumentCell(name);
> +        if (cell == null) return;
>
> -            try {
> -                stub = m_rcp.exceptionThrown();
> -                m_callbacks.createFuture(m_rcp);
> -                m_callbacks.handleExceptionThrown(stub,ex);
> -
> -                // now, suspend this thread... until
> -                // we restart.
> -                m_callbacks.suspendFuture(m_rcp);
> -
> -            } catch (Exception ex2) {
> -                m_rcp.run();
> -
> -            }
> -        } finally {
> -            m_rcp = null;
> +        try {
> +            stub = rcp.exceptionThrown();
> +            m_callbacks.createFuture(rcp);
> +            m_callbacks.handleExceptionThrown(stub,ex);
> +
> +            // now, suspend this thread... until
> +            // we restart.
> +            m_callbacks.suspendFuture(rcp);
> +
> +        } catch (Exception ex2) {
> +            rcp.run();
>          }
>      }
>
> @@ -568,10 +557,10 @@
>       * The engine will call the attached debugger's handleBreakpointHit
>       * method on the next line it executes if isLineStep is true.
>       * May be used from another thread to interrupt execution.
> -     *
> +     *
>       * @param isLineStep if true, break next line
>       */
> -    public void setBreakNextLine(JsContext context, boolean isLineStep) {
> +    void setBreakNextLine(JsContext context, boolean isLineStep) {
>      }
>
>      void setCompilingFnOrScript(FnOrScript fnOrScript) {
> @@ -583,7 +572,7 @@
>       * @param debugger the debugger to be used on callbacks from
>       * the engine.
>       */
> -    public void setDebugger(JsCallbacks debugger) {
> +    void setDebugger(JsCallbacks debugger) {
>          m_callbacks = debugger;
>      }
>  }
>


----------------------------------------------------------------------------
----


> ---------------------------------------------------------------------
> To unsubscribe, e-mail: bsf-dev-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: bsf-dev-help@jakarta.apache.org


Mime
View raw message