use of com.oracle.truffle.tools.chromeinspector.commands.Params in project graal by oracle.
the class TruffleRuntime method evaluate.
@Override
public Params evaluate(String expression, String objectGroup, boolean includeCommandLineAPI, boolean silent, int contextId, boolean returnByValue, boolean awaitPromise) throws CommandProcessException {
if (expression == null) {
throw new CommandProcessException("An expression required.");
}
JSONObject json = new JSONObject();
DebuggerSuspendedInfo suspendedInfo = context.getSuspendedInfo();
if (suspendedInfo != null) {
try {
context.executeInSuspendThread(new SuspendThreadExecutable<Void>() {
@Override
public Void executeCommand() throws CommandProcessException {
JSONObject result;
DebugValue value = suspendedInfo.getSuspendedEvent().getTopStackFrame().eval(expression);
if (returnByValue) {
result = RemoteObject.createJSONResultValue(value, context.getErr());
} else {
RemoteObject ro = new RemoteObject(value, context.getErr());
context.getRemoteObjectsHandler().register(ro);
result = ro.toJSON();
}
json.put("result", result);
return null;
}
});
} catch (NoSuspendedThreadException ex) {
JSONObject exceptionDetails = new JSONObject();
exceptionDetails.put("text", ex.getLocalizedMessage());
json.put("exceptionDetails", exceptionDetails);
} catch (GuestLanguageException ex) {
fillExceptionDetails(json, ex);
}
} else {
JSONObject exceptionDetails = new JSONObject();
exceptionDetails.put("text", "<Not suspended>");
json.put("exceptionDetails", exceptionDetails);
}
return new Params(json);
}
use of com.oracle.truffle.tools.chromeinspector.commands.Params in project graal by oracle.
the class TruffleRuntime method getProperties.
@Override
public Params getProperties(String objectId, boolean ownProperties) throws CommandProcessException {
if (objectId == null) {
throw new CommandProcessException("An objectId required.");
}
RemoteObject object = context.getRemoteObjectsHandler().getRemote(objectId);
JSONObject json = new JSONObject();
if (object != null) {
DebugValue value = object.getDebugValue();
try {
if (value != null) {
context.executeInSuspendThread(new SuspendThreadExecutable<Void>() {
@Override
public Void executeCommand() throws CommandProcessException {
putResultProperties(json, value.getProperties(), value.isArray() ? value.getArray() : Collections.emptyList());
return null;
}
});
} else {
final DebugScope scope = object.getScope();
context.executeInSuspendThread(new SuspendThreadExecutable<Void>() {
@Override
public Void executeCommand() throws CommandProcessException {
Collection<DebugValue> properties = new ArrayList<>();
for (DebugValue p : scope.getDeclaredValues()) {
properties.add(p);
}
putResultProperties(json, properties, Collections.emptyList());
return null;
}
});
}
} catch (NoSuspendedThreadException ex) {
// Not suspended, no properties
json.put("result", new JSONArray());
} catch (GuestLanguageException ex) {
fillExceptionDetails(json, ex);
}
}
return new Params(json);
}
use of com.oracle.truffle.tools.chromeinspector.commands.Params in project graal by oracle.
the class TruffleRuntime method compileScript.
@Override
public Params compileScript(String expression, String sourceURL, boolean persistScript, long executionContextId) throws CommandProcessException {
if (expression == null) {
throw new CommandProcessException("An expression required.");
}
JSONObject ret = new JSONObject();
ScriptsHandler sh = context.getScriptsHandler();
try {
if (sh != null) {
Source source = createSource(expression, sourceURL);
boolean parsed = false;
String[] exceptionText = new String[1];
if (context.getSuspendedInfo() != null) {
try {
parsed = context.executeInSuspendThread(new SuspendThreadExecutable<Boolean>() {
@Override
public Boolean executeCommand() throws CommandProcessException {
try {
context.getEnv().parse(source);
return true;
} catch (Exception ex) {
// Didn't manage to parse this
exceptionText[0] = ex.getLocalizedMessage();
return false;
}
}
});
} catch (GuestLanguageException ex) {
fillExceptionDetails(ret, ex);
} catch (NoSuspendedThreadException ex) {
exceptionText[0] = ex.getLocalizedMessage();
}
} else {
// Parse on the current thread will fail most likely due to a lack of context
parsed = false;
exceptionText[0] = "<Not suspended>";
}
if (parsed && persistScript) {
int id = sh.assureLoaded(source);
ret.put("scriptId", Integer.toString(id));
}
if (exceptionText[0] != null) {
JSONObject exceptionDetails = new JSONObject();
exceptionDetails.put("text", exceptionText[0]);
ret.put("exceptionDetails", exceptionDetails);
}
}
} finally {
context.releaseScriptsHandler();
}
return new Params(ret);
}
use of com.oracle.truffle.tools.chromeinspector.commands.Params in project graal by oracle.
the class BreakpointsHandler method createURLBreakpoint.
Params createURLBreakpoint(Object url, int line, int column, String condition) {
JSONArray locations = new JSONArray();
long id;
LoadScriptListener scriptListener;
synchronized (bpIDs) {
id = ++lastID;
scriptListener = script -> {
if (url instanceof Pattern ? ((Pattern) url).matcher(script.getUrl()).matches() : url.equals(script.getUrl())) {
Breakpoint bp = createBuilder(script.getSource(), line, column).resolveListener(resolvedHandler).build();
if (condition != null && !condition.isEmpty()) {
bp.setCondition(condition);
}
bp = ds.install(bp);
synchronized (bpIDs) {
bpIDs.put(bp, id);
SourceSection section = resolvedBreakpoints.remove(bp);
if (section != null) {
Location resolvedLocation = new Location(script.getId(), section.getStartLine(), section.getStartColumn());
locations.put(resolvedLocation.toJSON());
}
}
}
};
scriptListeners.put(id, scriptListener);
}
slh.addLoadScriptListener(scriptListener);
JSONObject json = new JSONObject();
json.put("breakpointId", Long.toString(id));
json.put("locations", locations);
return new Params(json);
}
use of com.oracle.truffle.tools.chromeinspector.commands.Params in project graal by oracle.
the class InspectServerSession method getDomains.
private static Params getDomains() {
JSONArray domains = new JSONArray();
domains.put(createJsonDomain("Runtime"));
domains.put(createJsonDomain("Debugger"));
domains.put(createJsonDomain("Profiler"));
domains.put(createJsonDomain("Schema"));
JSONObject domainsObj = new JSONObject();
domainsObj.put("domains", domains);
return new Params(domainsObj);
}
Aggregations