Skip to content

Commit e675a29

Browse files
committed
Make source map PE-final
1 parent f34a8ec commit e675a29

File tree

3 files changed

+27
-20
lines changed

3 files changed

+27
-20
lines changed

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

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@
5151
import com.oracle.graal.python.builtins.objects.str.StringNodes;
5252
import com.oracle.graal.python.compiler.OpCodes.CollectionBits;
5353
import com.oracle.graal.python.util.PythonUtils;
54+
import com.oracle.truffle.api.CompilerDirectives;
55+
import com.oracle.truffle.api.CompilerDirectives.CompilationFinal;
5456
import com.oracle.truffle.api.source.Source;
5557
import com.oracle.truffle.api.source.SourceSection;
5658
import com.oracle.truffle.api.strings.TruffleString;
@@ -72,21 +74,21 @@ public final class CodeUnit {
7274

7375
public final int stacksize;
7476

75-
public final byte[] code;
76-
public final byte[] srcOffsetTable;
77+
@CompilationFinal(dimensions = 1) public final byte[] code;
78+
@CompilationFinal(dimensions = 1) public final byte[] srcOffsetTable;
7779
public final int flags;
7880

79-
public final TruffleString[] names;
80-
public final TruffleString[] varnames;
81-
public final TruffleString[] cellvars;
82-
public final TruffleString[] freevars;
83-
public final int[] cell2arg;
84-
public final int[] arg2cell;
81+
@CompilationFinal(dimensions = 1) public final TruffleString[] names;
82+
@CompilationFinal(dimensions = 1) public final TruffleString[] varnames;
83+
@CompilationFinal(dimensions = 1) public final TruffleString[] cellvars;
84+
@CompilationFinal(dimensions = 1) public final TruffleString[] freevars;
85+
@CompilationFinal(dimensions = 1) public final int[] cell2arg;
86+
@CompilationFinal(dimensions = 1) public final int[] arg2cell;
8587

86-
public final Object[] constants;
87-
public final long[] primitiveConstants;
88+
@CompilationFinal(dimensions = 1) public final Object[] constants;
89+
@CompilationFinal(dimensions = 1) public final long[] primitiveConstants;
8890

89-
public final int[] exceptionHandlerRanges;
91+
@CompilationFinal(dimensions = 1) public final int[] exceptionHandlerRanges;
9092

9193
public final int conditionProfileCount;
9294

@@ -96,13 +98,13 @@ public final class CodeUnit {
9698
public final int endColumn;
9799

98100
/* Lazily initialized source map */
99-
SourceMap sourceMap;
101+
@CompilationFinal SourceMap sourceMap;
100102

101103
/* Quickening data. See docs in PBytecodeRootNode */
102-
public final byte[] outputCanQuicken;
103-
public final byte[] variableShouldUnbox;
104-
public final int[][] generalizeInputsMap;
105-
public final int[][] generalizeVarsMap;
104+
@CompilationFinal(dimensions = 1) public final byte[] outputCanQuicken;
105+
@CompilationFinal(dimensions = 1) public final byte[] variableShouldUnbox;
106+
@CompilationFinal(dimensions = 1) public final int[][] generalizeInputsMap;
107+
@CompilationFinal(dimensions = 1) public final int[][] generalizeVarsMap;
106108

107109
public CodeUnit(TruffleString name, TruffleString qualname,
108110
int argCount, int kwOnlyArgCount, int positionalOnlyArgCount, int stacksize,
@@ -154,6 +156,7 @@ public CodeUnit(TruffleString name, TruffleString qualname,
154156

155157
public SourceMap getSourceMap() {
156158
if (sourceMap == null) {
159+
CompilerDirectives.transferToInterpreterAndInvalidate();
157160
sourceMap = new SourceMap(code, srcOffsetTable, startLine, startColumn);
158161
}
159162
return sourceMap;

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

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@
4444
import java.io.ByteArrayOutputStream;
4545
import java.util.Arrays;
4646

47+
import com.oracle.truffle.api.CompilerAsserts;
48+
import com.oracle.truffle.api.CompilerDirectives.CompilationFinal;
4749
import com.oracle.truffle.api.source.Source;
4850
import com.oracle.truffle.api.source.SourceSection;
4951

@@ -52,10 +54,10 @@
5254
* bytecode.
5355
*/
5456
public class SourceMap {
55-
public final int[] startLineMap;
56-
public final int[] endLineMap;
57-
public final int[] startColumnMap;
58-
public final int[] endColumnMap;
57+
@CompilationFinal(dimensions = 1) public final int[] startLineMap;
58+
@CompilationFinal(dimensions = 1) public final int[] endLineMap;
59+
@CompilationFinal(dimensions = 1) public final int[] startColumnMap;
60+
@CompilationFinal(dimensions = 1) public final int[] endColumnMap;
5961

6062
private static final byte EXTENDED_NUM = -128;
6163
private static final byte NEXT_LINE = -127;
@@ -66,6 +68,7 @@ public class SourceMap {
6668
private static final byte MULTIPLIER_POSITIVE = MAX_NUM;
6769

6870
public SourceMap(byte[] code, byte[] srcTable, int startLine, int startColumn) {
71+
CompilerAsserts.neverPartOfCompilation();
6972
startLineMap = new int[code.length];
7073
endLineMap = new int[code.length];
7174
startColumnMap = new int[code.length];

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/bytecode/PBytecodeRootNode.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2184,6 +2184,7 @@ private Object bytecodeLoop(VirtualFrame virtualFrame, Frame localFrame, Bytecod
21842184
// Need to handle instrumentation frame unwind
21852185
Object result = notifyException(virtualFrame, instrumentation, mutableData, bci, e);
21862186
if (result == ProbeNode.UNWIND_ACTION_REENTER) {
2187+
CompilerDirectives.transferToInterpreter();
21872188
copyArgs(virtualFrame.getArguments(), virtualFrame);
21882189
bci = 0;
21892190
stackTop = getInitialStackTop();

0 commit comments

Comments
 (0)