use of org.graalvm.polyglot.Source in project graal by oracle.
the class SuspensionFilterTest method testInternalNoSuspend.
@Test
public void testInternalNoSuspend() throws Exception {
final Source source = Source.newBuilder(InstrumentationTestLanguage.ID, "ROOT(\n" + " STATEMENT(EXPRESSION),\n" + " STATEMENT(CONSTANT(42))\n" + ")\n", "test").internal(true).build();
// No suspension filter is necessary, internal sources are ignored by default
try (DebuggerSession session = startSession()) {
session.suspendNextExecution();
startEval(source);
// does not stop in internal source
expectDone();
}
}
use of org.graalvm.polyglot.Source in project graal by oracle.
the class TimeBoxingTest method testTimeBoxing.
@Test
public void testTimeBoxing() throws Exception {
final Context context = Context.create();
Source source = Source.newBuilder(InstrumentationTestLanguage.ID, "ROOT(LOOP(infinity,STATEMENT))", "NotEnoughTime").buildLiteral();
new Timer().schedule(new TimerTask() {
@Override
public void run() {
Debugger debugger = context.getEngine().getInstruments().get("debugger").lookup(Debugger.class);
debugger.startSession(new SuspendedCallback() {
public void onSuspend(SuspendedEvent event) {
event.prepareKill();
}
}).suspendNextExecution();
}
}, 1000);
try {
// throws KillException, wrapped by PolyglotException
context.eval(source);
Assert.fail();
} catch (PolyglotException pex) {
Assert.assertEquals("com.oracle.truffle.api.debug.KillException", pex.getMessage());
}
}
use of org.graalvm.polyglot.Source in project graal by oracle.
the class ValueLanguageTest method testValueLanguage.
@Test
public void testValueLanguage() {
Source source1 = Source.create(ValuesLanguage1.ID, "i=10\n" + "s=test\n" + "a=null\n" + "b={}\n" + "b.a={}\n" + "b.j=100\n" + "b.k=200\n");
Source source2 = Source.create(ValuesLanguage2.ID, "j=20\n" + "s=test2\n" + "d=null\n" + "e={}\n" + "b.c={}\n" + "e.d={}\n" + "e.k=200\n");
try (DebuggerSession session = startSession()) {
Breakpoint bp1 = Breakpoint.newBuilder(getSourceImpl(source1)).lineIs(7).build();
session.install(bp1);
startEval(source1);
expectSuspended((SuspendedEvent event) -> {
DebugStackFrame frame = event.getTopStackFrame();
DebugValue value = frame.getScope().getDeclaredValue("i");
assertNull(value.getOriginalLanguage());
assertEquals("L1:10", value.as(String.class));
value = frame.getScope().getDeclaredValue("s");
assertNull(value.getOriginalLanguage());
assertEquals("L1:test", value.as(String.class));
value = frame.getScope().getDeclaredValue("a");
assertNull(value.getOriginalLanguage());
assertEquals("null", value.as(String.class));
value = frame.getScope().getDeclaredValue("b");
LanguageInfo lang = value.getOriginalLanguage();
assertNotNull(lang);
assertEquals(ValuesLanguage1.NAME, lang.getName());
assertEquals("{a={}, j=100}", value.as(String.class));
event.prepareContinue();
});
expectDone();
Breakpoint bp2 = Breakpoint.newBuilder(getSourceImpl(source2)).lineIs(7).build();
session.install(bp2);
startEval(source2);
expectSuspended((SuspendedEvent event) -> {
DebugStackFrame frame = event.getTopStackFrame();
DebugValue value = frame.getScope().getDeclaredValue("j");
assertNull(value.getOriginalLanguage());
assertEquals("L2:20", value.as(String.class));
value = frame.getScope().getDeclaredValue("s");
assertNull(value.getOriginalLanguage());
assertEquals("L2:test2", value.as(String.class));
value = frame.getScope().getDeclaredValue("e");
LanguageInfo lang2 = value.getOriginalLanguage();
assertNotNull(lang2);
assertEquals(ValuesLanguage2.NAME, lang2.getName());
assertEquals("{d={}}", value.as(String.class));
value = frame.getScope().getDeclaredValue("b");
LanguageInfo lang1 = value.getOriginalLanguage();
assertNotNull(lang1);
assertNotEquals(lang1, lang2);
assertEquals(ValuesLanguage1.NAME, lang1.getName());
// info from current lang2:
assertEquals("Object", value.as(String.class));
assertEquals("L2:Object", value.getMetaObject().as(String.class));
// info from original lang1:
value = value.asInLanguage(lang1);
assertEquals("{a={}, j=100, k=200, c={}}", value.as(String.class));
assertEquals("L1:Map", value.getMetaObject().as(String.class));
assertEquals("L2:Map", value.getMetaObject().asInLanguage(lang2).as(String.class));
// Properties are always in the original language:
value = frame.getScope().getDeclaredValue("b");
DebugValue a = value.getProperties().iterator().next();
assertEquals(lang1, a.getOriginalLanguage());
Iterator<DebugValue> it = value.getProperties().iterator();
it.next();
it.next();
it.next();
DebugValue c = it.next();
assertEquals(lang2, c.getOriginalLanguage());
value = value.asInLanguage(lang2);
a = value.getProperties().iterator().next();
assertEquals(lang1, a.getOriginalLanguage());
it = value.getProperties().iterator();
it.next();
it.next();
it.next();
c = it.next();
assertEquals(lang2, c.getOriginalLanguage());
value = frame.getScope().getDeclaredValue("j");
assertNull(value.getSourceLocation());
value = value.asInLanguage(lang1);
assertEquals("L1:20", value.as(String.class));
assertNull(value.getSourceLocation());
value = frame.getScope().getDeclaredValue("d");
assertEquals("null", value.as(String.class));
value = value.asInLanguage(lang1);
assertEquals("null", value.as(String.class));
value = frame.getScope().getDeclaredValue("e");
assertEquals(getSourceImpl(source2).createSection(4, 3, 2), value.getSourceLocation());
value = value.asInLanguage(lang1);
assertNull(value.getSourceLocation());
event.prepareContinue();
});
expectDone();
}
}
use of org.graalvm.polyglot.Source in project graal by oracle.
the class DebugScopeTest method testTopScope.
// Local scopes are well tested by DebugStackFrameTest and others.
@Test
public void testTopScope() {
final Source source = testSource("ROOT(DEFINE(function1,ROOT(\n" + " EXPRESSION()\n" + " )\n" + "),\n" + "DEFINE(g,ROOT(\n" + " EXPRESSION()\n" + " )\n" + "),\n" + "STATEMENT())\n");
try (DebuggerSession session = startSession()) {
session.suspendNextExecution();
startEval(source);
expectSuspended((SuspendedEvent event) -> {
DebugScope topScope = session.getTopScope(event.getSourceSection().getSource().getLanguage());
assertNotNull(topScope);
DebugValue function1 = topScope.getDeclaredValue("function1");
assertNotNull(function1);
assertTrue(function1.as(String.class).contains("Function"));
DebugValue functionType = function1.getMetaObject();
assertEquals("Function", functionType.as(String.class));
assertEquals(function1.getOriginalLanguage(), functionType.getOriginalLanguage());
DebugValue g = topScope.getDeclaredValue("g");
assertNotNull(g);
assertTrue(g.as(String.class).contains("Function"));
});
expectDone();
}
}
use of org.graalvm.polyglot.Source in project graal by oracle.
the class DebugStackFrameTest method testEvalAndSideEffects.
@Test
public void testEvalAndSideEffects() throws Throwable {
final Source source = testSource("ROOT(DEFINE(a,ROOT( \n" + " VARIABLE(a, 42), \n" + " VARIABLE(b, 43), \n" + " VARIABLE(c, 44), \n" + // will start stepping here
" STATEMENT(),\n" + " STATEMENT())\n" + "), \n" + "VARIABLE(a, 42), VARIABLE(b, 43), VARIABLE(c, 44), \n" + "CALL(a))\n");
try (DebuggerSession session = startSession()) {
session.suspendNextExecution();
startEval(source);
expectSuspended((SuspendedEvent event) -> {
Iterator<DebugStackFrame> stackFrames = event.getStackFrames().iterator();
// assert changes to the current frame
DebugStackFrame frame = stackFrames.next();
assertDynamicFrame(frame);
DebugValue aValue = frame.getScope().getDeclaredValue("a");
String aStringValue = aValue.as(String.class);
// assert changes to a parent frame
frame = stackFrames.next();
assertDynamicFrame(frame);
// assign from one stack frame to another one
frame.getScope().getDeclaredValue("a").set(aValue);
assertEquals(aStringValue, frame.getScope().getDeclaredValue("a").as(String.class));
event.prepareContinue();
});
expectDone();
}
}
Aggregations