use of com.oracle.truffle.api.debug.DebugValue 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.api.debug.DebugValue in project graal by oracle.
the class TruffleRuntime method createCodecompletion.
private JSONObject createCodecompletion(DebugValue value) {
Collection<DebugValue> properties = null;
try {
properties = value.getProperties();
} catch (Exception ex) {
PrintWriter err = context.getErr();
if (err != null) {
err.println("getProperties(" + value.getName() + ") has caused: " + ex);
ex.printStackTrace(err);
}
}
JSONObject result = new JSONObject();
JSONArray valueArray = new JSONArray();
JSONObject itemsObj = new JSONObject();
JSONArray items = new JSONArray();
if (properties != null) {
for (DebugValue property : properties) {
items.put(property.getName());
}
}
itemsObj.put("items", items);
valueArray.put(itemsObj);
result.put("type", "object");
result.put("value", valueArray);
return result;
}
use of com.oracle.truffle.api.debug.DebugValue in project graal by oracle.
the class RemoteObject method createJSONResultValue.
/**
* Create a JSON object representing the provided {@link DebugValue}. Use when a reply by value
* is requested.
*/
public static JSONObject createJSONResultValue(DebugValue debugValue, PrintWriter err) {
JSONObject json = new JSONObject();
DebugValue metaObject = getMetaObject(debugValue, null, err);
boolean isObject = isObject(debugValue, err);
String vtype = null;
if (metaObject != null) {
try {
Collection<DebugValue> properties = metaObject.getProperties();
if (properties != null) {
for (DebugValue prop : properties) {
String name = prop.getName();
if ("type".equals(name)) {
vtype = prop.as(String.class);
}
}
}
} catch (Exception ex) {
if (err != null) {
err.println("getProperties of meta object of (" + debugValue.getName() + ") has caused: " + ex);
ex.printStackTrace(err);
}
}
}
if (vtype == null) {
if (isObject) {
vtype = "object";
} else {
vtype = (metaObject != null) ? metaObject.as(String.class) : "object";
}
}
json.put("type", vtype);
json.put("value", createJSONValue(debugValue, err));
return json;
}
use of com.oracle.truffle.api.debug.DebugValue in project graal by oracle.
the class SLDebugTest method checkDebugValues.
private static void checkDebugValues(String msg, Iterable<DebugValue> values, String... expected) {
Map<String, DebugValue> valMap = new HashMap<>();
for (DebugValue value : values) {
valMap.put(value.getName(), value);
}
String message = String.format("Frame %s expected %s got %s", msg, Arrays.toString(expected), valMap.toString());
Assert.assertEquals(message, expected.length / 2, valMap.size());
for (int i = 0; i < expected.length; i = i + 2) {
String expectedIdentifier = expected[i];
String expectedValue = expected[i + 1];
DebugValue value = valMap.get(expectedIdentifier);
Assert.assertNotNull(value);
Assert.assertEquals(expectedValue, value.as(String.class));
}
}
use of com.oracle.truffle.api.debug.DebugValue in project graal by oracle.
the class SLDebugTest method checkExpressionStepPositions.
private void checkExpressionStepPositions(String stepPositions, boolean includeStatements, StepDepth... steps) {
Source source = slCode("function main() {\n" + " x = 2;\n" + " while (x >= 0 && 5 >= 0) {\n" + " a = 2 * x;\n" + " b = (a * a) / (x * x + 1);\n" + " x = x - transform(a, b);\n" + " }\n" + " return x / 1;\n" + "}\n" + "function transform(a, b) {\n" + " return (1 + 1) * (a + b);\n" + "}\n");
SourceElement[] elements;
if (includeStatements) {
elements = new SourceElement[] { SourceElement.EXPRESSION, SourceElement.STATEMENT };
} else {
elements = new SourceElement[] { SourceElement.EXPRESSION };
}
try (DebuggerSession session = startSession(elements)) {
session.suspendNextExecution();
startEval(source);
// Step through the program
StepDepth lastStep = steps[0];
int stepIndex = 0;
StepConfig expressionStepConfig = StepConfig.newBuilder().sourceElements(elements).build();
for (String stepPos : stepPositions.split("\n")) {
if (stepIndex < steps.length) {
lastStep = steps[stepIndex++];
}
final StepDepth stepDepth = lastStep;
expectSuspended((SuspendedEvent event) -> {
if (!includeStatements) {
assertTrue("Needs to be an expression", event.hasSourceElement(SourceElement.EXPRESSION));
} else {
assertTrue("Needs to be an expression or statement", event.hasSourceElement(SourceElement.EXPRESSION) || event.hasSourceElement(SourceElement.STATEMENT));
}
SourceSection ss = event.getSourceSection();
DebugValue[] inputValues = event.getInputValues();
String input = "";
if (inputValues != null) {
StringBuilder inputBuilder = new StringBuilder("(");
for (DebugValue v : inputValues) {
if (inputBuilder.length() > 1) {
inputBuilder.append(',');
}
if (v != null) {
inputBuilder.append(v.as(String.class));
} else {
inputBuilder.append("null");
}
}
inputBuilder.append(") ");
input = inputBuilder.toString();
}
DebugValue returnValue = event.getReturnValue();
String ret = (returnValue != null) ? returnValue.as(String.class) : "<none>";
String actualPos = "<" + ss.getStartLine() + ":" + ss.getStartColumn() + " - " + ss.getEndLine() + ":" + ss.getEndColumn() + "> " + input + ret;
assertEquals(stepPos, actualPos);
switch(stepDepth) {
case INTO:
event.prepareStepInto(expressionStepConfig);
break;
case OVER:
event.prepareStepOver(expressionStepConfig);
break;
case OUT:
event.prepareStepOut(expressionStepConfig);
break;
}
});
}
expectDone();
}
}
Aggregations