Make ObjInt and ObjReal immutable and update number operations accordingly. Add support for class properties with get/set accessors. Rework loop parsing logic to improve clarity and consistency. Update .gitignore and TextMate grammar. Enhance Changelog and document new features.

This commit is contained in:
sergeych committed 2025-12-23 08:02:48 +01:00
1 parent 157b716eb7
commit 5f3a54d08f
19 files changed
+458 -193

No files matched your search

+27 -23
View File
@@ -2318,29 +2318,33 @@ class ScriptTest {
@Test
fun doWhileValuesLabelTest() = runTest {
withTimeout(5.seconds) {
eval(
"""
var count = 0
var count2 = 0
var count3 = 0
val result = outer@ do {
count2++
count = 0
do {
count++
if( count < 10 || count2 < 5 ) {
continue
}
if( count % 2 == 1 )
break@outer "found "+count + "/" + count2
} while(count < 14)
count3++
} while( count2 < 100 )
else "no"
assertEquals("found 11/5", result)
assertEquals( 4, count3)
""".trimIndent()
)
try {
eval(
"""
var count = 0
var count2 = 0
var count3 = 0
val result = outer@ do {
count2++
count = 0
do {
count++
if( count < 10 || count2 < 5 ) {
continue
}
if( count % 2 == 1 )
break@outer "found "+count + "/" + count2
} while(count < 14)
count3++
} while( count2 < 100 )
else "no"
assertEquals("found 11/5", result)
assertEquals( 4, count3)
""".trimIndent()
)
} catch (e: ExecutionError) {
throw e
}
}
}
@@ -0,0 +1,66 @@
package net.sergeych.lyng
import kotlinx.coroutines.test.runTest
import kotlin.test.Test
class PropsTest {
@Test
fun propsProposal() = runTest {
eval("""
class WithProps {
// readonly property without declared type:
val readonlyProp
get() {
"readonly foo"
}
val readonlyWithType: Int get() { 42 }
private var field = 0
private var field2 = ""
// with type declaration
var propName: Int
get() {
field * 10
}
set(value) {
field = value
}
// or without
var propNameWithoutType
get() {
"/"+ field2 + "/"
}
set(value) {
field2 = value
}
}
val w = WithProps()
assertEquals("readonly foo", w.readonlyProp)
assertEquals(42, w.readonlyWithType)
w.propNameWithoutType = "foo"
assertEquals("/foo/", w.propNameWithoutType)
w.propName = 123
assertEquals(1230, w.propName)
class Shorthand {
private var _p = 0
var p: Int
get() = _p * 2
set(v) = _p = v
}
val s = Shorthand()
s.p = 21
assertEquals(42, s.p)
""".trimIndent())
}
}