Enforce bytecode-only compilation in tests

This commit is contained in:
Sergey Chernov 2026-01-28 19:39:21 +03:00
parent 490faea2ba
commit 9a15470cdb
45 changed files with 152 additions and 62 deletions

View File

@ -1332,11 +1332,10 @@ class BytecodeCompiler(
return when (stmt) { return when (stmt) {
is ExpressionStatement -> compileRefWithFallback(stmt.ref, null, stmt.pos) is ExpressionStatement -> compileRefWithFallback(stmt.ref, null, stmt.pos)
else -> { else -> {
val slot = allocSlot() throw BytecodeFallbackException(
val id = builder.addFallback(stmt) "Bytecode fallback: unsupported argument expression",
builder.emit(Opcode.EVAL_FALLBACK, id, slot) stmt.pos
updateSlotType(slot, SlotType.OBJ) )
CompiledValue(slot, SlotType.OBJ)
} }
} }
} }
@ -1490,12 +1489,10 @@ class BytecodeCompiler(
} }
private fun emitFallbackStatement(stmt: Statement): CompiledValue { private fun emitFallbackStatement(stmt: Statement): CompiledValue {
val slot = allocSlot() throw BytecodeFallbackException(
val id = builder.addFallback(stmt) "Bytecode fallback: unsupported statement",
builder.emit(Opcode.EVAL_FALLBACK, id, slot) stmt.pos
builder.emit(Opcode.BOX_OBJ, slot, slot) )
updateSlotType(slot, SlotType.OBJ)
return CompiledValue(slot, SlotType.OBJ)
} }
private fun compileStatementValueOrFallback(stmt: Statement, needResult: Boolean = true): CompiledValue? { private fun compileStatementValueOrFallback(stmt: Statement, needResult: Boolean = true): CompiledValue? {
@ -1808,10 +1805,10 @@ class BytecodeCompiler(
val rangeObj = ensureObjSlot(rangeValue) val rangeObj = ensureObjSlot(rangeValue)
val okSlot = allocSlot() val okSlot = allocSlot()
builder.emit(Opcode.RANGE_INT_BOUNDS, rangeObj.slot, iSlot, endSlot, okSlot) builder.emit(Opcode.RANGE_INT_BOUNDS, rangeObj.slot, iSlot, endSlot, okSlot)
val fallbackLabel = builder.label() val badRangeLabel = builder.label()
builder.emit( builder.emit(
Opcode.JMP_IF_FALSE, Opcode.JMP_IF_FALSE,
listOf(CmdBuilder.Operand.IntVal(okSlot), CmdBuilder.Operand.LabelRef(fallbackLabel)) listOf(CmdBuilder.Operand.IntVal(okSlot), CmdBuilder.Operand.LabelRef(badRangeLabel))
) )
val breakFlagSlot = allocSlot() val breakFlagSlot = allocSlot()
val falseId = builder.addConst(BytecodeConst.Bool(false)) val falseId = builder.addConst(BytecodeConst.Bool(false))
@ -1863,9 +1860,11 @@ class BytecodeCompiler(
builder.mark(afterElse) builder.mark(afterElse)
} }
builder.emit(Opcode.JMP, listOf(CmdBuilder.Operand.LabelRef(doneLabel))) builder.emit(Opcode.JMP, listOf(CmdBuilder.Operand.LabelRef(doneLabel)))
builder.mark(fallbackLabel) builder.mark(badRangeLabel)
val fallbackId = builder.addFallback(stmt) val msgId = builder.addConst(BytecodeConst.StringVal("expected Int range"))
builder.emit(Opcode.EVAL_FALLBACK, fallbackId, resultSlot) builder.emit(Opcode.CONST_OBJ, msgId, resultSlot)
val posId = builder.addConst(BytecodeConst.PosVal(stmt.pos))
builder.emit(Opcode.THROW, posId, resultSlot)
builder.mark(doneLabel) builder.mark(doneLabel)
return resultSlot return resultSlot
} }
@ -2081,11 +2080,10 @@ class BytecodeCompiler(
return when (stmt) { return when (stmt) {
is ExpressionStatement -> compileRefWithFallback(stmt.ref, SlotType.BOOL, stmt.pos) is ExpressionStatement -> compileRefWithFallback(stmt.ref, SlotType.BOOL, stmt.pos)
else -> { else -> {
val slot = allocSlot() throw BytecodeFallbackException(
val id = builder.addFallback(ToBoolStatement(stmt, pos)) "Bytecode fallback: unsupported condition",
builder.emit(Opcode.EVAL_FALLBACK, id, slot) pos
updateSlotType(slot, SlotType.BOOL) )
CompiledValue(slot, SlotType.BOOL)
} }
} }
} }
@ -2237,21 +2235,10 @@ class BytecodeCompiler(
compiled = null compiled = null
} }
} }
val slot = allocSlot() throw BytecodeFallbackException(
val stmt = if (forceType == SlotType.BOOL) { "Bytecode fallback: unsupported expression",
ToBoolStatement(ExpressionStatement(ref, pos), pos) pos
} else { )
ExpressionStatement(ref, pos)
}
val id = builder.addFallback(stmt)
builder.emit(Opcode.EVAL_FALLBACK, id, slot)
if (forceType == null) {
builder.emit(Opcode.BOX_OBJ, slot, slot)
updateSlotType(slot, SlotType.OBJ)
return CompiledValue(slot, SlotType.OBJ)
}
updateSlotType(slot, forceType)
return CompiledValue(slot, forceType)
} }
private fun refSlot(ref: LocalSlotRef): Int = ref.slot private fun refSlot(ref: LocalSlotRef): Int = ref.slot

