From 42e1ada837d2b0f75eff1b039f39d1d9083c3c27 Mon Sep 17 00:00:00 2001 From: noti0na1 Date: Mon, 24 Feb 2025 19:37:29 +0100 Subject: [PATCH 1/8] Add REPL flag to quit after evaluating init script --- bin/replQ | 6 + .../tools/dotc/config/ScalaSettings.scala | 1 + .../src/dotty/tools/repl/ReplDriver.scala | 4 +- .../tools/scripting/BashExitCodeTests.scala | 3 + .../dotty/tools/scripting/ScriptTestEnv.scala | 5 +- dist/bin/repl | 88 ++++++++++++++ dist/bin/repl.bat | 110 ++++++++++++++++++ 7 files changed, 214 insertions(+), 3 deletions(-) create mode 100755 bin/replQ create mode 100755 dist/bin/repl create mode 100644 dist/bin/repl.bat diff --git a/bin/replQ b/bin/replQ new file mode 100755 index 000000000000..5d0b84c4a229 --- /dev/null +++ b/bin/replQ @@ -0,0 +1,6 @@ +#!/usr/bin/env bash + +ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" >& /dev/null && pwd)/.." +. $ROOT/bin/commonQ + +java -Dscala.usejavacp=true -cp $cp dotty.tools.repl.Main -usejavacp "$@" diff --git a/compiler/src/dotty/tools/dotc/config/ScalaSettings.scala b/compiler/src/dotty/tools/dotc/config/ScalaSettings.scala index 8dfe72cf85d4..ac08c039c254 100644 --- a/compiler/src/dotty/tools/dotc/config/ScalaSettings.scala +++ b/compiler/src/dotty/tools/dotc/config/ScalaSettings.scala @@ -135,6 +135,7 @@ trait CommonScalaSettings: val usejavacp: Setting[Boolean] = BooleanSetting("-usejavacp", "Utilize the java.class.path in classpath resolution.", aliases = List("--use-java-class-path")) val scalajs: Setting[Boolean] = BooleanSetting("-scalajs", "Compile in Scala.js mode (requires scalajs-library.jar on the classpath).", aliases = List("--scalajs")) val replInitScript: Setting[String] = StringSetting("-repl-init-script", "code", "The code will be run on REPL startup.", "", aliases = List("--repl-init-script")) + val replEvalOnly: Setting[Boolean] = BooleanSetting("-repl-eval", "Quit REPL after evaluating the init script.", aliases = List("--repl-eval")) end CommonScalaSettings diff --git a/compiler/src/dotty/tools/repl/ReplDriver.scala b/compiler/src/dotty/tools/repl/ReplDriver.scala index bd97336fc792..492cc1f60c5a 100644 --- a/compiler/src/dotty/tools/repl/ReplDriver.scala +++ b/compiler/src/dotty/tools/repl/ReplDriver.scala @@ -139,7 +139,9 @@ class ReplDriver(settings: Array[String], * * Possible reason for unsuccessful run are raised flags in CLI like --help or --version */ - final def tryRunning = if shouldStart then runUntilQuit() + final def tryRunning = if shouldStart then + if rootCtx.settings.replEvalOnly.value(using rootCtx) then initialState + else runUntilQuit() /** Run REPL with `state` until `:quit` command found * diff --git a/compiler/test/dotty/tools/scripting/BashExitCodeTests.scala b/compiler/test/dotty/tools/scripting/BashExitCodeTests.scala index f2e64b5fad62..c76aa25ac84d 100644 --- a/compiler/test/dotty/tools/scripting/BashExitCodeTests.scala +++ b/compiler/test/dotty/tools/scripting/BashExitCodeTests.scala @@ -30,6 +30,7 @@ class BashExitCodeTests: def scala(args: String*) = verifyExit(scalaPath, args*) def scalacRaw(args: String*) = verifyExit(scalacPath, args*) def scalac(args: String*) = scalacRaw(("-d" +: tmpDir +: args)*) + def repl(args: String*) = verifyExit(replPath, args*) /** The path to the test file for this class. */ def f(body: String, suffix: String = ".scala"): String = @@ -62,6 +63,8 @@ class BashExitCodeTests: @Test def xPluginList = scala("-Xplugin-list")(0) @Test def vPhases = scala("-Vphases")(0) + @Test def replEval = repl("--repl-eval", "--repl-init-script", "\'println(\"Hello from init script!\"); val i = 2 * 2\'")(0) + /** A utility for running two commands in a row, like you do in bash. */ extension (inline u1: Unit) inline def & (inline u2: Unit): Unit = { u1; u2 } end BashExitCodeTests diff --git a/compiler/test/dotty/tools/scripting/ScriptTestEnv.scala b/compiler/test/dotty/tools/scripting/ScriptTestEnv.scala index 1db92d5415b4..7792ecb34239 100644 --- a/compiler/test/dotty/tools/scripting/ScriptTestEnv.scala +++ b/compiler/test/dotty/tools/scripting/ScriptTestEnv.scala @@ -234,10 +234,11 @@ object ScriptTestEnv { lazy val cwd: Path = Paths.get(".").toAbsolutePath.normalize - lazy val (scalacPath: String, scalaPath: String) = { + lazy val (scalacPath: String, scalaPath: String, replPath: String) = { val scalac = s"$workingDirectory/dist/target/pack/bin/scalac".toPath.normalize val scala = s"$workingDirectory/dist/target/pack/bin/scala".toPath.normalize - (scalac.norm, scala.norm) + val repl = s"$workingDirectory/dist/target/pack/bin/repl".toPath.normalize + (scalac.norm, scala.norm, repl.norm) } diff --git a/dist/bin/repl b/dist/bin/repl new file mode 100755 index 000000000000..e8f0f1bae93f --- /dev/null +++ b/dist/bin/repl @@ -0,0 +1,88 @@ +#!/usr/bin/env bash + +#set -o nounset ; set -o errexit + +# Try to autodetect real location of the script +if [ -z "${PROG_HOME-}" ] ; then + ## resolve links - $0 may be a link to PROG_HOME + PRG="$0" + + # need this for relative symlinks + while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG="`dirname "$PRG"`/$link" + fi + done + + saveddir=`pwd` + + PROG_HOME=`dirname "$PRG"`/.. + + # make it fully qualified + PROG_HOME=`cd "$PROG_HOME" && pwd` + + cd "$saveddir" +fi + +source "$PROG_HOME/libexec/common" +default_java_opts="-Xmx768m -Xms768m" +withCompiler=true + +CompilerMain=dotty.tools.dotc.Main +DecompilerMain=dotty.tools.dotc.decompiler.Main +ReplMain=dotty.tools.repl.Main +ScriptingMain=dotty.tools.scripting.Main +JVM_CP_ARGS="$PROG_HOME/lib/scaladoc.jar" + +PROG_NAME=$CompilerMain + +addJava () { + java_args+=("'$1'") +} +addScala () { + scala_args+=("'$1'") +} +addResidual () { + residual_args+=("'$1'") +} +addScrip() { + script_args+=("'$1'") +} + +#for A in "$@" ; do echo "A[$A]" ; done ; exit 2 + +while [[ $# -gt 0 ]]; do +case "$1" in + --) shift; for arg; do addResidual "$arg"; done; set -- ;; + -v|-verbose) verbose=true && addScala "-verbose" && shift ;; + -q|-quiet) quiet=true && shift ;; + + -colors) colors=true && shift ;; + -no-colors) unset colors && shift ;; + # break out -D and -J options and add them to java_args so + # they reach the JVM in time to do some good. The -D options + # will be available as system properties. + -D*) addJava "$1" && shift ;; + -J*) addJava "${1:2}" && shift ;; + *) addResidual "$1" + shift + ;; + esac +done + +eval "\"$JAVACMD\"" \ + ${JAVA_OPTS:-$default_java_opts} \ + "${java_args[@]}" \ + -classpath "${JVM_CP_ARGS}" \ + -Dscala.expandjavacp=true \ + -Dscala.usejavacp=true \ + "dotty.tools.repl.Main" \ + "${scala_args[@]}" \ + "${residual_args[@]}" \ + "${scripting_string-}" +scala_exit_status=$? +onExit diff --git a/dist/bin/repl.bat b/dist/bin/repl.bat new file mode 100644 index 000000000000..5d710850c5ff --- /dev/null +++ b/dist/bin/repl.bat @@ -0,0 +1,110 @@ +@echo off +setlocal enabledelayedexpansion + +@rem ######################################################################### +@rem ## Environment setup + +set _EXITCODE=0 + +for %%f in ("%~dp0.") do ( + set "_PROG_HOME=%%~dpf" + @rem get rid of the trailing slash + set "_PROG_HOME=!_PROG_HOME:~0,-1!" +) +call "%_PROG_HOME%\libexec\common.bat" +if not %_EXITCODE%==0 goto end + +set _DEFAULT_JAVA_OPTS=-Xmx768m -Xms768m + +call :args %* + +@rem ######################################################################### +@rem ## Main + +if defined JAVA_OPTS ( set _JAVA_OPTS=%JAVA_OPTS% +) else ( set _JAVA_OPTS=%_DEFAULT_JAVA_OPTS% +) + +@rem we need to escape % in the java command path, for some reason this doesnt work in common.bat +set "_JAVACMD=!_JAVACMD:%%=%%%%!" + +call "%_JAVACMD%" %_JAVA_OPTS% %_JAVA_DEBUG% %_JAVA_ARGS% ^ +-classpath "%_LIB_DIR%\scaladoc.jar" ^ +-Dscala.expandjavacp=true ^ +-Dscala.usejavacp=true ^ +dotty.tools.repl.Main %_SCALA_ARGS% %_RESIDUAL_ARGS% +if not %ERRORLEVEL%==0 ( + @rem echo Error: Scaladoc execution failed 1>&2 + set _EXITCODE=1 + goto end +) +goto end + +@rem ######################################################################### +@rem ## Subroutines + +:args +set _JAVA_DEBUG= +set _HELP= +set _VERBOSE= +set _QUIET= +set _COLORS= +set _SCALA_ARGS= +set _JAVA_ARGS= +set _RESIDUAL_ARGS= + +:args_loop +if "%~1"=="" goto args_done +set "__ARG=%~1" +if "%__ARG%"=="--" ( + @rem for arg; do addResidual "$arg"; done; set -- ;; +) else if "%__ARG%"=="-h" ( + set _HELP=true + call :addScala "-help" +) else if "%__ARG%"=="-help" ( + set _HELP=true + call :addScala "-help" +) else if "%__ARG%"=="-v" ( + set _VERBOSE=true + call :addScala "-verbose" +) else if "%__ARG%"=="-verbose" ( + set _VERBOSE=true + call :addScala "-verbose" +) else if "%__ARG%"=="-debug" ( set "_JAVA_DEBUG=%_DEBUG_STR%" +) else if "%__ARG%"=="-q" ( set _QUIET=true +) else if "%__ARG%"=="-quiet" ( set _QUIET=true +) else if "%__ARG%"=="-colors" ( set _COLORS=true +) else if "%__ARG%"=="-no-colors" ( set _COLORS= +) else if "%__ARG:~0,2%"=="-D" ( call :addJava "%__ARG%" +) else if "%__ARG:~0,2%"=="-J" ( call :addJava "%__ARG:~2%" +) else ( + if defined _IN_SCRIPTING_ARGS ( call :addScripting "%__ARG%" + ) else ( call :addResidual "%__ARG%" + ) +) +shift +goto args_loop +:args_done +goto :eof + +@rem output parameter: _SCALA_ARGS +:addScala +set _SCALA_ARGS=%_SCALA_ARGS% %~1 +goto :eof + +@rem output parameter: _JAVA_ARGS +:addJava +set _JAVA_ARGS=%_JAVA_ARGS% %~1 +goto :eof + +@rem output parameter: _RESIDUAL_ARGS +:addResidual +set _RESIDUAL_ARGS=%_RESIDUAL_ARGS% %~1 +goto :eof + +@rem ######################################################################### +@rem ## Cleanups + +:end +exit /b %_EXITCODE% +endlocal From 4eff65527b981a91720beb3fa4826a0fcdd9081f Mon Sep 17 00:00:00 2001 From: Tomasz Godzik Date: Wed, 23 Apr 2025 11:11:52 +0200 Subject: [PATCH 2/8] Add REPL flag to quit after evaluating init script [Cherry-picked 1a9ba3a2cd555bd73b92148326e1a62d18ccb1f6][modified] From db49c88213e51fda8141880a3aee3c238c84f217 Mon Sep 17 00:00:00 2001 From: noti0na1 Date: Wed, 26 Feb 2025 13:49:42 +0100 Subject: [PATCH 3/8] Remove repl bin; rename flag --- .../tools/dotc/config/ScalaSettings.scala | 2 +- .../tools/scripting/BashExitCodeTests.scala | 4 +- .../dotty/tools/scripting/ScriptTestEnv.scala | 5 +- dist/bin/repl | 88 -------------- dist/bin/repl.bat | 110 ------------------ 5 files changed, 5 insertions(+), 204 deletions(-) delete mode 100755 dist/bin/repl delete mode 100644 dist/bin/repl.bat diff --git a/compiler/src/dotty/tools/dotc/config/ScalaSettings.scala b/compiler/src/dotty/tools/dotc/config/ScalaSettings.scala index ac08c039c254..9ad6b82984ec 100644 --- a/compiler/src/dotty/tools/dotc/config/ScalaSettings.scala +++ b/compiler/src/dotty/tools/dotc/config/ScalaSettings.scala @@ -135,7 +135,7 @@ trait CommonScalaSettings: val usejavacp: Setting[Boolean] = BooleanSetting("-usejavacp", "Utilize the java.class.path in classpath resolution.", aliases = List("--use-java-class-path")) val scalajs: Setting[Boolean] = BooleanSetting("-scalajs", "Compile in Scala.js mode (requires scalajs-library.jar on the classpath).", aliases = List("--scalajs")) val replInitScript: Setting[String] = StringSetting("-repl-init-script", "code", "The code will be run on REPL startup.", "", aliases = List("--repl-init-script")) - val replEvalOnly: Setting[Boolean] = BooleanSetting("-repl-eval", "Quit REPL after evaluating the init script.", aliases = List("--repl-eval")) + val replEvalOnly: Setting[Boolean] = BooleanSetting("-repl-quit-after-init", "Quit REPL after evaluating the init script.", aliases = List("--repl-quit-after-init")) end CommonScalaSettings diff --git a/compiler/test/dotty/tools/scripting/BashExitCodeTests.scala b/compiler/test/dotty/tools/scripting/BashExitCodeTests.scala index c76aa25ac84d..64ba94eac428 100644 --- a/compiler/test/dotty/tools/scripting/BashExitCodeTests.scala +++ b/compiler/test/dotty/tools/scripting/BashExitCodeTests.scala @@ -30,7 +30,7 @@ class BashExitCodeTests: def scala(args: String*) = verifyExit(scalaPath, args*) def scalacRaw(args: String*) = verifyExit(scalacPath, args*) def scalac(args: String*) = scalacRaw(("-d" +: tmpDir +: args)*) - def repl(args: String*) = verifyExit(replPath, args*) + def repl(args: String*) = verifyExit(scalaPath, "--power", "repl", "--offline", "--", args*) /** The path to the test file for this class. */ def f(body: String, suffix: String = ".scala"): String = @@ -63,7 +63,7 @@ class BashExitCodeTests: @Test def xPluginList = scala("-Xplugin-list")(0) @Test def vPhases = scala("-Vphases")(0) - @Test def replEval = repl("--repl-eval", "--repl-init-script", "\'println(\"Hello from init script!\"); val i = 2 * 2\'")(0) + @Test def replEval = repl("--repl-quit-after-init", "--repl-init-script", "\'println(\"Hello from init script!\"); val i = 2 * 2\'")(0) /** A utility for running two commands in a row, like you do in bash. */ extension (inline u1: Unit) inline def & (inline u2: Unit): Unit = { u1; u2 } diff --git a/compiler/test/dotty/tools/scripting/ScriptTestEnv.scala b/compiler/test/dotty/tools/scripting/ScriptTestEnv.scala index 7792ecb34239..1db92d5415b4 100644 --- a/compiler/test/dotty/tools/scripting/ScriptTestEnv.scala +++ b/compiler/test/dotty/tools/scripting/ScriptTestEnv.scala @@ -234,11 +234,10 @@ object ScriptTestEnv { lazy val cwd: Path = Paths.get(".").toAbsolutePath.normalize - lazy val (scalacPath: String, scalaPath: String, replPath: String) = { + lazy val (scalacPath: String, scalaPath: String) = { val scalac = s"$workingDirectory/dist/target/pack/bin/scalac".toPath.normalize val scala = s"$workingDirectory/dist/target/pack/bin/scala".toPath.normalize - val repl = s"$workingDirectory/dist/target/pack/bin/repl".toPath.normalize - (scalac.norm, scala.norm, repl.norm) + (scalac.norm, scala.norm) } diff --git a/dist/bin/repl b/dist/bin/repl deleted file mode 100755 index e8f0f1bae93f..000000000000 --- a/dist/bin/repl +++ /dev/null @@ -1,88 +0,0 @@ -#!/usr/bin/env bash - -#set -o nounset ; set -o errexit - -# Try to autodetect real location of the script -if [ -z "${PROG_HOME-}" ] ; then - ## resolve links - $0 may be a link to PROG_HOME - PRG="$0" - - # need this for relative symlinks - while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG="`dirname "$PRG"`/$link" - fi - done - - saveddir=`pwd` - - PROG_HOME=`dirname "$PRG"`/.. - - # make it fully qualified - PROG_HOME=`cd "$PROG_HOME" && pwd` - - cd "$saveddir" -fi - -source "$PROG_HOME/libexec/common" -default_java_opts="-Xmx768m -Xms768m" -withCompiler=true - -CompilerMain=dotty.tools.dotc.Main -DecompilerMain=dotty.tools.dotc.decompiler.Main -ReplMain=dotty.tools.repl.Main -ScriptingMain=dotty.tools.scripting.Main -JVM_CP_ARGS="$PROG_HOME/lib/scaladoc.jar" - -PROG_NAME=$CompilerMain - -addJava () { - java_args+=("'$1'") -} -addScala () { - scala_args+=("'$1'") -} -addResidual () { - residual_args+=("'$1'") -} -addScrip() { - script_args+=("'$1'") -} - -#for A in "$@" ; do echo "A[$A]" ; done ; exit 2 - -while [[ $# -gt 0 ]]; do -case "$1" in - --) shift; for arg; do addResidual "$arg"; done; set -- ;; - -v|-verbose) verbose=true && addScala "-verbose" && shift ;; - -q|-quiet) quiet=true && shift ;; - - -colors) colors=true && shift ;; - -no-colors) unset colors && shift ;; - # break out -D and -J options and add them to java_args so - # they reach the JVM in time to do some good. The -D options - # will be available as system properties. - -D*) addJava "$1" && shift ;; - -J*) addJava "${1:2}" && shift ;; - *) addResidual "$1" - shift - ;; - esac -done - -eval "\"$JAVACMD\"" \ - ${JAVA_OPTS:-$default_java_opts} \ - "${java_args[@]}" \ - -classpath "${JVM_CP_ARGS}" \ - -Dscala.expandjavacp=true \ - -Dscala.usejavacp=true \ - "dotty.tools.repl.Main" \ - "${scala_args[@]}" \ - "${residual_args[@]}" \ - "${scripting_string-}" -scala_exit_status=$? -onExit diff --git a/dist/bin/repl.bat b/dist/bin/repl.bat deleted file mode 100644 index 5d710850c5ff..000000000000 --- a/dist/bin/repl.bat +++ /dev/null @@ -1,110 +0,0 @@ -@echo off -setlocal enabledelayedexpansion - -@rem ######################################################################### -@rem ## Environment setup - -set _EXITCODE=0 - -for %%f in ("%~dp0.") do ( - set "_PROG_HOME=%%~dpf" - @rem get rid of the trailing slash - set "_PROG_HOME=!_PROG_HOME:~0,-1!" -) -call "%_PROG_HOME%\libexec\common.bat" -if not %_EXITCODE%==0 goto end - -set _DEFAULT_JAVA_OPTS=-Xmx768m -Xms768m - -call :args %* - -@rem ######################################################################### -@rem ## Main - -if defined JAVA_OPTS ( set _JAVA_OPTS=%JAVA_OPTS% -) else ( set _JAVA_OPTS=%_DEFAULT_JAVA_OPTS% -) - -@rem we need to escape % in the java command path, for some reason this doesnt work in common.bat -set "_JAVACMD=!_JAVACMD:%%=%%%%!" - -call "%_JAVACMD%" %_JAVA_OPTS% %_JAVA_DEBUG% %_JAVA_ARGS% ^ --classpath "%_LIB_DIR%\scaladoc.jar" ^ --Dscala.expandjavacp=true ^ --Dscala.usejavacp=true ^ -dotty.tools.repl.Main %_SCALA_ARGS% %_RESIDUAL_ARGS% -if not %ERRORLEVEL%==0 ( - @rem echo Error: Scaladoc execution failed 1>&2 - set _EXITCODE=1 - goto end -) -goto end - -@rem ######################################################################### -@rem ## Subroutines - -:args -set _JAVA_DEBUG= -set _HELP= -set _VERBOSE= -set _QUIET= -set _COLORS= -set _SCALA_ARGS= -set _JAVA_ARGS= -set _RESIDUAL_ARGS= - -:args_loop -if "%~1"=="" goto args_done -set "__ARG=%~1" -if "%__ARG%"=="--" ( - @rem for arg; do addResidual "$arg"; done; set -- ;; -) else if "%__ARG%"=="-h" ( - set _HELP=true - call :addScala "-help" -) else if "%__ARG%"=="-help" ( - set _HELP=true - call :addScala "-help" -) else if "%__ARG%"=="-v" ( - set _VERBOSE=true - call :addScala "-verbose" -) else if "%__ARG%"=="-verbose" ( - set _VERBOSE=true - call :addScala "-verbose" -) else if "%__ARG%"=="-debug" ( set "_JAVA_DEBUG=%_DEBUG_STR%" -) else if "%__ARG%"=="-q" ( set _QUIET=true -) else if "%__ARG%"=="-quiet" ( set _QUIET=true -) else if "%__ARG%"=="-colors" ( set _COLORS=true -) else if "%__ARG%"=="-no-colors" ( set _COLORS= -) else if "%__ARG:~0,2%"=="-D" ( call :addJava "%__ARG%" -) else if "%__ARG:~0,2%"=="-J" ( call :addJava "%__ARG:~2%" -) else ( - if defined _IN_SCRIPTING_ARGS ( call :addScripting "%__ARG%" - ) else ( call :addResidual "%__ARG%" - ) -) -shift -goto args_loop -:args_done -goto :eof - -@rem output parameter: _SCALA_ARGS -:addScala -set _SCALA_ARGS=%_SCALA_ARGS% %~1 -goto :eof - -@rem output parameter: _JAVA_ARGS -:addJava -set _JAVA_ARGS=%_JAVA_ARGS% %~1 -goto :eof - -@rem output parameter: _RESIDUAL_ARGS -:addResidual -set _RESIDUAL_ARGS=%_RESIDUAL_ARGS% %~1 -goto :eof - -@rem ######################################################################### -@rem ## Cleanups - -:end -exit /b %_EXITCODE% -endlocal From fa115526960cf1088d75b1ab0aab2360e9a09397 Mon Sep 17 00:00:00 2001 From: Tomasz Godzik Date: Wed, 23 Apr 2025 11:23:13 +0200 Subject: [PATCH 4/8] Remove repl bin; rename flag [Cherry-picked 28c877f74b919348f6d715ff01570aee8ee89822][modified] --- compiler/test/dotty/tools/scripting/BashExitCodeTests.scala | 3 --- 1 file changed, 3 deletions(-) diff --git a/compiler/test/dotty/tools/scripting/BashExitCodeTests.scala b/compiler/test/dotty/tools/scripting/BashExitCodeTests.scala index 64ba94eac428..f2e64b5fad62 100644 --- a/compiler/test/dotty/tools/scripting/BashExitCodeTests.scala +++ b/compiler/test/dotty/tools/scripting/BashExitCodeTests.scala @@ -30,7 +30,6 @@ class BashExitCodeTests: def scala(args: String*) = verifyExit(scalaPath, args*) def scalacRaw(args: String*) = verifyExit(scalacPath, args*) def scalac(args: String*) = scalacRaw(("-d" +: tmpDir +: args)*) - def repl(args: String*) = verifyExit(scalaPath, "--power", "repl", "--offline", "--", args*) /** The path to the test file for this class. */ def f(body: String, suffix: String = ".scala"): String = @@ -63,8 +62,6 @@ class BashExitCodeTests: @Test def xPluginList = scala("-Xplugin-list")(0) @Test def vPhases = scala("-Vphases")(0) - @Test def replEval = repl("--repl-quit-after-init", "--repl-init-script", "\'println(\"Hello from init script!\"); val i = 2 * 2\'")(0) - /** A utility for running two commands in a row, like you do in bash. */ extension (inline u1: Unit) inline def & (inline u2: Unit): Unit = { u1; u2 } end BashExitCodeTests From c93f4f4b30e5bfbc7d7110745c5c132dbfc3e808 Mon Sep 17 00:00:00 2001 From: Tomasz Godzik Date: Wed, 23 Apr 2025 11:24:00 +0200 Subject: [PATCH 5/8] Fix arguments [Cherry-picked e8b1d1e163921d289f9f4a101ddfa9d76a853d5b][modified] From fce04dc4938c3681c750a167633a10693eb7bc46 Mon Sep 17 00:00:00 2001 From: noti0na1 Date: Thu, 27 Feb 2025 13:24:44 +0100 Subject: [PATCH 6/8] Rename setting name --- compiler/src/dotty/tools/dotc/config/ScalaSettings.scala | 2 +- compiler/src/dotty/tools/repl/ReplDriver.scala | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/compiler/src/dotty/tools/dotc/config/ScalaSettings.scala b/compiler/src/dotty/tools/dotc/config/ScalaSettings.scala index 9ad6b82984ec..cfd20c95a76b 100644 --- a/compiler/src/dotty/tools/dotc/config/ScalaSettings.scala +++ b/compiler/src/dotty/tools/dotc/config/ScalaSettings.scala @@ -135,7 +135,7 @@ trait CommonScalaSettings: val usejavacp: Setting[Boolean] = BooleanSetting("-usejavacp", "Utilize the java.class.path in classpath resolution.", aliases = List("--use-java-class-path")) val scalajs: Setting[Boolean] = BooleanSetting("-scalajs", "Compile in Scala.js mode (requires scalajs-library.jar on the classpath).", aliases = List("--scalajs")) val replInitScript: Setting[String] = StringSetting("-repl-init-script", "code", "The code will be run on REPL startup.", "", aliases = List("--repl-init-script")) - val replEvalOnly: Setting[Boolean] = BooleanSetting("-repl-quit-after-init", "Quit REPL after evaluating the init script.", aliases = List("--repl-quit-after-init")) + val replQuitAfterInit: Setting[Boolean] = BooleanSetting("-repl-quit-after-init", "Quit REPL after evaluating the init script.", aliases = List("--repl-quit-after-init")) end CommonScalaSettings diff --git a/compiler/src/dotty/tools/repl/ReplDriver.scala b/compiler/src/dotty/tools/repl/ReplDriver.scala index 492cc1f60c5a..282ad86efa32 100644 --- a/compiler/src/dotty/tools/repl/ReplDriver.scala +++ b/compiler/src/dotty/tools/repl/ReplDriver.scala @@ -140,7 +140,7 @@ class ReplDriver(settings: Array[String], * Possible reason for unsuccessful run are raised flags in CLI like --help or --version */ final def tryRunning = if shouldStart then - if rootCtx.settings.replEvalOnly.value(using rootCtx) then initialState + if rootCtx.settings.replQuitAfterInit.value(using rootCtx) then initialState else runUntilQuit() /** Run REPL with `state` until `:quit` command found From 9e48c64715500fdbe165ddf86cbce093285d20d8 Mon Sep 17 00:00:00 2001 From: Tomasz Godzik Date: Wed, 23 Apr 2025 11:25:12 +0200 Subject: [PATCH 7/8] Rename setting name [Cherry-picked 7c4a701bd4a83398110423c4367f686bdee0da9f][modified] From ee6ea2481058d7efcffe7386fea7f926584c310d Mon Sep 17 00:00:00 2001 From: Tomasz Godzik Date: Wed, 23 Apr 2025 11:25:36 +0200 Subject: [PATCH 8/8] Update compiler/test/dotty/tools/scripting/BashExitCodeTests.scala Co-authored-by: Hamza Remmal [Cherry-picked fbd34ec3379e4f86f74f740be389e7720f1e0e87][modified]