Skip to content

Commit 5f4e633

Browse files
committed
SysModuleBuiltins: fix display line the correct encoding
1 parent d5c10b2 commit 5f4e633

File tree

1 file changed

+22
-5
lines changed

1 file changed

+22
-5
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/SysModuleBuiltins.java

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,11 @@
5555
import static com.oracle.graal.python.nodes.SpecialAttributeNames.__STDOUT__;
5656
import static com.oracle.graal.python.nodes.SpecialMethodNames.__SIZEOF__;
5757

58+
import java.io.BufferedReader;
5859
import java.io.IOException;
5960
import java.nio.ByteOrder;
6061
import java.nio.charset.Charset;
62+
import java.nio.charset.StandardCharsets;
6163
import java.util.Arrays;
6264
import java.util.Date;
6365
import java.util.HashSet;
@@ -67,6 +69,7 @@
6769

6870
import org.graalvm.nativeimage.ImageInfo;
6971

72+
import com.oracle.graal.python.PythonFileDetector;
7073
import com.oracle.graal.python.PythonLanguage;
7174
import com.oracle.graal.python.annotations.ArgumentClinic;
7275
import com.oracle.graal.python.annotations.ArgumentClinic.ClinicConversion;
@@ -153,7 +156,6 @@
153156
import com.oracle.truffle.api.frame.VirtualFrame;
154157
import com.oracle.truffle.api.nodes.Node;
155158
import com.oracle.truffle.api.profiles.ConditionProfile;
156-
import com.oracle.truffle.api.source.Source;
157159

158160
@CoreFunctions(defineModule = "sys", isEager = true)
159161
public class SysModuleBuiltins extends PythonBuiltins {
@@ -1046,13 +1048,28 @@ private static String getIndent(int indent) {
10461048
CharSequence getSourceLine(String fileName, int lineNo) {
10471049
final PythonContext context = getContext();
10481050
TruffleFile file = context.getEnv().getInternalTruffleFile(fileName);
1049-
final Source source;
1051+
String line = null;
10501052
try {
1051-
source = PythonLanguage.newSource(context, file, fileName);
1052-
return source.getCharacters(lineNo);
1053+
Charset encoding;
1054+
try {
1055+
encoding = PythonFileDetector.findEncodingStrict(file);
1056+
} catch (PythonFileDetector.InvalidEncodingException e) {
1057+
encoding = StandardCharsets.UTF_8;
1058+
}
1059+
BufferedReader reader = file.newBufferedReader(encoding);
1060+
int i = 1;
1061+
while (i <= lineNo) {
1062+
if (i == lineNo) {
1063+
line = reader.readLine();
1064+
} else {
1065+
reader.readLine();
1066+
}
1067+
i++;
1068+
}
10531069
} catch (IOException ioe) {
1054-
return null;
1070+
line = null;
10551071
}
1072+
return line;
10561073
}
10571074

10581075
void displaySourceLine(VirtualFrame frame, Object out, String fileName, int lineNo, int indent) {

0 commit comments

Comments
 (0)