# HG changeset patch # User Christian Humer # Date 1373442142 -7200 # Node ID a0309f88306ce65b11450989b802c1a2b8f53dc4 # Parent 3ae117e62905e34b146fe7a7bfa70fba5b1ca268 Added truffle option to enable detailed rewrite messages. Disabled by default. diff -r 3ae117e62905 -r a0309f88306c graal/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleOptions.java --- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleOptions.java Wed Jul 10 09:23:15 2013 +0200 +++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleOptions.java Wed Jul 10 09:42:22 2013 +0200 @@ -34,6 +34,12 @@ public static boolean TraceRewrites = false; /** + * Enables the generation of detailed rewrite reasons. Enabling this may introduce some overhead + * for rewriting nodes. + */ + public static final boolean DetailedRewriteReasons = false; + + /** * Filters rewrites that do not contain the given string in the qualified name of the source or * target class hierarchy. */ diff -r 3ae117e62905 -r a0309f88306c graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/TruffleTypes.java --- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/TruffleTypes.java Wed Jul 10 09:23:15 2013 +0200 +++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/TruffleTypes.java Wed Jul 10 09:42:22 2013 +0200 @@ -40,6 +40,8 @@ */ public final class TruffleTypes { + public static final String OPTION_DETAILED_REWRITE_REASONS = "DetailedRewriteReasons"; + private final TypeMirror node; private final TypeMirror nodeArray; private final TypeMirror unexpectedValueException; @@ -53,6 +55,7 @@ private final TypeMirror compilerDirectives; private final TypeMirror compilerAsserts; private final DeclaredType slowPath; + private final DeclaredType truffleOptions; private final List errors = new ArrayList<>(); @@ -70,6 +73,7 @@ nodeInfoAnnotation = getRequired(context, NodeInfo.class); nodeInfoKind = getRequired(context, NodeInfo.Kind.class); slowPath = getRequired(context, SlowPath.class); + truffleOptions = getRequired(context, TruffleOptions.class); } public DeclaredType getNodeInfoAnnotation() { @@ -140,6 +144,10 @@ return compilerAsserts; } + public DeclaredType getTruffleOptions() { + return truffleOptions; + } + public DeclaredType getSlowPath() { return slowPath; } diff -r 3ae117e62905 -r a0309f88306c graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/node/NodeCodeGenerator.java --- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/node/NodeCodeGenerator.java Wed Jul 10 09:23:15 2013 +0200 +++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/node/NodeCodeGenerator.java Wed Jul 10 09:42:22 2013 +0200 @@ -1113,12 +1113,22 @@ } } + private CodeTree truffleBooleanOption(CodeTreeBuilder parent, String name) { + CodeTreeBuilder builder = parent.create(); + builder.staticReference(getContext().getTruffleTypes().getTruffleOptions(), name); + return builder.getRoot(); + } + private Element createInfoMessage(NodeData node) { CodeExecutableElement method = new CodeExecutableElement(modifiers(PROTECTED, STATIC), getContext().getType(String.class), "createInfo0"); method.addParameter(new CodeVariableElement(getContext().getType(String.class), "message")); addInternalValueParameters(method, node.getGenericSpecialization(), false, false); CodeTreeBuilder builder = method.createBuilder(); + + builder.startIf().tree(truffleBooleanOption(builder, TruffleTypes.OPTION_DETAILED_REWRITE_REASONS)).end(); + builder.startBlock(); + builder.startStatement().string("StringBuilder builder = new StringBuilder(message)").end(); builder.startStatement().startCall("builder", "append").doubleQuote(" (").end().end(); @@ -1159,9 +1169,13 @@ } builder.startStatement().startCall("builder", "append").doubleQuote(")").end().end(); - builder.startReturn().string("builder.toString()").end(); + builder.end(); + builder.startElseBlock(); + builder.startReturn().string("message").end(); + builder.end(); + return method; }