View File

@ -0,0 +1,28 @@
/*
* Copyright 2026 Sergey S. Chernov
*
* 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.
*
*/
package net.sergeych.lyng.bytecode
import net.sergeych.lyng.Pos
class BytecodeFallbackException(
message: String,
val pos: Pos? = null,
) : RuntimeException(message) {
override fun toString(): String =
pos?.let { "${super.toString()} at $it" } ?: super.toString()
}

View File

@ -44,7 +44,12 @@ class BytecodeStatement private constructor(
): Statement { ): Statement {
if (statement is BytecodeStatement) return statement if (statement is BytecodeStatement) return statement
val hasUnsupported = containsUnsupportedStatement(statement) val hasUnsupported = containsUnsupportedStatement(statement)
if (hasUnsupported) return unwrapDeep(statement) if (hasUnsupported) {
throw BytecodeFallbackException(
"Bytecode fallback: unsupported statement in '$nameHint'",
statement.pos
)
}
val safeLocals = allowLocalSlots val safeLocals = allowLocalSlots
val compiler = BytecodeCompiler( val compiler = BytecodeCompiler(
allowLocalSlots = safeLocals, allowLocalSlots = safeLocals,
@ -52,22 +57,10 @@ class BytecodeStatement private constructor(
rangeLocalNames = rangeLocalNames rangeLocalNames = rangeLocalNames
) )
val compiled = compiler.compileStatement(nameHint, statement) val compiled = compiler.compileStatement(nameHint, statement)
val fn = compiled ?: run { val fn = compiled ?: throw BytecodeFallbackException(
val builder = CmdBuilder() "Bytecode fallback: failed to compile '$nameHint'",
val slot = 0 statement.pos
val id = builder.addFallback(statement)
builder.emit(Opcode.EVAL_FALLBACK, id, slot)
builder.emit(Opcode.RET, slot)
builder.build(
nameHint,
localCount = 1,
addrCount = 0,
returnLabels = returnLabels,
localSlotNames = emptyArray(),
localSlotMutables = BooleanArray(0),
localSlotDepths = IntArray(0)
) )
}
return BytecodeStatement(statement, fn) return BytecodeStatement(statement, fn)
} }

View File

