diff --git a/bin/elixir.bat b/bin/elixir.bat index 833438cb9da..13580fa5e5c 100644 --- a/bin/elixir.bat +++ b/bin/elixir.bat @@ -1,8 +1,7 @@ -@if defined ELIXIR_CLI_ECHO (@echo on) else (@echo off) +@echo off set ELIXIR_VERSION=1.17.0-dev -setlocal enabledelayedexpansion if ""%1""=="""" if ""%2""=="""" goto documentation if /I ""%1""==""--help"" if ""%2""=="""" goto documentation if /I ""%1""==""-h"" if ""%2""=="""" goto documentation @@ -64,13 +63,11 @@ echo ** Standalone options can't be combined with other options. goto end :shortversion -echo !ELIXIR_VERSION! +echo %ELIXIR_VERSION% goto end :parseopts - -rem Parameters for Elixir -set parsElixir= +setlocal enabledelayedexpansion rem Parameters for Erlang set parsErlang= @@ -97,48 +94,24 @@ if "!par!"=="" ( ) shift set par="!par:"=\"!" -if !endLoop! == 1 ( - set parsElixir=!parsElixir! !par! - goto startloop -) rem ******* EXECUTION OPTIONS ********************** if !par!=="--werl" (set useWerl=1 && goto startloop) -if !par!=="+iex" (set parsElixir=!parsElixir! +iex && set useIEx=1 && goto startloop) -if !par!=="+elixirc" (set parsElixir=!parsElixir! +elixirc && goto startloop) -rem ******* EVAL PARAMETERS ************************ -if ""==!par:-e=! ( - set "VAR=%~1" - if not defined VAR (set VAR= ) - set parsElixir=!parsElixir! -e "!VAR:"=\"!" - shift - goto startloop -) -if ""==!par:--eval=! ( - set "VAR=%~1" - if not defined VAR (set VAR= ) - set parsElixir=!parsElixir! --eval "!VAR:"=\"!" - shift - goto startloop -) -if ""==!par:--rpc-eval=! ( - set "VAR=%~2" - if not defined VAR (set VAR= ) - set parsElixir=!parsElixir! --rpc-eval %1 "!VAR:"=\"!" - shift - shift - goto startloop -) +if !par!=="+iex" (set useIEx=1 && goto startloop) +if !par!=="+elixirc" (goto startloop) rem ******* ELIXIR PARAMETERS ********************** -if ""==!par:-r=! (set "parsElixir=!parsElixir! -r "%~1"" && shift && goto startloop) -if ""==!par:-pr=! (set "parsElixir=!parsElixir! -pr "%~1"" && shift && goto startloop) -if ""==!par:-pa=! (set "parsElixir=!parsElixir! -pa "%~1"" && shift && goto startloop) -if ""==!par:-pz=! (set "parsElixir=!parsElixir! -pz "%~1"" && shift && goto startloop) -if ""==!par:-v=! (set "parsElixir=!parsElixir! -v" && goto startloop) -if ""==!par:--version=! (set "parsElixir=!parsElixir! --version" && goto startloop) -if ""==!par:--no-halt=! (set "parsElixir=!parsElixir! --no-halt" && goto startloop) -if ""==!par:--remsh=! (set "parsElixir=!parsElixir! --remsh "%~1"" && shift && goto startloop) -if ""==!par:--dot-iex=! (set "parsElixir=!parsElixir! --dot-iex "%~1"" && shift && goto startloop) -if ""==!par:--dbg=! (set "parsElixir=!parsElixir! --dbg "%~1"" && shift && goto startloop) +if ""==!par:-e=! (shift && goto startloop) +if ""==!par:--eval=! (shift && goto startloop) +if ""==!par:--rpc-eval=! (shift && shift && goto startloop) +if ""==!par:-r=! (shift && goto startloop) +if ""==!par:-pr=! (shift && goto startloop) +if ""==!par:-pa=! (shift && goto startloop) +if ""==!par:-pz=! (shift && goto startloop) +if ""==!par:-v=! (goto startloop) +if ""==!par:--version=! (goto startloop) +if ""==!par:--no-halt=! (goto startloop) +if ""==!par:--remsh=! (shift && goto startloop) +if ""==!par:--dot-iex=! (shift && goto startloop) +if ""==!par:--dbg=! (shift && goto startloop) rem ******* ERLANG PARAMETERS ********************** if ""==!par:--boot=! (set "parsErlang=!parsErlang! -boot "%~1"" && shift && goto startloop) if ""==!par:--boot-var=! (set "parsErlang=!parsErlang! -boot_var "%~1" "%~2"" && shift && shift && goto startloop) @@ -152,32 +125,30 @@ if ""==!par:--sname=! (set "parsErlang=!parsErlang! -sname "%~1"" if ""==!par:--vm-args=! (set "parsErlang=!parsErlang! -args_file "%~1"" && shift && goto startloop) if ""==!par:--erl=! (set "beforeExtra=!beforeExtra! %~1" && shift && goto startloop) if ""==!par:--pipe-to=! (echo --pipe-to : Option is not supported on Windows && goto end) -set endLoop=1 -set parsElixir=!parsElixir! !par! -goto startloop :run +setlocal disabledelayedexpansion reg query HKCU\Console /v VirtualTerminalLevel 2>nul | findstr /e "0x1" >nul 2>nul if %errorlevel% == 0 ( - set beforeExtra=-elixir ansi_enabled true !beforeExtra! + set beforeExtra=-elixir ansi_enabled true %beforeExtra% ) if not defined useIEx ( - set beforeExtra=-s elixir start_cli !beforeExtra! + set beforeExtra=-s elixir start_cli %beforeExtra% ) -set beforeExtra=-noshell -elixir_root "!SCRIPT_PATH!..\lib" -pa "!SCRIPT_PATH!..\lib\elixir\ebin" !beforeExtra! +set beforeExtra=-noshell -elixir_root "%SCRIPT_PATH%..\lib" -pa "%SCRIPT_PATH%..\lib\elixir\ebin" %beforeExtra% if defined ELIXIR_CLI_DRY_RUN ( if defined useWerl ( - echo start "" "!ERTS_BIN!werl.exe" !ext_libs! !ELIXIR_ERL_OPTIONS! !parsErlang! !beforeExtra! -extra !parsElixir! + echo start "" "%ERTS_BIN%werl.exe" %ext_libs% %ELIXIR_ERL_OPTIONS% %parsErlang% %beforeExtra% -extra %* ) else ( - echo "!ERTS_BIN!erl.exe" !ext_libs! !ELIXIR_ERL_OPTIONS! !parsErlang! !beforeExtra! -extra !parsElixir! + echo "%ERTS_BIN%erl.exe" %ext_libs% %ELIXIR_ERL_OPTIONS% %parsErlang% %beforeExtra% -extra %* ) ) else ( if defined useWerl ( - start "" "!ERTS_BIN!werl.exe" !ext_libs! !ELIXIR_ERL_OPTIONS! !parsErlang! !beforeExtra! -extra !parsElixir! + start "" "%ERTS_BIN%werl.exe" %ext_libs% %ELIXIR_ERL_OPTIONS% %parsErlang% %beforeExtra% -extra %* ) else ( - "!ERTS_BIN!erl.exe" !ext_libs! !ELIXIR_ERL_OPTIONS! !parsErlang! !beforeExtra! -extra !parsElixir! + "%ERTS_BIN%erl.exe" %ext_libs% %ELIXIR_ERL_OPTIONS% %parsErlang% %beforeExtra% -extra %* ) ) exit /B %ERRORLEVEL% diff --git a/bin/elixirc.bat b/bin/elixirc.bat index e046f6af282..5020f0f3ee7 100644 --- a/bin/elixirc.bat +++ b/bin/elixirc.bat @@ -1,4 +1,4 @@ -@if defined ELIXIR_CLI_ECHO (@echo on) else (@echo off) +@echo off setlocal set argc=0 for %%A in (%*) do ( diff --git a/bin/iex.bat b/bin/iex.bat index 851f408c265..36559e4b706 100644 --- a/bin/iex.bat +++ b/bin/iex.bat @@ -1,4 +1,4 @@ -@if defined ELIXIR_CLI_ECHO (@echo on) else (@echo off) +@echo off setlocal if /I ""%1""==""--help"" goto documentation if /I ""%1""==""-h"" goto documentation diff --git a/bin/mix.bat b/bin/mix.bat index 7e4a7a65386..435a5257340 100644 --- a/bin/mix.bat +++ b/bin/mix.bat @@ -1,2 +1,2 @@ -@if defined ELIXIR_CLI_ECHO (@echo on) else (@echo off) +@echo off call "%~dp0\elixir.bat" "%~dp0\mix" %* diff --git a/lib/elixir/lib/kernel/cli.ex b/lib/elixir/lib/kernel/cli.ex index 17cce1a1f6a..b9b0fd1fcbd 100644 --- a/lib/elixir/lib/kernel/cli.ex +++ b/lib/elixir/lib/kernel/cli.ex @@ -327,6 +327,8 @@ defmodule Kernel.CLI do parse_argv(t, %{config | profile: :time}) end + ## IEx + defp parse_argv([~c"--dbg", backend | t], %{mode: :iex} = config) do case backend do ~c"pry" -> @@ -344,6 +346,21 @@ defmodule Kernel.CLI do defp parse_argv([~c"--dot-iex", _ | t], %{mode: :iex} = config), do: parse_argv(t, config) defp parse_argv([~c"--remsh", _ | t], %{mode: :iex} = config), do: parse_argv(t, config) + ## Erlang flags + + defp parse_argv([~c"--boot", _ | t], config), do: parse_argv(t, config) + defp parse_argv([~c"--boot-var", _, _ | t], config), do: parse_argv(t, config) + defp parse_argv([~c"--cookie", _ | t], config), do: parse_argv(t, config) + defp parse_argv([~c"--hidden" | t], config), do: parse_argv(t, config) + defp parse_argv([~c"--erl-config", _ | t], config), do: parse_argv(t, config) + defp parse_argv([~c"--logger-otp-reports", _ | t], config), do: parse_argv(t, config) + defp parse_argv([~c"--logger-sasl-reports", _ | t], config), do: parse_argv(t, config) + defp parse_argv([~c"--name", _ | t], config), do: parse_argv(t, config) + defp parse_argv([~c"--sname", _ | t], config), do: parse_argv(t, config) + defp parse_argv([~c"--vm-args", _ | t], config), do: parse_argv(t, config) + defp parse_argv([~c"--erl", _ | t], config), do: parse_argv(t, config) + defp parse_argv([~c"--pipe-to", _, _ | t], config), do: parse_argv(t, config) + ## Fallback defp parse_argv([h | t], %{mode: :elixirc} = config) do diff --git a/lib/elixir/test/elixir/kernel/cli_test.exs b/lib/elixir/test/elixir/kernel/cli_test.exs index d450f871e61..04f9606035d 100644 --- a/lib/elixir/test/elixir/kernel/cli_test.exs +++ b/lib/elixir/test/elixir/kernel/cli_test.exs @@ -61,12 +61,20 @@ defmodule Kernel.CLITest do end) end + @tag :tmp_dir + test "file smoke test", context do + file = Path.join(context.tmp_dir, "hello_world!.exs") + File.write!(file, "IO.puts :hello_world123") + {output, 0} = System.cmd(elixir_executable(), [file]) + assert output =~ "hello_world123" + end + test "--eval smoke test" do {output, 0} = System.cmd(elixir_executable(), ["--eval", "IO.puts :hello_world123"]) assert output =~ "hello_world123" - {output, 0} = System.cmd(elixir_executable(), ["-e", "IO.puts :hello_world123"]) - assert output =~ "hello_world123" + # Check for -e and exclamation mark handling on Windows + assert {_output, 0} = System.cmd(elixir_executable(), ["-e", "Time.new!(0, 0, 0)"]) # TODO: remove this once we bump CI to 26.3 unless windows?() and System.otp_release() == "26" do