5757import org .graalvm .polyglot .Value ;
5858
5959import com .oracle .truffle .llvm .toolchain .launchers .common .Driver ;
60-
61- import jline .console .UserInterruptException ;
60+ import java . util . function . Function ;
61+ import org . graalvm . shadowed . org . jline .reader .UserInterruptException ;
6262
6363public class GraalPythonMain extends AbstractLanguageLauncher {
6464 public static void main (String [] args ) {
@@ -81,7 +81,7 @@ public static void main(String[] args) {
8181 private boolean quietFlag = false ;
8282 private boolean noUserSite = false ;
8383 private boolean noSite = false ;
84- private boolean stdinIsInteractive = System .console () != null ;
84+ private final boolean stdinIsInteractive = System .console () != null ;
8585 private boolean unbufferedIO = false ;
8686 private boolean multiContext = false ;
8787 private VersionAction versionAction = VersionAction .None ;
@@ -458,7 +458,8 @@ protected void launch(Builder contextBuilder) {
458458 contextBuilder .option ("python.UnbufferedIO" , Boolean .toString (unbufferedIO ));
459459
460460 ConsoleHandler consoleHandler = createConsoleHandler (System .in , System .out );
461- contextBuilder .arguments (getLanguageId (), programArgs .toArray (new String [0 ])).in (consoleHandler .createInputStream ());
461+ contextBuilder .arguments (getLanguageId (), programArgs .toArray (new String [programArgs .size ()]));
462+ contextBuilder .in (consoleHandler .createInputStream ());
462463 contextBuilder .option ("python.TerminalIsInteractive" , Boolean .toString (stdinIsInteractive ));
463464 contextBuilder .option ("python.TerminalWidth" , Integer .toString (consoleHandler .getTerminalWidth ()));
464465 contextBuilder .option ("python.TerminalHeight" , Integer .toString (consoleHandler .getTerminalHeight ()));
@@ -684,11 +685,12 @@ protected void collectArguments(Set<String> options) {
684685 options .add ("--show-version" );
685686 }
686687
687- public ConsoleHandler createConsoleHandler (InputStream inStream , OutputStream outStream ) {
688- if (inputFile != null || commandString != null ) {
689- return new DefaultConsoleHandler (inStream , outStream );
688+ private ConsoleHandler createConsoleHandler (InputStream inStream , OutputStream outStream ) {
689+ if (!stdinIsInteractive ) {
690+ return new DefaultConsoleHandler (inStream );
691+ } else {
692+ return new JLineConsoleHandler (inStream , outStream , false );
690693 }
691- return new JLineConsoleHandler (inStream , outStream , false );
692694 }
693695
694696 /**
@@ -799,34 +801,37 @@ private void setupREPL(Context context, ConsoleHandler consoleHandler) {
799801 // history feature
800802 evalInternal (context , "import sys\n getattr(sys, '__interactivehook__', lambda: None)()\n " );
801803 final Value readline = evalInternal (context , "import readline; readline" );
802- final Value completer = readline .getMember ("get_completer" ).execute ();
804+ final Value getCompleter = readline .getMember ("get_completer" ).execute ();
803805 final Value shouldRecord = readline .getMember ("get_auto_history" );
804806 final Value addHistory = readline .getMember ("add_history" );
805807 final Value getHistoryItem = readline .getMember ("get_history_item" );
806808 final Value setHistoryItem = readline .getMember ("replace_history_item" );
807809 final Value deleteHistoryItem = readline .getMember ("remove_history_item" );
808810 final Value clearHistory = readline .getMember ("clear_history" );
809811 final Value getHistorySize = readline .getMember ("get_current_history_length" );
810- consoleHandler .setHistory (
811- () -> shouldRecord .execute ().asBoolean (),
812- () -> getHistorySize .execute ().asInt (),
813- (item ) -> addHistory .execute (item ),
814- (pos ) -> getHistoryItem .execute (pos ).asString (),
815- (pos , item ) -> setHistoryItem .execute (pos , item ),
816- (pos ) -> deleteHistoryItem .execute (pos ),
817- () -> clearHistory .execute ());
818812
819- if (completer .canExecute ()) {
820- consoleHandler .addCompleter ((buffer ) -> {
813+ Function <String , List <String >> completer = null ;
814+ if (getCompleter .canExecute ()) {
815+ completer = (buffer ) -> {
821816 List <String > candidates = new ArrayList <>();
822- Value candidate = completer .execute (buffer , candidates .size ());
817+ Value candidate = getCompleter .execute (buffer , candidates .size ());
823818 while (candidate .isString ()) {
824819 candidates .add (candidate .asString ());
825- candidate = completer .execute (buffer , candidates .size ());
820+ candidate = getCompleter .execute (buffer , candidates .size ());
826821 }
827822 return candidates ;
828- }) ;
823+ };
829824 }
825+ consoleHandler .setupReader (
826+ () -> shouldRecord .execute ().asBoolean (),
827+ () -> getHistorySize .execute ().asInt (),
828+ (item ) -> addHistory .execute (item ),
829+ (pos ) -> getHistoryItem .execute (pos ).asString (),
830+ (pos , item ) -> setHistoryItem .execute (pos , item ),
831+ (pos ) -> deleteHistoryItem .execute (pos ),
832+ () -> clearHistory .execute (),
833+ completer );
834+
830835 }
831836
832837 /**
0 commit comments