use of com.oracle.truffle.api.source.Source in project graal by oracle.
the class InstrumentationHandler method addSourceBinding.
<T> EventBinding<T> addSourceBinding(EventBinding.Source<T> binding, boolean notifyLoaded) {
if (TRACE) {
trace("BEGIN: Adding source binding %s, %s%n", binding.getFilter(), binding.getElement());
}
this.sourceBindings.add(binding);
this.hasSourceBindings = true;
if (notifyLoaded) {
synchronized (sources) {
lazyInitializeSourcesList();
}
for (Source source : sourcesListRef.get()) {
notifySourceBindingLoaded(binding, source);
}
}
if (TRACE) {
trace("END: Added source binding %s, %s%n", binding.getFilter(), binding.getElement());
}
return binding;
}
use of com.oracle.truffle.api.source.Source in project graal by oracle.
the class BreakpointSnippets method install.
private void install() {
assert Thread.holdsLock(this);
if (sourceBinding == null) {
SourceFilter filter = locationKey.createSourceFilter();
final boolean[] sourceResolved = new boolean[] { false };
sourceBinding = debugger.getInstrumenter().attachExecuteSourceListener(filter, new ExecuteSourceListener() {
@Override
public void onExecute(ExecuteSourceEvent event) {
if (sourceResolved[0]) {
return;
}
sourceResolved[0] = true;
synchronized (Breakpoint.this) {
if (sourceBinding != null) {
sourceBinding.dispose();
}
}
Source source = event.getSource();
SourceSection location = locationKey.adjustLocation(source, debugger.getEnv(), suspendAnchor);
if (location != null) {
resolveBreakpoint(location);
}
SourceSectionFilter locationFilter = locationKey.createLocationFilter(source, suspendAnchor);
breakpointBinding = createBinding(locationFilter);
}
}, true);
if (sourceResolved[0]) {
sourceBinding.dispose();
}
} else if (breakpointBinding == null && sourceBinding.isDisposed()) {
// re-installing breakpoint
SourceSectionFilter locationFilter = locationKey.createLocationFilter(null, suspendAnchor);
breakpointBinding = createBinding(locationFilter);
}
}
use of com.oracle.truffle.api.source.Source in project graal by oracle.
the class BreakpointLocation method createSourceFilter.
SourceFilter createSourceFilter() {
if (key == null) {
return SourceFilter.ANY;
}
SourceFilter.Builder f = SourceFilter.newBuilder();
if (key instanceof URI) {
final URI sourceUri = (URI) key;
f.sourceIs(new Predicate<Source>() {
@Override
public boolean test(Source s) {
URI uri = s.getURI();
return sourceUri.equals(uri);
}
@Override
public String toString() {
return "URI equals " + sourceUri;
}
});
} else {
assert key instanceof Source;
Source s = (Source) key;
f.sourceIs(s);
}
return f.build();
}
use of com.oracle.truffle.api.source.Source in project graal by oracle.
the class Debugger method getLoadedSources.
/**
* Returns a list of all loaded sources. The sources are returned in the order as they have been
* loaded by the languages.
*
* @return an unmodifiable list of sources
* @since 0.17
* @deprecated not very flexible, polls all sources without any notification about changes.
*/
@Deprecated
public List<Source> getLoadedSources() {
final List<Source> sources = new ArrayList<>();
EventBinding<?> binding = env.getInstrumenter().attachLoadSourceListener(SourceFilter.ANY, new LoadSourceListener() {
public void onLoad(LoadSourceEvent event) {
sources.add(event.getSource());
}
}, true);
binding.dispose();
return Collections.unmodifiableList(sources);
}
use of com.oracle.truffle.api.source.Source in project graal by oracle.
the class DebuggerSessionSnippets method createBinding.
private EventBinding<? extends ExecutionEventNodeFactory> createBinding(boolean includeInternalCode, Predicate<Source> sFilter, ExecutionEventNodeFactory factory, boolean onInput, Class<?>... tags) {
Builder builder = SourceSectionFilter.newBuilder().tagIs(tags);
builder.includeInternal(includeInternalCode);
if (sFilter != null) {
builder.sourceIs(new SourceSectionFilter.SourcePredicate() {
@Override
public boolean test(Source source) {
return sFilter.test(source);
}
});
}
SourceSectionFilter ssf = builder.build();
if (onInput) {
return debugger.getInstrumenter().attachExecutionEventFactory(ssf, ssf, factory);
} else {
return debugger.getInstrumenter().attachExecutionEventFactory(ssf, factory);
}
}
Aggregations