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:
1 parent
157b716eb7
commit
5f3a54d08f
19 files changed
+458
-193
No files matched your search
@@ -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())
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user