Compare commits

..

2 Commits

5 changed files with 71 additions and 15 deletions

View File

@ -1,7 +1,7 @@
#!/bin/bash
#
# Copyright 2025 Sergey S. Chernov real.sergeych@gmail.com
# Copyright 2026 Sergey S. Chernov real.sergeych@gmail.com
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@ -19,13 +19,15 @@
set -e
root=./lyng/build/install/lyng-jvm/
archive=./lyng/build/distributions/lyng-jvm.zip
install_root="$HOME/bin/jlyng-jvm"
launcher="$install_root/lyng-jvm/bin/lyng"
./gradlew :lyng:installJvmDist
#strip $file
#upx $file
rm -rf ~/bin/jlyng-jvm || true
rm ~/bin/jlyng 2>/dev/null || true
mkdir -p ~/bin/jlyng-jvm
cp -R $root ~/bin/jlyng-jvm
ln -s ~/bin/jlyng-jvm/lyng-jvm/bin/lyng ~/bin/jlyng
./gradlew :lyng:jvmDistZip
mkdir -p ./distributables
cp "$archive" ./distributables/lyng-jvm.zip
rm -rf "$install_root" || true
rm "$HOME/bin/jlyng" 2>/dev/null || true
mkdir -p "$install_root"
unzip -q ./distributables/lyng-jvm.zip -d "$install_root"
ln -s "$launcher" "$HOME/bin/jlyng"

View File

@ -3,6 +3,7 @@
## Lync CLI tool
- [lyng-linuxX64.zip](/distributables/lyng-linuxX64.zip) CLI tool for linuxX64: nodependencies, small monolith executable binary.
- [lyng-jvm.zip](/distributables/lyng-jvm.zip) JVM CLI distribution: download, unpack, and run `lyng-jvm/bin/lyng`.
## IDE plugins

View File

@ -40,15 +40,16 @@ What this does:
##### Option B: JVM distribution (`jlyng` launcher)
This creates a JVM distribution with a launcher script and links it to `~/bin/jlyng`.
This creates a JVM distribution with a launcher script, packages it as a downloadable zip, and links it to `~/bin/jlyng`.
```
bin/local_jrelease
```
What this does:
- Runs `./gradlew :lyng:installJvmDist` to build the JVM app distribution to `lyng/build/install/lyng-jvm`.
- Copies the distribution under `~/bin/jlyng-jvm`.
- Runs `./gradlew :lyng:jvmDistZip` to build the JVM app distribution archive at `lyng/build/distributions/lyng-jvm.zip`.
- Copies the archive to `distributables/lyng-jvm.zip`.
- Unpacks that distribution under `~/bin/jlyng-jvm`.
- Creates a symlink `~/bin/jlyng` pointing to the launcher script.

View File

@ -939,11 +939,11 @@ class Script(
)
it.addVoidFnDoc(
"delay",
doc = "Suspend for the given time. Accepts Duration, Int seconds, or Real seconds."
doc = "Suspend for the given time. Accepts Duration, Int milliseconds, or Real seconds."
) {
val a = args.firstAndOnly()
when (a) {
is ObjInt -> delay(a.value * 1000)
is ObjInt -> delay(a.value)
is ObjReal -> delay((a.value * 1000).roundToLong())
is ObjDuration -> delay(a.duration)
else -> raiseIllegalArgument("Expected Duration, Int or Real, got ${inspect(a)}")

View File

@ -0,0 +1,52 @@
/*
* Copyright 2026 Sergey S. Chernov real.sergeych@gmail.com
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.withTimeout
import net.sergeych.lyng.Script
import net.sergeych.lyng.obj.ObjInt
import kotlin.test.Test
import kotlin.test.assertEquals
class ImportTimeDelayJvmTest {
@Test
fun importingTimeKeepsIntDelayInMilliseconds() = runBlocking {
val result = withTimeout(1_000) {
Script.newScope().eval(
"""
import lyng.time
var completed = 0
(1..3).map {
launch {
delay(50)
}
}.forEach {
(it as Deferred).await()
completed += 1
}
completed
""".trimIndent()
)
}
assertEquals(3L, (result as ObjInt).value)
}
}