Skip to content

Commit 99fc40a

Browse files
committed
Improve __graalpython__.dis for Bytecode DSL
1 parent 6b55141 commit 99fc40a

File tree

4 files changed

+26
-13
lines changed

4 files changed

+26
-13
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/code/PCode.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -688,14 +688,14 @@ public String toString() {
688688
public String toDisassembledString(boolean quickened) {
689689
RootNode rootNode = getRootCallTarget().getRootNode();
690690
if (PythonOptions.ENABLE_BYTECODE_DSL_INTERPRETER && rootNode instanceof PBytecodeDSLRootNode dslRoot) {
691-
return dslRoot.getCodeUnit().toString(quickened);
691+
return dslRoot.getCodeUnit().toString(quickened, dslRoot);
692692
} else if (rootNode instanceof PBytecodeGeneratorRootNode r) {
693693
rootNode = r.getBytecodeRootNode();
694694
} else if (rootNode instanceof PBytecodeGeneratorFunctionRootNode r) {
695695
rootNode = r.getBytecodeRootNode();
696696
}
697697
if (rootNode instanceof PBytecodeRootNode bytecodeRootNode) {
698-
return bytecodeRootNode.getCodeUnit().toString(quickened);
698+
return bytecodeRootNode.getCodeUnit().toString(quickened, bytecodeRootNode);
699699
}
700700
return J_EMPTY_STRING;
701701
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/compiler/BytecodeCodeUnit.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@
5959
import com.oracle.truffle.api.CompilerDirectives;
6060
import com.oracle.truffle.api.CompilerDirectives.CompilationFinal;
6161
import com.oracle.truffle.api.nodes.Node;
62+
import com.oracle.truffle.api.nodes.RootNode;
6263
import com.oracle.truffle.api.strings.TruffleString;
6364

6465
public final class BytecodeCodeUnit extends CodeUnit {
@@ -149,7 +150,7 @@ public void generalizeInputs(int bci) {
149150
}
150151

151152
@Override
152-
protected void dumpBytecode(StringBuilder sb, boolean quickened) {
153+
protected void dumpBytecode(StringBuilder sb, boolean quickened, RootNode rootNode) {
153154
int bci = 0;
154155
int oparg = 0;
155156
SourceMap map = getSourceMap();

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/compiler/CodeUnit.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
import com.oracle.graal.python.builtins.objects.code.PCode;
4848
import com.oracle.graal.python.builtins.objects.function.Signature;
4949
import com.oracle.truffle.api.CompilerDirectives.CompilationFinal;
50+
import com.oracle.truffle.api.nodes.RootNode;
5051
import com.oracle.truffle.api.source.Source;
5152
import com.oracle.truffle.api.source.SourceSection;
5253
import com.oracle.truffle.api.strings.TruffleString;
@@ -180,16 +181,18 @@ public final Signature computeSignature() {
180181

181182
@Override
182183
public String toString() {
183-
return toString(false);
184+
return toString(false, null);
184185
}
185186

186-
protected abstract void dumpBytecode(StringBuilder sb, boolean optimized);
187+
protected abstract void dumpBytecode(StringBuilder sb, boolean optimized, RootNode rootNode);
187188

188189
/**
189190
* @param optimized Whether to print the initial state of the bytecode or current state, if
190191
* available, where some instructions may be transformed, e.g., quickened.
192+
* @param rootNode The root node if available (Bytecode DSL code unit may contain just
193+
* serialized code).
191194
*/
192-
public String toString(boolean optimized) {
195+
public String toString(boolean optimized, RootNode rootNode) {
193196
StringBuilder sb = new StringBuilder();
194197

195198
sb.append("Disassembly of ").append(qualname).append(":\n");
@@ -208,12 +211,12 @@ public String toString(boolean optimized) {
208211
sb.append("Flags: ").append(String.join(" | ", flagNames)).append("\n");
209212
}
210213

211-
dumpBytecode(sb, optimized);
214+
dumpBytecode(sb, optimized, rootNode);
212215

213216
for (Object c : constants) {
214217
if (c instanceof CodeUnit cd) {
215218
sb.append('\n');
216-
sb.append(cd.toString(optimized));
219+
sb.append(cd.toString(optimized, null));
217220
}
218221
}
219222

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/bytecode_dsl/BytecodeDSLCodeUnit.java

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@
5353
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
5454
import com.oracle.truffle.api.bytecode.BytecodeRootNodes;
5555
import com.oracle.truffle.api.bytecode.serialization.BytecodeSerializer;
56+
import com.oracle.truffle.api.nodes.RootNode;
5657
import com.oracle.truffle.api.source.Source;
5758
import com.oracle.truffle.api.strings.TruffleString;
5859

@@ -130,13 +131,21 @@ public TruffleString getDocstring() {
130131
}
131132

132133
@Override
133-
protected void dumpBytecode(StringBuilder sb, boolean optimized) {
134-
for (int i = 0; i < nodes.count(); i++) {
135-
if (i != 0) {
134+
protected void dumpBytecode(StringBuilder sb, boolean optimized, RootNode rootNode) {
135+
if (nodes == null) {
136+
if (rootNode instanceof PBytecodeDSLRootNode dslRoot) {
137+
sb.append(dslRoot.dump());
136138
sb.append('\n');
137139
}
138-
sb.append(nodes.getNode(i).dump());
139-
sb.append('\n'); // dump does not print newline at the end
140+
sb.append("bytecode not available\n");
141+
} else {
142+
for (int i = 0; i < nodes.count(); i++) {
143+
if (i != 0) {
144+
sb.append('\n');
145+
}
146+
sb.append(nodes.getNode(i).dump());
147+
sb.append('\n'); // dump does not print newline at the end
148+
}
140149
}
141150
}
142151
}

0 commit comments

Comments
 (0)