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 ;
@@ -453,7 +453,8 @@ protected void launch(Builder contextBuilder) {
453453 contextBuilder .option ("python.UnbufferedIO" , Boolean .toString (unbufferedIO ));
454454
455455 ConsoleHandler consoleHandler = createConsoleHandler (System .in , System .out );
456- contextBuilder .arguments (getLanguageId (), programArgs .toArray (new String [0 ])).in (consoleHandler .createInputStream ());
456+ contextBuilder .arguments (getLanguageId (), programArgs .toArray (new String [programArgs .size ()]));
457+ contextBuilder .in (consoleHandler .createInputStream ());
457458 contextBuilder .option ("python.TerminalIsInteractive" , Boolean .toString (stdinIsInteractive ));
458459 contextBuilder .option ("python.TerminalWidth" , Integer .toString (consoleHandler .getTerminalWidth ()));
459460 contextBuilder .option ("python.TerminalHeight" , Integer .toString (consoleHandler .getTerminalHeight ()));
@@ -681,11 +682,12 @@ protected void collectArguments(Set<String> options) {
681682 options .add ("--show-version" );
682683 }
683684
684- public ConsoleHandler createConsoleHandler (InputStream inStream , OutputStream outStream ) {
685- if (inputFile != null || commandString != null ) {
686- return new DefaultConsoleHandler (inStream , outStream );
685+ private ConsoleHandler createConsoleHandler (InputStream inStream , OutputStream outStream ) {
686+ if (!stdinIsInteractive ) {
687+ return new DefaultConsoleHandler (inStream );
688+ } else {
689+ return new JLineConsoleHandler (inStream , outStream , false );
687690 }
688- return new JLineConsoleHandler (inStream , outStream , false );
689691 }
690692
691693 /**
@@ -796,34 +798,37 @@ private void setupREPL(Context context, ConsoleHandler consoleHandler) {
796798 // history feature
797799 evalInternal (context , "import sys\n getattr(sys, '__interactivehook__', lambda: None)()\n " );
798800 final Value readline = evalInternal (context , "import readline; readline" );
799- final Value completer = readline .getMember ("get_completer" ).execute ();
801+ final Value getCompleter = readline .getMember ("get_completer" ).execute ();
800802 final Value shouldRecord = readline .getMember ("get_auto_history" );
801803 final Value addHistory = readline .getMember ("add_history" );
802804 final Value getHistoryItem = readline .getMember ("get_history_item" );
803805 final Value setHistoryItem = readline .getMember ("replace_history_item" );
804806 final Value deleteHistoryItem = readline .getMember ("remove_history_item" );
805807 final Value clearHistory = readline .getMember ("clear_history" );
806808 final Value getHistorySize = readline .getMember ("get_current_history_length" );
807- consoleHandler .setHistory (
808- () -> shouldRecord .execute ().asBoolean (),
809- () -> getHistorySize .execute ().asInt (),
810- (item ) -> addHistory .execute (item ),
811- (pos ) -> getHistoryItem .execute (pos ).asString (),
812- (pos , item ) -> setHistoryItem .execute (pos , item ),
813- (pos ) -> deleteHistoryItem .execute (pos ),
814- () -> clearHistory .execute ());
815809
816- if (completer .canExecute ()) {
817- consoleHandler .addCompleter ((buffer ) -> {
810+ Function <String , List <String >> completer = null ;
811+ if (getCompleter .canExecute ()) {
812+ completer = (buffer ) -> {
818813 List <String > candidates = new ArrayList <>();
819- Value candidate = completer .execute (buffer , candidates .size ());
814+ Value candidate = getCompleter .execute (buffer , candidates .size ());
820815 while (candidate .isString ()) {
821816 candidates .add (candidate .asString ());
822- candidate = completer .execute (buffer , candidates .size ());
817+ candidate = getCompleter .execute (buffer , candidates .size ());
823818 }
824819 return candidates ;
825- }) ;
820+ };
826821 }
822+ consoleHandler .setupReader (
823+ () -> shouldRecord .execute ().asBoolean (),
824+ () -> getHistorySize .execute ().asInt (),
825+ (item ) -> addHistory .execute (item ),
826+ (pos ) -> getHistoryItem .execute (pos ).asString (),
827+ (pos , item ) -> setHistoryItem .execute (pos , item ),
828+ (pos ) -> deleteHistoryItem .execute (pos ),
829+ () -> clearHistory .execute (),
830+ completer );
831+
827832 }
828833
829834 /**
0 commit comments