/** * Set a {@link DebugContextsListener listener} to be notified about changes in contexts in * guest language application. One listener can be set at a time, call with <code>null</code> to * remove the current listener. * * @param listener a listener to receive the context events, or <code>null</code> to reset it * @param includeActiveContexts whether or not this listener should be notified for present * active contexts * @since 0.30 */ public void setContextsListener(DebugContextsListener listener, boolean includeActiveContexts) { executionLifecycle.setContextsListener(listener, includeActiveContexts); }
/** * Set a {@link DebugThreadsListener listener} to be notified about changes in threads in guest * language application. One listener can be set at a time, call with <code>null</code> to * remove the current listener. * * @param listener a listener to receive the context events * @param includeInitializedThreads whether or not this listener should be notified for present * initialized threads * @since 0.30 */ public void setThreadsListener(DebugThreadsListener listener, boolean includeInitializedThreads) { executionLifecycle.setThreadsListener(listener, includeInitializedThreads); }
@Override public void onLanguageContextInitialized(TruffleContext context, LanguageInfo language) { DebugContextsListener l = contextsListener; if (l != null) { DebugContext dc = getCachedDebugContext(context); l.languageContextInitialized(dc, language); } }
/** * Evaluate the given code in this context. * * @param code the code to evaluate * @param languageId the language to evaluate the code in * @return result of the evaluation * @since 0.30 */ public DebugValue evaluate(String code, String languageId) { assert code != null; Object prevContext = context.enter(); try { Debugger debugger = executionLifecycle.getDebugger(); CallTarget target = debugger.getEnv().parse(Source.newBuilder(languageId, code, "eval").build()); Object result = target.call(); LanguageInfo languageInfo = debugger.getEnv().getLanguages().get(languageId); return new DebugValue.HeapValue(executionLifecycle.getSession(), languageInfo, null, result); } catch (IOException ex) { throw new RuntimeException(ex); } finally { context.leave(prevContext); } }
DebuggerSession(Debugger debugger, SuspendedCallback callback, SourceElement... sourceElements) { this.sessionId = SESSIONS.incrementAndGet(); this.debugger = debugger; this.callback = callback; switch (sourceElements.length) { case 0: this.sourceElements = Collections.emptySet(); break; case 1: this.sourceElements = Collections.singleton(sourceElements[0]); break; default: this.sourceElements = Collections.unmodifiableSet(new LinkedHashSet<>(Arrays.asList(sourceElements))); break; } this.hasExpressionElement = this.sourceElements.contains(SourceElement.EXPRESSION); if (Debugger.TRACE) { trace("open with callback %s", callback); } addBindings(includeInternal, sourceFilter); executionLifecycle = new DebuggerExecutionLifecycle(debugger); }
/** * Evaluate the given code in this context. * * @param code the code to evaluate * @param languageId the language to evaluate the code in * @return result of the evaluation * @since 0.30 */ public DebugValue evaluate(String code, String languageId) { assert code != null; Object prevContext = context.enter(); try { Debugger debugger = executionLifecycle.getDebugger(); CallTarget target = debugger.getEnv().parse(Source.newBuilder(code).language(languageId).name("eval").build()); Object result = target.call(); LanguageInfo languageInfo = debugger.getEnv().getLanguages().get(languageId); return new DebugValue.HeapValue(debugger, languageInfo, null, result); } catch (IOException ex) { throw new RuntimeException(ex); } finally { context.leave(prevContext); } }
@Override public void onContextClosed(TruffleContext context) { DebugContextsListener l = contextsListener; if (l != null) { DebugContext dc = getCachedDebugContext(context); l.contextClosed(dc); } }
DebuggerSession(Debugger debugger, SuspendedCallback callback, SourceElement... sourceElements) { this.sessionId = SESSIONS.incrementAndGet(); this.debugger = debugger; this.callback = callback; switch (sourceElements.length) { case 0: this.sourceElements = Collections.emptySet(); break; case 1: this.sourceElements = Collections.singleton(sourceElements[0]); break; default: this.sourceElements = Collections.unmodifiableSet(new LinkedHashSet<>(Arrays.asList(sourceElements))); break; } this.hasExpressionElement = this.sourceElements.contains(SourceElement.EXPRESSION); this.hasRootElement = this.sourceElements.contains(SourceElement.ROOT); if (Debugger.TRACE) { trace("open with callback %s", callback); } sources = new DebugSourcesResolver(); addBindings(includeInternal, sourceFilter); executionLifecycle = new DebuggerExecutionLifecycle(this); }
@Override public void onContextClosed(TruffleContext context) { DebugContextsListener l = contextsListener; if (l != null) { DebugContext dc = getCachedDebugContext(context); l.contextClosed(dc); } }
/** * Set a {@link DebugContextsListener listener} to be notified about changes in contexts in * guest language application. One listener can be set at a time, call with <code>null</code> to * remove the current listener. * * @param listener a listener to receive the context events, or <code>null</code> to reset it * @param includeActiveContexts whether or not this listener should be notified for present * active contexts * @since 0.30 */ public void setContextsListener(DebugContextsListener listener, boolean includeActiveContexts) { executionLifecycle.setContextsListener(listener, includeActiveContexts); }
/** * Set a {@link DebugThreadsListener listener} to be notified about changes in threads in guest * language application. One listener can be set at a time, call with <code>null</code> to * remove the current listener. * * @param listener a listener to receive the context events * @param includeInitializedThreads whether or not this listener should be notified for present * initialized threads * @since 0.30 */ public void setThreadsListener(DebugThreadsListener listener, boolean includeInitializedThreads) { executionLifecycle.setThreadsListener(listener, includeInitializedThreads); }
@Override public void onThreadInitialized(TruffleContext context, Thread thread) { DebugThreadsListener l = threadsListener; if (l != null) { DebugContext dc = getCachedDebugContext(context); l.threadInitialized(dc, thread); } }
@Override public void onLanguageContextFinalized(TruffleContext context, LanguageInfo language) { DebugContextsListener l = contextsListener; if (l != null) { DebugContext dc = getCachedDebugContext(context); l.languageContextFinalized(dc, language); } }
@Override public void onThreadDisposed(TruffleContext context, Thread thread) { DebugThreadsListener l = threadsListener; if (l != null) { DebugContext dc = getCachedDebugContext(context); l.threadDisposed(dc, thread); } }
@Override public void onLanguageContextCreated(TruffleContext context, LanguageInfo language) { DebugContextsListener l = contextsListener; if (l != null) { DebugContext dc = getCachedDebugContext(context); l.languageContextCreated(dc, language); } }
@Override public void onLanguageContextDisposed(TruffleContext context, LanguageInfo language) { DebugContextsListener l = contextsListener; if (l != null) { DebugContext dc = getCachedDebugContext(context); l.languageContextDisposed(dc, language); } }
@Override public void onContextCreated(TruffleContext context) { DebugContextsListener l = contextsListener; if (l != null) { DebugContext dc = getCachedDebugContext(context); l.contextCreated(dc); } }
@Override public void onContextCreated(TruffleContext context) { DebugContextsListener l = contextsListener; if (l != null) { DebugContext dc = getCachedDebugContext(context); l.contextCreated(dc); } }
@Override public void onLanguageContextFinalized(TruffleContext context, LanguageInfo language) { DebugContextsListener l = contextsListener; if (l != null) { DebugContext dc = getCachedDebugContext(context); l.languageContextFinalized(dc, language); } }
@Override public void onLanguageContextCreated(TruffleContext context, LanguageInfo language) { DebugContextsListener l = contextsListener; if (l != null) { DebugContext dc = getCachedDebugContext(context); l.languageContextCreated(dc, language); } }