comparison graal/com.oracle.truffle.sl/src/com/oracle/truffle/sl/builtins/SLStackTraceBuiltin.java @ 21490:3286fb5fea4a

Introducing standard I/O and error into Env and using TruffleVM to execute SL test cases. Adding SLTckTest to verify SL language interop.
author Jaroslav Tulach <jaroslav.tulach@oracle.com>
date Tue, 26 May 2015 19:11:36 +0200
parents b4e38f4ca414
children
comparison
equal deleted inserted replaced
21489:b3f1d8b23037 21490:3286fb5fea4a
50 @TruffleBoundary 50 @TruffleBoundary
51 private static String createStackTrace() { 51 private static String createStackTrace() {
52 StringBuilder str = new StringBuilder(); 52 StringBuilder str = new StringBuilder();
53 53
54 Truffle.getRuntime().iterateFrames(frameInstance -> { 54 Truffle.getRuntime().iterateFrames(frameInstance -> {
55 dumpFrame(str, frameInstance.getCallTarget(), frameInstance.getFrame(FrameAccess.READ_ONLY, true)); 55 CallTarget callTarget = frameInstance.getCallTarget();
56 Frame frame = frameInstance.getFrame(FrameAccess.READ_ONLY, true);
57 RootNode rn = ((RootCallTarget) callTarget).getRootNode();
58 if (rn.getClass().getName().contains("SLFunctionForeignAccess")) {
59 return 1;
60 }
61 if (str.length() > 0) {
62 str.append(System.getProperty("line.separator"));
63 }
64 str.append("Frame: ").append(rn.toString());
65 FrameDescriptor frameDescriptor = frame.getFrameDescriptor();
66 frameDescriptor.getSlots().stream().forEach((s) -> {
67 str.append(", ").append(s.getIdentifier()).append("=").append(frame.getValue(s));
68 });
56 return null; 69 return null;
57 }); 70 });
58 return str.toString(); 71 return str.toString();
59 } 72 }
60
61 private static void dumpFrame(StringBuilder str, CallTarget callTarget, Frame frame) {
62 if (str.length() > 0) {
63 str.append(System.getProperty("line.separator"));
64 }
65 str.append("Frame: ").append(((RootCallTarget) callTarget).getRootNode().toString());
66 FrameDescriptor frameDescriptor = frame.getFrameDescriptor();
67 for (FrameSlot s : frameDescriptor.getSlots()) {
68 str.append(", ").append(s.getIdentifier()).append("=").append(frame.getValue(s));
69 }
70 }
71 } 73 }