|  | 
|  | 1 | +################################################################################################### | 
|  | 2 | +###                                  POWERSHELL SCALAC SCRIPT                                   ### | 
|  | 3 | +###                                                                                             ### | 
|  | 4 | +### Author: Hamza REMMAL <[email protected]>                                                     ### | 
|  | 5 | +### Since : Scala 3.6.0                                                                         ### | 
|  | 6 | +################################################################################################### | 
|  | 7 | + | 
|  | 8 | +# Environment setup | 
|  | 9 | +$_PROG_HOME = $PSScriptRoot.TrimEnd('\bin\') | 
|  | 10 | +# Load and execute the common script | 
|  | 11 | +. "$_PROG_HOME/libexec/common.ps1" | 
|  | 12 | + | 
|  | 13 | +################################################################################################### | 
|  | 14 | +############################################ FUNCTIONS ############################################ | 
|  | 15 | +################################################################################################### | 
|  | 16 | + | 
|  | 17 | +function Scala-ArgumentParsing { | 
|  | 18 | +    param ( [string[]] $params ) | 
|  | 19 | + | 
|  | 20 | +    $_JAVA_ARGS = ""                  # TODO: THIS SHOULD BE AN ARRAY | 
|  | 21 | +    $_SCALA_ARGS = ""                 # TODO: THIS SHOULD BE AN ARRAY | 
|  | 22 | +    $_SCALA_CLASSPATH = "" | 
|  | 23 | +    $_CONSUME_REMAINING = $false | 
|  | 24 | + | 
|  | 25 | +    while ($params.Count -gt 0) { | 
|  | 26 | +        $arg = $params[0] | 
|  | 27 | +        if ($_CONSUME_REMAINING) { | 
|  | 28 | +            $_SCALA_ARGS += " $arg" | 
|  | 29 | +            $params = $params[1..$params.Length] | 
|  | 30 | +        } elseif ($arg -eq "--" -or $arg -eq "-script") { | 
|  | 31 | +            $_CONSUME_REMAINING = $true | 
|  | 32 | +            $_SCALA_ARGS += " $arg" | 
|  | 33 | +            $params = $params[1..$params.Length] | 
|  | 34 | +        } elseif ($arg -eq "-Oshort") { | 
|  | 35 | +            $_JAVA_ARGS  += " -XX:+TieredCompilation -XX:TieredStopAtLevel=1" | 
|  | 36 | +            $_SCALA_ARGS += " -Oshort" | 
|  | 37 | +            $params = $params[1..$params.Length] | 
|  | 38 | +        } elseif ($arg.StartsWith("-D")) { | 
|  | 39 | +            $_JAVA_ARGS  += " $arg" | 
|  | 40 | +            $_SCALA_ARGS += " $arg" | 
|  | 41 | +            $params = $params[1..$params.Length] | 
|  | 42 | +        } elseif ($arg.StartsWith("-J")) { | 
|  | 43 | +            $_JAVA_ARGS  += " ${arg:2}" | 
|  | 44 | +            $_SCALA_ARGS += " $arg" | 
|  | 45 | +            $params = $params[1..$params.Length] | 
|  | 46 | +        } elseif ($arg -eq "-classpath" -or $arg -eq "-cp") { | 
|  | 47 | +            $_SCALA_CLASSPATH = $params[1] | 
|  | 48 | +            $params = $params[2..$params.Length] | 
|  | 49 | +        } else { | 
|  | 50 | +            $_SCALA_ARGS += " $arg" | 
|  | 51 | +            $params = $params[1..$params.Length] | 
|  | 52 | +        } | 
|  | 53 | +    } | 
|  | 54 | + | 
|  | 55 | +    return @{ | 
|  | 56 | +        JAVA_ARGS       = $_JAVA_ARGS | 
|  | 57 | +        SCALA_ARGS      = $_SCALA_ARGS | 
|  | 58 | +        SCALA_CLASSPATH = $_SCALA_CLASSPATH | 
|  | 59 | +    } | 
|  | 60 | + | 
|  | 61 | +} | 
|  | 62 | + | 
|  | 63 | +function Scala-LoadCompilerClasspath { | 
|  | 64 | +    param ( [string] $SCALA_CLASSPATH ) | 
|  | 65 | + | 
|  | 66 | +    $__SCALA_JAR = Join-Path $_LIB_DIR "scala.jar" | 
|  | 67 | +    $__WITH_COMPILER_JAR = Join-Path $_LIB_DIR with_compiler.jar | 
|  | 68 | + | 
|  | 69 | +    $__TOOLCHAIN = "$__SCALA_JAR$_PSEP$__WITH_COMPILER_JAR" | 
|  | 70 | + | 
|  | 71 | +    if ($SCALA_CLASSPATH) { | 
|  | 72 | +        $__TOOLCHAIN += "$_PSEP$SCALA_CLASSPATH" | 
|  | 73 | +    } | 
|  | 74 | +    return $__TOOLCHAIN | 
|  | 75 | +} | 
|  | 76 | + | 
|  | 77 | + | 
|  | 78 | +################################################################################################### | 
|  | 79 | +############################################## SCRIPT ############################################# | 
|  | 80 | +################################################################################################### | 
|  | 81 | + | 
|  | 82 | +# Parse the arguments | 
|  | 83 | +$_ARG_RESULT = Scala-ArgumentParsing $args | 
|  | 84 | + | 
|  | 85 | +# Compute the classpath | 
|  | 86 | +$_CLASS_PATH = Scala-LoadCompilerClasspath $_ARG_RESULT.SCALA_CLASSPATH | 
|  | 87 | + | 
|  | 88 | +# Fetch the arguments | 
|  | 89 | +$_JAVA_ARGS  = $_ARG_RESULT.JAVA_ARGS | 
|  | 90 | +$_SCALA_ARGS = $_ARG_RESULT.SCALA_ARGS | 
|  | 91 | + | 
|  | 92 | +# Build the java arguments | 
|  | 93 | +$command = @() | 
|  | 94 | +if (-not [string]::IsNullOrEmpty($_JAVA_ARGS)) { $command += $_JAVA_ARGS } | 
|  | 95 | +$command += "-classpath" | 
|  | 96 | +$command += $_CLASS_PATH | 
|  | 97 | +$command += "-Dscala.usejavacp=true" | 
|  | 98 | +$command += "-Dscala.home=$_PROG_HOME" | 
|  | 99 | +$command += "dotty.tools.MainGenericCompiler" | 
|  | 100 | + | 
|  | 101 | +if (-not [string]::IsNullOrEmpty($_SCALA_ARGS)) { $command += $_SCALA_ARGS } | 
|  | 102 | +$commandString = $command -join ' ' | 
|  | 103 | + | 
|  | 104 | +Start-Process -FilePath $_JAVACMD -ArgumentList $commandString -NoNewWindow -Wait | 
|  | 105 | + | 
|  | 106 | +if ($LASTEXITCODE -ne 0) { exit 1 } | 
|  | 107 | + | 
|  | 108 | +exit 0 | 
0 commit comments