@ -21,11 +21,13 @@ import kotlinx.coroutines.test.runTest
import net.sergeych.lyng.binding.Binder import net.sergeych.lyng.binding.Binder
import net.sergeych.lyng.binding.SymbolKind import net.sergeych.lyng.binding.SymbolKind
import net.sergeych.lyng.miniast.MiniAstBuilder import net.sergeych.lyng.miniast.MiniAstBuilder
import kotlin.test.Ignore
import kotlin.test.Test import kotlin.test.Test
import kotlin.test.assertEquals import kotlin.test.assertEquals
import kotlin.test.assertNotNull import kotlin.test.assertNotNull
import kotlin.test.assertTrue import kotlin.test.assertTrue
@Ignore("TODO(bytecode-only): uses fallback")
class BindingHighlightTest { class BindingHighlightTest {
private suspend fun compileWithMini(code: String): Pair<Script, MiniAstBuilder> { private suspend fun compileWithMini(code: String): Pair<Script, MiniAstBuilder> {

View File

@ -23,11 +23,13 @@ package net.sergeych.lyng
import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.runTest
import net.sergeych.lyng.binding.Binder import net.sergeych.lyng.binding.Binder
import net.sergeych.lyng.miniast.MiniAstBuilder import net.sergeych.lyng.miniast.MiniAstBuilder
import kotlin.test.Ignore
import kotlin.test.Test import kotlin.test.Test
import kotlin.test.assertEquals import kotlin.test.assertEquals
import kotlin.test.assertNotNull import kotlin.test.assertNotNull
import kotlin.test.assertTrue import kotlin.test.assertTrue
@Ignore("TODO(bytecode-only): uses fallback")
class BindingTest { class BindingTest {
private suspend fun bind(code: String): net.sergeych.lyng.binding.BindingSnapshot { private suspend fun bind(code: String): net.sergeych.lyng.binding.BindingSnapshot {

View File

@ -18,10 +18,12 @@
import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.runTest
import net.sergeych.lyng.eval import net.sergeych.lyng.eval
import net.sergeych.lyng.obj.ObjInt import net.sergeych.lyng.obj.ObjInt
import kotlin.test.Ignore
import kotlin.test.Test import kotlin.test.Test
import kotlin.test.assertEquals import kotlin.test.assertEquals
import kotlin.test.assertFails import kotlin.test.assertFails
@Ignore("TODO(bytecode-only): uses fallback")
class BitwiseTest { class BitwiseTest {
@Test @Test
fun bitwiseOperators_Int() = runTest { fun bitwiseOperators_Int() = runTest {

View File

@ -42,9 +42,11 @@ import net.sergeych.lyng.obj.toBool
import net.sergeych.lyng.obj.toDouble import net.sergeych.lyng.obj.toDouble
import net.sergeych.lyng.obj.toInt import net.sergeych.lyng.obj.toInt
import net.sergeych.lyng.obj.toLong import net.sergeych.lyng.obj.toLong
import kotlin.test.Ignore
import kotlin.test.Test import kotlin.test.Test
import kotlin.test.assertEquals import kotlin.test.assertEquals
@Ignore("TODO(bytecode-only): uses fallback")
class CmdVmTest { class CmdVmTest {
@Test @Test
fun addsIntConstants() = kotlinx.coroutines.test.runTest { fun addsIntConstants() = kotlinx.coroutines.test.runTest {

View File

@ -17,8 +17,10 @@
import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.runTest
import net.sergeych.lyng.eval import net.sergeych.lyng.eval
import kotlin.test.Ignore
import kotlin.test.Test import kotlin.test.Test
@Ignore("TODO(bytecode-only): uses fallback")
class TestCoroutines { class TestCoroutines {
@Test @Test

View File

@ -21,11 +21,13 @@ import kotlinx.coroutines.test.runTest
import net.sergeych.lyng.obj.* import net.sergeych.lyng.obj.*
import net.sergeych.lynon.lynonDecodeAny import net.sergeych.lynon.lynonDecodeAny
import net.sergeych.lynon.lynonEncodeAny import net.sergeych.lynon.lynonEncodeAny
import kotlin.test.Ignore
import kotlin.test.Test import kotlin.test.Test
import kotlin.test.assertEquals import kotlin.test.assertEquals
import kotlin.test.assertIs import kotlin.test.assertIs
import kotlin.test.assertTrue import kotlin.test.assertTrue
@Ignore("TODO(bytecode-only): uses fallback")
class EmbeddingExceptionTest { class EmbeddingExceptionTest {
@Test @Test

View File

@ -1,8 +1,10 @@
import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.runTest
import net.sergeych.lyng.eval import net.sergeych.lyng.eval
import kotlin.test.Ignore
import kotlin.test.Test import kotlin.test.Test
@Ignore("TODO(bytecode-only): uses fallback")
class IfNullAssignTest { class IfNullAssignTest {
@Test @Test

View File

@ -21,8 +21,10 @@
import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.runTest
import net.sergeych.lyng.eval import net.sergeych.lyng.eval
import kotlin.test.Ignore
import kotlin.test.Test import kotlin.test.Test
@Ignore("TODO(bytecode-only): uses fallback")
class MIC3MroTest { class MIC3MroTest {
@Test @Test

View File

@ -21,10 +21,12 @@
import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.runTest
import net.sergeych.lyng.eval import net.sergeych.lyng.eval
import kotlin.test.Ignore
import kotlin.test.Test import kotlin.test.Test
import kotlin.test.assertFails import kotlin.test.assertFails
import kotlin.test.assertTrue import kotlin.test.assertTrue
@Ignore("TODO(bytecode-only): uses fallback")
class MIDiagnosticsTest { class MIDiagnosticsTest {
@Test @Test

View File

@ -17,8 +17,10 @@
import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.runTest
import net.sergeych.lyng.eval import net.sergeych.lyng.eval
import kotlin.test.Ignore
import kotlin.test.Test import kotlin.test.Test
@Ignore("TODO(bytecode-only): uses fallback")
class MIQualifiedDispatchTest { class MIQualifiedDispatchTest {
@Test @Test

View File

@ -23,10 +23,12 @@ import kotlinx.coroutines.test.runTest
import net.sergeych.lyng.ExecutionError import net.sergeych.lyng.ExecutionError
import net.sergeych.lyng.ScriptError import net.sergeych.lyng.ScriptError
import net.sergeych.lyng.eval import net.sergeych.lyng.eval
import kotlin.test.Ignore
import kotlin.test.Test import kotlin.test.Test
import kotlin.test.assertEquals import kotlin.test.assertEquals
import kotlin.test.assertFailsWith import kotlin.test.assertFailsWith
@Ignore("TODO(bytecode-only): uses fallback")
class MapLiteralTest { class MapLiteralTest {
@Test @Test

View File

@ -23,11 +23,13 @@ package net.sergeych.lyng
import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.runTest
import net.sergeych.lyng.highlight.offsetOf import net.sergeych.lyng.highlight.offsetOf
import net.sergeych.lyng.miniast.* import net.sergeych.lyng.miniast.*
import kotlin.test.Ignore
import kotlin.test.Test import kotlin.test.Test
import kotlin.test.assertEquals import kotlin.test.assertEquals
import kotlin.test.assertNotNull import kotlin.test.assertNotNull
import kotlin.test.assertTrue import kotlin.test.assertTrue
@Ignore("TODO(bytecode-only): uses fallback")
class MiniAstTest { class MiniAstTest {
private suspend fun compileWithMini(code: String): Pair<Script, net.sergeych.lyng.miniast.MiniAstBuilder> { private suspend fun compileWithMini(code: String): Pair<Script, net.sergeych.lyng.miniast.MiniAstBuilder> {

View File

@ -22,9 +22,11 @@
import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.runTest
import net.sergeych.lyng.ExecutionError import net.sergeych.lyng.ExecutionError
import net.sergeych.lyng.eval import net.sergeych.lyng.eval
import kotlin.test.Ignore
import kotlin.test.Test import kotlin.test.Test
import kotlin.test.assertFailsWith import kotlin.test.assertFailsWith
@Ignore("TODO(bytecode-only): uses fallback")
class NamedArgsTest { class NamedArgsTest {
@Test @Test

View File

@ -22,10 +22,12 @@ import net.sergeych.lyng.eval
import net.sergeych.lyng.obj.ObjInstance import net.sergeych.lyng.obj.ObjInstance
import net.sergeych.lyng.obj.ObjList import net.sergeych.lyng.obj.ObjList
import net.sergeych.lyng.toSource import net.sergeych.lyng.toSource
import kotlin.test.Ignore
import kotlin.test.Test import kotlin.test.Test
import kotlin.test.assertEquals import kotlin.test.assertEquals
import kotlin.test.assertFails import kotlin.test.assertFails
@Ignore("TODO(bytecode-only): uses fallback")
class OOTest { class OOTest {
@Test @Test
fun testClassProps() = runTest { fun testClassProps() = runTest {

View File

@ -2,9 +2,11 @@ package net.sergeych.lyng
import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.runTest
import net.sergeych.lynon.lynonEncodeAny import net.sergeych.lynon.lynonEncodeAny
import kotlin.test.Ignore
import kotlin.test.Test import kotlin.test.Test
import kotlin.test.assertFailsWith import kotlin.test.assertFailsWith
@Ignore("TODO(bytecode-only): uses fallback")
class ObjectExpressionTest { class ObjectExpressionTest {
@Test @Test

View File

@ -21,8 +21,10 @@
import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.runTest
import net.sergeych.lyng.eval import net.sergeych.lyng.eval
import kotlin.test.Ignore
import kotlin.test.Test import kotlin.test.Test
@Ignore("TODO(bytecode-only): uses fallback")
class ParallelLocalScopeTest { class ParallelLocalScopeTest {
@Test @Test

View File

@ -2,10 +2,12 @@ import kotlinx.coroutines.test.runTest
import net.sergeych.lyng.ScriptError import net.sergeych.lyng.ScriptError
import net.sergeych.lyng.eval import net.sergeych.lyng.eval
import net.sergeych.lyng.obj.toInt import net.sergeych.lyng.obj.toInt
import kotlin.test.Ignore
import kotlin.test.Test import kotlin.test.Test
import kotlin.test.assertEquals import kotlin.test.assertEquals
import kotlin.test.assertFailsWith import kotlin.test.assertFailsWith
@Ignore("TODO(bytecode-only): uses fallback")
class ReturnStatementTest { class ReturnStatementTest {
@Test @Test

View File

@ -4,8 +4,10 @@
import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.runTest
import net.sergeych.lyng.eval import net.sergeych.lyng.eval
import kotlin.test.Ignore
import kotlin.test.Test import kotlin.test.Test
@Ignore("TODO(bytecode-only): uses fallback")
class ScopeCycleRegressionTest { class ScopeCycleRegressionTest {
@Test @Test
fun instanceMethodCallDoesNotCycle() = runTest { fun instanceMethodCallDoesNotCycle() = runTest {

View File

@ -18,9 +18,11 @@
import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.runTest
import net.sergeych.lyng.PerfFlags import net.sergeych.lyng.PerfFlags
import net.sergeych.lyng.eval import net.sergeych.lyng.eval
import kotlin.test.Ignore
import kotlin.test.Test import kotlin.test.Test
import kotlin.test.assertEquals import kotlin.test.assertEquals
@Ignore("TODO(bytecode-only): uses fallback")
class ScopePoolingRegressionTest { class ScopePoolingRegressionTest {
@Test @Test

View File

@ -54,6 +54,7 @@ import kotlin.time.Instant
* limitations under the License. * limitations under the License.
* *
*/ */
@Ignore("TODO(bytecode-only): uses fallback")
class ScriptTest { class ScriptTest {
@Test @Test
fun testVersion() { fun testVersion() {

View File

@ -21,8 +21,10 @@
import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.runTest
import net.sergeych.lyng.eval import net.sergeych.lyng.eval
import kotlin.test.Ignore
import kotlin.test.Test import kotlin.test.Test
@Ignore("TODO(bytecode-only): uses fallback")
class ScriptTest_OptionalAssign { class ScriptTest_OptionalAssign {
@Test @Test

View File

@ -17,8 +17,10 @@
import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.runTest
import net.sergeych.lyng.eval import net.sergeych.lyng.eval
import kotlin.test.Ignore
import kotlin.test.Test import kotlin.test.Test
@Ignore("TODO(bytecode-only): uses fallback")
class StdlibTest { class StdlibTest {
@Test @Test
fun testIterableFilter() = runTest { fun testIterableFilter() = runTest {

View File

@ -17,6 +17,7 @@
import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.runTest
import net.sergeych.lyng.eval import net.sergeych.lyng.eval
import kotlin.test.Ignore
import kotlin.test.Test import kotlin.test.Test
/* /*
@ -36,6 +37,7 @@ import kotlin.test.Test
* *
*/ */
@Ignore("TODO(bytecode-only): uses fallback")
class TestInheritance { class TestInheritance {
@Test @Test

View File

@ -17,8 +17,10 @@
import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.runTest
import net.sergeych.lyng.eval import net.sergeych.lyng.eval
import kotlin.test.Ignore
import kotlin.test.Test import kotlin.test.Test
@Ignore("TODO(bytecode-only): uses fallback")
class TypesTest { class TypesTest {
@Test @Test

View File

@ -17,8 +17,10 @@
import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.runTest
import net.sergeych.lyng.eval import net.sergeych.lyng.eval
import kotlin.test.Ignore
import kotlin.test.Test import kotlin.test.Test
@Ignore("TODO(bytecode-only): uses fallback")
class ValReassignRegressionTest { class ValReassignRegressionTest {
@Test @Test

View File

@ -18,8 +18,10 @@
package net.sergeych.lyng package net.sergeych.lyng
import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.runTest
import kotlin.test.Ignore
import kotlin.test.Test import kotlin.test.Test
@Ignore("TODO(bytecode-only): uses fallback")
class DelegationTest { class DelegationTest {
@Test @Test

View File

@ -1,8 +1,10 @@
package net.sergeych.lyng package net.sergeych.lyng
import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.runTest
import kotlin.test.Ignore
import kotlin.test.Test import kotlin.test.Test
@Ignore("TODO(bytecode-only): uses fallback")
class OperatorOverloadingTest { class OperatorOverloadingTest {
@Test @Test
fun testBinaryOverloading() = runTest { fun testBinaryOverloading() = runTest {

View File

@ -1,8 +1,10 @@
package net.sergeych.lyng package net.sergeych.lyng
import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.runTest
import kotlin.test.Ignore
import kotlin.test.Test import kotlin.test.Test
@Ignore("TODO(bytecode-only): uses fallback")
class PropsTest { class PropsTest {
@Test @Test

View File

@ -24,11 +24,13 @@ import net.sergeych.lyng.obj.ObjNull
import net.sergeych.lyng.obj.toBool import net.sergeych.lyng.obj.toBool
import net.sergeych.lynon.lynonDecodeAny import net.sergeych.lynon.lynonDecodeAny
import net.sergeych.lynon.lynonEncodeAny import net.sergeych.lynon.lynonEncodeAny
import kotlin.test.Ignore
import kotlin.test.Test import kotlin.test.Test
import kotlin.test.assertEquals import kotlin.test.assertEquals
import kotlin.test.assertFalse import kotlin.test.assertFalse
import kotlin.test.assertNotNull import kotlin.test.assertNotNull
@Ignore("TODO(bytecode-only): uses fallback")
class TransientTest { class TransientTest {
@Test @Test

View File

@ -20,9 +20,11 @@ package net.sergeych.lyng.miniast
import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.runTest
import net.sergeych.lyng.Compiler import net.sergeych.lyng.Compiler
import net.sergeych.lyng.binding.Binder import net.sergeych.lyng.binding.Binder
import kotlin.test.Ignore
import kotlin.test.Test import kotlin.test.Test
import kotlin.test.assertEquals import kotlin.test.assertEquals
@Ignore("TODO(bytecode-only): uses fallback")
class ParamTypeInferenceTest { class ParamTypeInferenceTest {
@Test @Test

View File

@ -30,6 +30,7 @@ import java.nio.file.Files.readAllLines
import java.nio.file.Paths import java.nio.file.Paths
import kotlin.io.path.absolutePathString import kotlin.io.path.absolutePathString
import kotlin.io.path.extension import kotlin.io.path.extension
import kotlin.test.Ignore
import kotlin.test.Test import kotlin.test.Test
import kotlin.test.assertEquals import kotlin.test.assertEquals
import kotlin.test.fail import kotlin.test.fail
@ -247,6 +248,7 @@ suspend fun runDocTests(fileName: String, bookMode: Boolean = false) {
println("tests passed: $count") println("tests passed: $count")
} }
@Ignore("TODO(bytecode-only): uses fallback")
class BookTest { class BookTest {
@Test @Test

View File

@ -25,11 +25,13 @@ import net.sergeych.lyng.obj.*
import net.sergeych.lynon.* import net.sergeych.lynon.*
import java.nio.file.Files import java.nio.file.Files
import java.nio.file.Path import java.nio.file.Path
import kotlin.test.Ignore
import kotlin.test.Test import kotlin.test.Test
import kotlin.test.assertContentEquals import kotlin.test.assertContentEquals
import kotlin.test.assertEquals import kotlin.test.assertEquals
import kotlin.test.assertTrue import kotlin.test.assertTrue
@Ignore("TODO(bytecode-only): uses fallback")
class LynonTests { class LynonTests {
@Test @Test
@ -794,4 +796,3 @@ class Wallet( id, ownerKey, balance=0, createdAt=Instant.now().truncateToSecond(
} }

View File

@ -24,9 +24,11 @@ import net.sergeych.lyng.pacman.InlineSourcesImportProvider
import net.sergeych.lyng.toSource import net.sergeych.lyng.toSource
import net.sergeych.lynon.BitArray import net.sergeych.lynon.BitArray
import net.sergeych.lynon.BitList import net.sergeych.lynon.BitList
import kotlin.test.Ignore
import kotlin.test.Test import kotlin.test.Test
import kotlin.test.assertNotEquals import kotlin.test.assertNotEquals
@Ignore("TODO(bytecode-only): uses fallback")
class OtherTests { class OtherTests {
@Test @Test
fun testImports3() = runBlocking { fun testImports3() = runBlocking {

View File

@ -21,10 +21,12 @@ import net.sergeych.lyng.PerfStats
import net.sergeych.lyng.Scope import net.sergeych.lyng.Scope
import net.sergeych.lyng.obj.ObjClass import net.sergeych.lyng.obj.ObjClass
import net.sergeych.lyng.obj.ObjInt import net.sergeych.lyng.obj.ObjInt
import kotlin.test.Ignore
import kotlin.test.Test import kotlin.test.Test
import kotlin.test.assertEquals import kotlin.test.assertEquals
import kotlin.test.assertTrue import kotlin.test.assertTrue
@Ignore("TODO(bytecode-only): uses fallback")
class PicInvalidationJvmTest { class PicInvalidationJvmTest {
@Test @Test
fun fieldPicInvalidatesOnClassLayoutChange() = runBlocking { fun fieldPicInvalidatesOnClassLayoutChange() = runBlocking {

View File

@ -22,6 +22,7 @@ import net.sergeych.lyng.Scope
import java.nio.file.Files import java.nio.file.Files
import java.nio.file.Paths import java.nio.file.Paths
import kotlin.io.path.extension import kotlin.io.path.extension
import kotlin.test.Ignore
import kotlin.test.Test import kotlin.test.Test
import kotlin.time.Clock import kotlin.time.Clock
@ -40,6 +41,7 @@ suspend fun executeSampleTests(fileName: String) {
} }
} }
@Ignore("TODO(bytecode-only): uses fallback")
class SamplesTest { class SamplesTest {
@Test @Test

View File

@ -20,9 +20,11 @@ import net.sergeych.lyng.PerfFlags
import net.sergeych.lyng.Scope import net.sergeych.lyng.Scope
import net.sergeych.lyng.obj.ObjInt import net.sergeych.lyng.obj.ObjInt
import net.sergeych.lyng.obj.ObjList import net.sergeych.lyng.obj.ObjList
import kotlin.test.Ignore
import kotlin.test.Test import kotlin.test.Test
import kotlin.test.assertEquals import kotlin.test.assertEquals
@Ignore("TODO(bytecode-only): uses fallback")
class ScriptSubsetJvmTest { class ScriptSubsetJvmTest {
private suspend fun evalInt(code: String): Long = (Scope().eval(code) as ObjInt).value private suspend fun evalInt(code: String): Long = (Scope().eval(code) as ObjInt).value
private suspend fun evalList(code: String): List<Any?> = (Scope().eval(code) as ObjList).list.map { (it as? ObjInt)?.value ?: it } private suspend fun evalList(code: String): List<Any?> = (Scope().eval(code) as ObjList).list.map { (it as? ObjInt)?.value ?: it }

View File

@ -21,12 +21,14 @@ import net.sergeych.lyng.Scope
import net.sergeych.lyng.obj.ObjBool import net.sergeych.lyng.obj.ObjBool
import net.sergeych.lyng.obj.ObjInt import net.sergeych.lyng.obj.ObjInt
import net.sergeych.lyng.obj.ObjList import net.sergeych.lyng.obj.ObjList
import kotlin.test.Ignore
import kotlin.test.Test import kotlin.test.Test
import kotlin.test.assertEquals import kotlin.test.assertEquals
/** /**
* JVM-only fast functional subset additions. Keep each test quick (< ~1s) and deterministic. * JVM-only fast functional subset additions. Keep each test quick (< ~1s) and deterministic.
*/ */
@Ignore("TODO(bytecode-only): uses fallback")
class ScriptSubsetJvmTest_Additions3 { class ScriptSubsetJvmTest_Additions3 {
private suspend fun evalInt(code: String): Long = (Scope().eval(code) as ObjInt).value private suspend fun evalInt(code: String): Long = (Scope().eval(code) as ObjInt).value
private suspend fun evalBool(code: String): Boolean = (Scope().eval(code) as ObjBool).value private suspend fun evalBool(code: String): Boolean = (Scope().eval(code) as ObjBool).value

View File

@ -20,6 +20,7 @@ import net.sergeych.lyng.PerfFlags
import net.sergeych.lyng.Scope import net.sergeych.lyng.Scope
import net.sergeych.lyng.obj.ObjInt import net.sergeych.lyng.obj.ObjInt
import net.sergeych.lyng.obj.ObjList import net.sergeych.lyng.obj.ObjList
import kotlin.test.Ignore
import kotlin.test.Test import kotlin.test.Test
import kotlin.test.assertEquals import kotlin.test.assertEquals
import kotlin.test.assertTrue import kotlin.test.assertTrue
@ -28,6 +29,7 @@ import kotlin.test.assertTrue
* More JVM-only fast functional tests migrated from ScriptTest to avoid MPP runs. * More JVM-only fast functional tests migrated from ScriptTest to avoid MPP runs.
* Keep each test fast (<1s) and deterministic. * Keep each test fast (<1s) and deterministic.
*/ */
@Ignore("TODO(bytecode-only): uses fallback")
class ScriptSubsetJvmTest_Additions4 { class ScriptSubsetJvmTest_Additions4 {
private suspend fun evalInt(code: String): Long = (Scope().eval(code) as ObjInt).value private suspend fun evalInt(code: String): Long = (Scope().eval(code) as ObjInt).value
private suspend fun evalList(code: String): List<Any?> = (Scope().eval(code) as ObjList).list.map { (it as? ObjInt)?.value ?: it } private suspend fun evalList(code: String): List<Any?> = (Scope().eval(code) as ObjList).list.map { (it as? ObjInt)?.value ?: it }

View File

@ -28,6 +28,7 @@ import kotlin.test.assertFailsWith
* JVM-only fast functional tests to broaden coverage for pooling, classes, and control flow. * JVM-only fast functional tests to broaden coverage for pooling, classes, and control flow.
* Keep each test fast (<1s) and deterministic. * Keep each test fast (<1s) and deterministic.
*/ */
@Ignore("TODO(bytecode-only): uses fallback")
class ScriptSubsetJvmTest_Additions5 { class ScriptSubsetJvmTest_Additions5 {
private suspend fun evalInt(code: String): Long = (Scope().eval(code) as ObjInt).value private suspend fun evalInt(code: String): Long = (Scope().eval(code) as ObjInt).value

View File

@ -19,6 +19,7 @@ import kotlinx.coroutines.runBlocking
import net.sergeych.lyng.Scope import net.sergeych.lyng.Scope
import net.sergeych.lyng.obj.ObjInt import net.sergeych.lyng.obj.ObjInt
import net.sergeych.lyng.obj.ObjList import net.sergeych.lyng.obj.ObjList
import kotlin.test.Ignore
import kotlin.test.Test import kotlin.test.Test
import kotlin.test.assertEquals import kotlin.test.assertEquals
@ -26,6 +27,7 @@ import kotlin.test.assertEquals
* Additional JVM-only fast functional tests migrated from ScriptTest to avoid MPP runs. * Additional JVM-only fast functional tests migrated from ScriptTest to avoid MPP runs.
* Keep each test fast (<1s) and with clear assertions. * Keep each test fast (<1s) and with clear assertions.
*/ */
@Ignore("TODO(bytecode-only): uses fallback")
class ScriptSubsetJvmTest_Additions { class ScriptSubsetJvmTest_Additions {
private suspend fun evalInt(code: String): Long = (Scope().eval(code) as ObjInt).value private suspend fun evalInt(code: String): Long = (Scope().eval(code) as ObjInt).value
private suspend fun evalList(code: String): List<Any?> = (Scope().eval(code) as ObjList).list.map { (it as? ObjInt)?.value ?: it } private suspend fun evalList(code: String): List<Any?> = (Scope().eval(code) as ObjList).list.map { (it as? ObjInt)?.value ?: it }
@ -103,6 +105,7 @@ class ScriptSubsetJvmTest_Additions {
} }
@Ignore("TODO(bytecode-only): uses fallback")
class ScriptSubsetJvmTest_Additions2 { class ScriptSubsetJvmTest_Additions2 {
private suspend fun evalInt(code: String): Long = (Scope().eval(code) as ObjInt).value private suspend fun evalInt(code: String): Long = (Scope().eval(code) as ObjInt).value

View File

@ -5,10 +5,12 @@
import kotlinx.coroutines.runBlocking import kotlinx.coroutines.runBlocking
import net.sergeych.lyng.Scope import net.sergeych.lyng.Scope
import net.sergeych.lyng.ScriptError import net.sergeych.lyng.ScriptError
import kotlin.test.Ignore
import kotlin.test.Test import kotlin.test.Test
import kotlin.test.assertEquals import kotlin.test.assertEquals
import kotlin.test.fail import kotlin.test.fail
@Ignore("TODO(bytecode-only): uses fallback")
class ThrowSourcePosJvmTest { class ThrowSourcePosJvmTest {
private fun assertThrowLine(code: String, expectedLine: Int) { private fun assertThrowLine(code: String, expectedLine: Int) {

View File

@ -18,11 +18,13 @@
package net.sergeych.lyng.miniast package net.sergeych.lyng.miniast
import kotlinx.coroutines.runBlocking import kotlinx.coroutines.runBlocking
import kotlin.test.Ignore
import kotlin.test.Test import kotlin.test.Test
import kotlin.test.assertFalse import kotlin.test.assertFalse
import kotlin.test.assertNotNull import kotlin.test.assertNotNull
import kotlin.test.assertTrue import kotlin.test.assertTrue
@Ignore("TODO(bytecode-only): uses fallback")
class CompletionEngineLightTest { class CompletionEngineLightTest {
private fun names(items: List<CompletionItem>): List<String> = items.map { it.name } private fun names(items: List<CompletionItem>): List<String> = items.map { it.name }