ASM Bytecode Generation to unwrap Expressions of adv-expr API #94

Merged
CommanderTvis merged 44 commits from adv-expr into adv-expr 2020-06-13 21:07:15 +03:00
2 changed files with 32 additions and 27 deletions
Showing only changes of commit fb74e74b01 - Show all commits

View File

@ -8,7 +8,7 @@ import scientifik.kmath.operations.Algebra
altavir commented 2020-06-07 19:15:24 +03:00 (Migrated from github.com)
Review

Add suppress for unused parameters and documentation.

Add suppress for unused parameters and documentation.
altavir commented 2020-06-07 19:15:24 +03:00 (Migrated from github.com)
Review

Add suppress for unused parameters and documentation.

Add suppress for unused parameters and documentation.
altavir commented 2020-06-07 20:02:37 +03:00 (Migrated from github.com)
Review

Space is not actually used.

Space is not actually used.
altavir commented 2020-06-07 20:02:37 +03:00 (Migrated from github.com)
Review

Space is not actually used.

Space is not actually used.
altavir commented 2020-06-07 20:02:44 +03:00 (Migrated from github.com)
Review

Not used

Not used
altavir commented 2020-06-07 20:02:44 +03:00 (Migrated from github.com)
Review

Not used

Not used
import scientifik.kmath.operations.Field
import scientifik.kmath.operations.Space
abstract class AsmCompiled<T>(@JvmField val algebra: Algebra<T>, @JvmField val constants: MutableList<T>) {
altavir commented 2020-06-07 19:15:24 +03:00 (Migrated from github.com)
Review

Add suppress for unused parameters and documentation.

Add suppress for unused parameters and documentation.
altavir commented 2020-06-07 20:02:37 +03:00 (Migrated from github.com)
Review

Space is not actually used.

Space is not actually used.
altavir commented 2020-06-07 20:02:44 +03:00 (Migrated from github.com)
Review

Not used

Not used
abstract class AsmCompiled<T>(@JvmField val algebra: Algebra<T>, @JvmField val constants: MutableList<out Any>) {
altavir commented 2020-06-07 19:15:24 +03:00 (Migrated from github.com)
Review

Add suppress for unused parameters and documentation.

Add suppress for unused parameters and documentation.
altavir commented 2020-06-07 20:02:37 +03:00 (Migrated from github.com)
Review

Space is not actually used.

Space is not actually used.
altavir commented 2020-06-07 20:02:44 +03:00 (Migrated from github.com)
Review

Not used

Not used
abstract fun evaluate(arguments: Map<String, T>): T
}
@ -29,7 +29,7 @@ class AsmGenerationContext<T>(classOfT: Class<*>, private val algebra: Algebra<T
altavir commented 2020-06-07 19:15:24 +03:00 (Migrated from github.com)
Review

Add suppress for unused parameters and documentation.

Add suppress for unused parameters and documentation.
altavir commented 2020-06-07 19:15:24 +03:00 (Migrated from github.com)
Review

Add suppress for unused parameters and documentation.

Add suppress for unused parameters and documentation.
altavir commented 2020-06-07 20:02:37 +03:00 (Migrated from github.com)
Review

Space is not actually used.

Space is not actually used.
altavir commented 2020-06-07 20:02:37 +03:00 (Migrated from github.com)
Review

Space is not actually used.

Space is not actually used.
altavir commented 2020-06-07 20:02:44 +03:00 (Migrated from github.com)
Review

Not used

Not used
altavir commented 2020-06-07 20:02:44 +03:00 (Migrated from github.com)
Review

Not used

Not used
private val evaluateThisVar: Int = 0
private val evaluateArgumentsVar: Int = 1
private var maxStack: Int = 0
private lateinit var constants: MutableList<T>
altavir commented 2020-06-07 19:15:24 +03:00 (Migrated from github.com)
Review

Add suppress for unused parameters and documentation.

Add suppress for unused parameters and documentation.
altavir commented 2020-06-07 20:02:37 +03:00 (Migrated from github.com)
Review

Space is not actually used.

Space is not actually used.
altavir commented 2020-06-07 20:02:44 +03:00 (Migrated from github.com)
Review

Not used

Not used
private lateinit var constants: MutableList<Any>
altavir commented 2020-06-07 19:15:24 +03:00 (Migrated from github.com)
Review

Add suppress for unused parameters and documentation.

Add suppress for unused parameters and documentation.
altavir commented 2020-06-07 20:02:37 +03:00 (Migrated from github.com)
Review

Space is not actually used.

Space is not actually used.
altavir commented 2020-06-07 20:02:44 +03:00 (Migrated from github.com)
Review

Not used

Not used
private lateinit var asmCompiledClassWriter: ClassWriter
private lateinit var evaluateMethodVisitor: MethodVisitor
private lateinit var evaluateL0: Label
@ -178,7 +178,9 @@ class AsmGenerationContext<T>(classOfT: Class<*>, private val algebra: Algebra<T
altavir commented 2020-06-07 19:15:24 +03:00 (Migrated from github.com)
Review

Add suppress for unused parameters and documentation.

Add suppress for unused parameters and documentation.
altavir commented 2020-06-07 19:15:24 +03:00 (Migrated from github.com)
Review

Add suppress for unused parameters and documentation.

Add suppress for unused parameters and documentation.
altavir commented 2020-06-07 20:02:37 +03:00 (Migrated from github.com)
Review

Space is not actually used.

Space is not actually used.
altavir commented 2020-06-07 20:02:37 +03:00 (Migrated from github.com)
Review

Space is not actually used.

Space is not actually used.
altavir commented 2020-06-07 20:02:44 +03:00 (Migrated from github.com)
Review

Not used

Not used
altavir commented 2020-06-07 20:02:44 +03:00 (Migrated from github.com)
Review

Not used

Not used
.newInstance(algebra, constants) as AsmCompiled<T>
}
fun visitLoadFromConstants(value: T) {
altavir commented 2020-06-07 19:15:24 +03:00 (Migrated from github.com)
Review

Add suppress for unused parameters and documentation.

Add suppress for unused parameters and documentation.
altavir commented 2020-06-07 20:02:37 +03:00 (Migrated from github.com)
Review

Space is not actually used.

Space is not actually used.
altavir commented 2020-06-07 20:02:44 +03:00 (Migrated from github.com)
Review

Not used

Not used
fun visitLoadFromConstants(value: T) = visitLoadAnyFromConstants(value as Any)
altavir commented 2020-06-07 19:15:24 +03:00 (Migrated from github.com)
Review

Add suppress for unused parameters and documentation.

Add suppress for unused parameters and documentation.
altavir commented 2020-06-07 20:02:37 +03:00 (Migrated from github.com)
Review

Space is not actually used.

Space is not actually used.
altavir commented 2020-06-07 20:02:44 +03:00 (Migrated from github.com)
Review

Not used

Not used
altavir commented 2020-06-07 19:15:24 +03:00 (Migrated from github.com)
Review

Add suppress for unused parameters and documentation.

Add suppress for unused parameters and documentation.
altavir commented 2020-06-07 20:02:37 +03:00 (Migrated from github.com)
Review

Space is not actually used.

Space is not actually used.
altavir commented 2020-06-07 20:02:44 +03:00 (Migrated from github.com)
Review

Not used

Not used
fun visitLoadAnyFromConstants(value: Any) {
altavir commented 2020-06-07 19:15:24 +03:00 (Migrated from github.com)
Review

Add suppress for unused parameters and documentation.

Add suppress for unused parameters and documentation.
altavir commented 2020-06-07 20:02:37 +03:00 (Migrated from github.com)
Review

Space is not actually used.

Space is not actually used.
altavir commented 2020-06-07 20:02:44 +03:00 (Migrated from github.com)
Review

Not used

Not used
val idx = if (value in constants) constants.indexOf(value) else constants.apply { add(value) }.lastIndex
maxStack++
@ -195,7 +197,24 @@ class AsmGenerationContext<T>(classOfT: Class<*>, private val algebra: Algebra<T
altavir commented 2020-06-07 19:15:24 +03:00 (Migrated from github.com)
Review

Add suppress for unused parameters and documentation.

Add suppress for unused parameters and documentation.
altavir commented 2020-06-07 19:15:24 +03:00 (Migrated from github.com)
Review

Add suppress for unused parameters and documentation.

Add suppress for unused parameters and documentation.
altavir commented 2020-06-07 20:02:37 +03:00 (Migrated from github.com)
Review

Space is not actually used.

Space is not actually used.
altavir commented 2020-06-07 20:02:37 +03:00 (Migrated from github.com)
Review

Space is not actually used.

Space is not actually used.
altavir commented 2020-06-07 20:02:44 +03:00 (Migrated from github.com)
Review

Not used

Not used
altavir commented 2020-06-07 20:02:44 +03:00 (Migrated from github.com)
Review

Not used

Not used
fun visitNumberConstant(value: Number) {
maxStack++
evaluateMethodVisitor.visitBoxedNumberConstant(value)
altavir commented 2020-06-07 19:15:24 +03:00 (Migrated from github.com)
Review

Add suppress for unused parameters and documentation.

Add suppress for unused parameters and documentation.
altavir commented 2020-06-07 20:02:37 +03:00 (Migrated from github.com)
Review

Space is not actually used.

Space is not actually used.
altavir commented 2020-06-07 20:02:44 +03:00 (Migrated from github.com)
Review

Not used

Not used
val clazz = value.javaClass
altavir commented 2020-06-07 19:15:24 +03:00 (Migrated from github.com)
Review

Add suppress for unused parameters and documentation.

Add suppress for unused parameters and documentation.
altavir commented 2020-06-07 20:02:37 +03:00 (Migrated from github.com)
Review

Space is not actually used.

Space is not actually used.
altavir commented 2020-06-07 20:02:44 +03:00 (Migrated from github.com)
Review

Not used

Not used
val c = clazz.name.replace('.', '/')
altavir commented 2020-06-07 19:15:24 +03:00 (Migrated from github.com)
Review

Add suppress for unused parameters and documentation.

Add suppress for unused parameters and documentation.
altavir commented 2020-06-07 20:02:37 +03:00 (Migrated from github.com)
Review

Space is not actually used.

Space is not actually used.
altavir commented 2020-06-07 20:02:44 +03:00 (Migrated from github.com)
Review

Not used

Not used
altavir commented 2020-06-07 19:15:24 +03:00 (Migrated from github.com)
Review

Add suppress for unused parameters and documentation.

Add suppress for unused parameters and documentation.
altavir commented 2020-06-07 20:02:37 +03:00 (Migrated from github.com)
Review

Space is not actually used.

Space is not actually used.
altavir commented 2020-06-07 20:02:44 +03:00 (Migrated from github.com)
Review

Not used

Not used
val sigLetter = SIGNATURE_LETTERS[clazz]
altavir commented 2020-06-07 19:15:24 +03:00 (Migrated from github.com)
Review

Add suppress for unused parameters and documentation.

Add suppress for unused parameters and documentation.
altavir commented 2020-06-07 20:02:37 +03:00 (Migrated from github.com)
Review

Space is not actually used.

Space is not actually used.
altavir commented 2020-06-07 20:02:44 +03:00 (Migrated from github.com)
Review

Not used

Not used
altavir commented 2020-06-07 19:15:24 +03:00 (Migrated from github.com)
Review

Add suppress for unused parameters and documentation.

Add suppress for unused parameters and documentation.
altavir commented 2020-06-07 20:02:37 +03:00 (Migrated from github.com)
Review

Space is not actually used.

Space is not actually used.
altavir commented 2020-06-07 20:02:44 +03:00 (Migrated from github.com)
Review

Not used

Not used
if (sigLetter != null) {
altavir commented 2020-06-07 19:15:24 +03:00 (Migrated from github.com)
Review

Add suppress for unused parameters and documentation.

Add suppress for unused parameters and documentation.
altavir commented 2020-06-07 20:02:37 +03:00 (Migrated from github.com)
Review

Space is not actually used.

Space is not actually used.
altavir commented 2020-06-07 20:02:44 +03:00 (Migrated from github.com)
Review

Not used

Not used
when (value) {
altavir commented 2020-06-07 19:15:24 +03:00 (Migrated from github.com)
Review

Add suppress for unused parameters and documentation.

Add suppress for unused parameters and documentation.
altavir commented 2020-06-07 20:02:37 +03:00 (Migrated from github.com)
Review

Space is not actually used.

Space is not actually used.
altavir commented 2020-06-07 20:02:44 +03:00 (Migrated from github.com)
Review

Not used

Not used
is Int -> evaluateMethodVisitor.visitLdcOrIConstInsn(value)
altavir commented 2020-06-07 19:15:24 +03:00 (Migrated from github.com)
Review

Add suppress for unused parameters and documentation.

Add suppress for unused parameters and documentation.
altavir commented 2020-06-07 20:02:37 +03:00 (Migrated from github.com)
Review

Space is not actually used.

Space is not actually used.
altavir commented 2020-06-07 20:02:44 +03:00 (Migrated from github.com)
Review

Not used

Not used
is Double -> evaluateMethodVisitor.visitLdcOrDConstInsn(value)
altavir commented 2020-06-07 19:15:24 +03:00 (Migrated from github.com)
Review

Add suppress for unused parameters and documentation.

Add suppress for unused parameters and documentation.
altavir commented 2020-06-07 20:02:37 +03:00 (Migrated from github.com)
Review

Space is not actually used.

Space is not actually used.
altavir commented 2020-06-07 20:02:44 +03:00 (Migrated from github.com)
Review

Not used

Not used
is Float -> evaluateMethodVisitor.visitLdcOrFConstInsn(value)
altavir commented 2020-06-07 19:15:24 +03:00 (Migrated from github.com)
Review

Add suppress for unused parameters and documentation.

Add suppress for unused parameters and documentation.
altavir commented 2020-06-07 20:02:37 +03:00 (Migrated from github.com)
Review

Space is not actually used.

Space is not actually used.
altavir commented 2020-06-07 20:02:44 +03:00 (Migrated from github.com)
Review

Not used

Not used
else -> evaluateMethodVisitor.visitLdcInsn(value)
altavir commented 2020-06-07 19:15:24 +03:00 (Migrated from github.com)
Review

Add suppress for unused parameters and documentation.

Add suppress for unused parameters and documentation.
altavir commented 2020-06-07 20:02:37 +03:00 (Migrated from github.com)
Review

Space is not actually used.

Space is not actually used.
altavir commented 2020-06-07 20:02:44 +03:00 (Migrated from github.com)
Review

Not used

Not used
}
altavir commented 2020-06-07 19:15:24 +03:00 (Migrated from github.com)
Review

Add suppress for unused parameters and documentation.

Add suppress for unused parameters and documentation.
altavir commented 2020-06-07 20:02:37 +03:00 (Migrated from github.com)
Review

Space is not actually used.

Space is not actually used.
altavir commented 2020-06-07 20:02:44 +03:00 (Migrated from github.com)
Review

Not used

Not used
altavir commented 2020-06-07 19:15:24 +03:00 (Migrated from github.com)
Review

Add suppress for unused parameters and documentation.

Add suppress for unused parameters and documentation.
altavir commented 2020-06-07 20:02:37 +03:00 (Migrated from github.com)
Review

Space is not actually used.

Space is not actually used.
altavir commented 2020-06-07 20:02:44 +03:00 (Migrated from github.com)
Review

Not used

Not used
evaluateMethodVisitor.visitMethodInsn(INVOKESTATIC, c, "valueOf", "($sigLetter)L${c};", false)
altavir commented 2020-06-07 19:15:24 +03:00 (Migrated from github.com)
Review

Add suppress for unused parameters and documentation.

Add suppress for unused parameters and documentation.
altavir commented 2020-06-07 20:02:37 +03:00 (Migrated from github.com)
Review

Space is not actually used.

Space is not actually used.
altavir commented 2020-06-07 20:02:44 +03:00 (Migrated from github.com)
Review

Not used

Not used
return
altavir commented 2020-06-07 19:15:24 +03:00 (Migrated from github.com)
Review

Add suppress for unused parameters and documentation.

Add suppress for unused parameters and documentation.
altavir commented 2020-06-07 20:02:37 +03:00 (Migrated from github.com)
Review

Space is not actually used.

Space is not actually used.
altavir commented 2020-06-07 20:02:44 +03:00 (Migrated from github.com)
Review

Not used

Not used
}
altavir commented 2020-06-07 19:15:24 +03:00 (Migrated from github.com)
Review

Add suppress for unused parameters and documentation.

Add suppress for unused parameters and documentation.
altavir commented 2020-06-07 20:02:37 +03:00 (Migrated from github.com)
Review

Space is not actually used.

Space is not actually used.
altavir commented 2020-06-07 20:02:44 +03:00 (Migrated from github.com)
Review

Not used

Not used
altavir commented 2020-06-07 19:15:24 +03:00 (Migrated from github.com)
Review

Add suppress for unused parameters and documentation.

Add suppress for unused parameters and documentation.
altavir commented 2020-06-07 20:02:37 +03:00 (Migrated from github.com)
Review

Space is not actually used.

Space is not actually used.
altavir commented 2020-06-07 20:02:44 +03:00 (Migrated from github.com)
Review

Not used

Not used
visitLoadAnyFromConstants(value)
altavir commented 2020-06-07 19:15:24 +03:00 (Migrated from github.com)
Review

Add suppress for unused parameters and documentation.

Add suppress for unused parameters and documentation.
altavir commented 2020-06-07 20:02:37 +03:00 (Migrated from github.com)
Review

Space is not actually used.

Space is not actually used.
altavir commented 2020-06-07 20:02:44 +03:00 (Migrated from github.com)
Review

Not used

Not used
}
fun visitLoadFromVariables(name: String, defaultValue: T? = null) = evaluateMethodVisitor.run {
@ -243,6 +262,15 @@ class AsmGenerationContext<T>(classOfT: Class<*>, private val algebra: Algebra<T
altavir commented 2020-06-07 19:15:24 +03:00 (Migrated from github.com)
Review

Add suppress for unused parameters and documentation.

Add suppress for unused parameters and documentation.
altavir commented 2020-06-07 19:15:24 +03:00 (Migrated from github.com)
Review

Add suppress for unused parameters and documentation.

Add suppress for unused parameters and documentation.
altavir commented 2020-06-07 20:02:37 +03:00 (Migrated from github.com)
Review

Space is not actually used.

Space is not actually used.
altavir commented 2020-06-07 20:02:37 +03:00 (Migrated from github.com)
Review

Space is not actually used.

Space is not actually used.
altavir commented 2020-06-07 20:02:44 +03:00 (Migrated from github.com)
Review

Not used

Not used
altavir commented 2020-06-07 20:02:44 +03:00 (Migrated from github.com)
Review

Not used

Not used
private fun visitCastToT(): Unit = evaluateMethodVisitor.visitTypeInsn(CHECKCAST, T_CLASS)
companion object {
private val SIGNATURE_LETTERS = mapOf(
altavir commented 2020-06-07 19:15:24 +03:00 (Migrated from github.com)
Review

Add suppress for unused parameters and documentation.

Add suppress for unused parameters and documentation.
altavir commented 2020-06-07 20:02:37 +03:00 (Migrated from github.com)
Review

Space is not actually used.

Space is not actually used.
altavir commented 2020-06-07 20:02:44 +03:00 (Migrated from github.com)
Review

Not used

Not used
java.lang.Byte::class.java to "B",
altavir commented 2020-06-07 19:15:24 +03:00 (Migrated from github.com)
Review

Add suppress for unused parameters and documentation.

Add suppress for unused parameters and documentation.
altavir commented 2020-06-07 20:02:37 +03:00 (Migrated from github.com)
Review

Space is not actually used.

Space is not actually used.
altavir commented 2020-06-07 20:02:44 +03:00 (Migrated from github.com)
Review

Not used

Not used
java.lang.Short::class.java to "S",
altavir commented 2020-06-07 19:15:24 +03:00 (Migrated from github.com)
Review

Add suppress for unused parameters and documentation.

Add suppress for unused parameters and documentation.
altavir commented 2020-06-07 20:02:37 +03:00 (Migrated from github.com)
Review

Space is not actually used.

Space is not actually used.
altavir commented 2020-06-07 20:02:44 +03:00 (Migrated from github.com)
Review

Not used

Not used
java.lang.Integer::class.java to "I",
altavir commented 2020-06-07 19:15:24 +03:00 (Migrated from github.com)
Review

Add suppress for unused parameters and documentation.

Add suppress for unused parameters and documentation.
altavir commented 2020-06-07 20:02:37 +03:00 (Migrated from github.com)
Review

Space is not actually used.

Space is not actually used.
altavir commented 2020-06-07 20:02:44 +03:00 (Migrated from github.com)
Review

Not used

Not used
java.lang.Long::class.java to "J",
altavir commented 2020-06-07 19:15:24 +03:00 (Migrated from github.com)
Review

Add suppress for unused parameters and documentation.

Add suppress for unused parameters and documentation.
altavir commented 2020-06-07 20:02:37 +03:00 (Migrated from github.com)
Review

Space is not actually used.

Space is not actually used.
altavir commented 2020-06-07 20:02:44 +03:00 (Migrated from github.com)
Review

Not used

Not used
java.lang.Float::class.java to "F",
altavir commented 2020-06-07 19:15:24 +03:00 (Migrated from github.com)
Review

Add suppress for unused parameters and documentation.

Add suppress for unused parameters and documentation.
altavir commented 2020-06-07 20:02:37 +03:00 (Migrated from github.com)
Review

Space is not actually used.

Space is not actually used.
altavir commented 2020-06-07 20:02:44 +03:00 (Migrated from github.com)
Review

Not used

Not used
java.lang.Double::class.java to "D"
altavir commented 2020-06-07 19:15:24 +03:00 (Migrated from github.com)
Review

Add suppress for unused parameters and documentation.

Add suppress for unused parameters and documentation.
altavir commented 2020-06-07 20:02:37 +03:00 (Migrated from github.com)
Review

Space is not actually used.

Space is not actually used.
altavir commented 2020-06-07 20:02:44 +03:00 (Migrated from github.com)
Review

Not used

Not used
)
altavir commented 2020-06-07 19:15:24 +03:00 (Migrated from github.com)
Review

Add suppress for unused parameters and documentation.

Add suppress for unused parameters and documentation.
altavir commented 2020-06-07 20:02:37 +03:00 (Migrated from github.com)
Review

Space is not actually used.

Space is not actually used.
altavir commented 2020-06-07 20:02:44 +03:00 (Migrated from github.com)
Review

Not used

Not used
altavir commented 2020-06-07 19:15:24 +03:00 (Migrated from github.com)
Review

Add suppress for unused parameters and documentation.

Add suppress for unused parameters and documentation.
altavir commented 2020-06-07 20:02:37 +03:00 (Migrated from github.com)
Review

Space is not actually used.

Space is not actually used.
altavir commented 2020-06-07 20:02:44 +03:00 (Migrated from github.com)
Review

Not used

Not used
const val ASM_COMPILED_CLASS = "scientifik/kmath/expressions/AsmCompiled"
const val LIST_CLASS = "java/util/List"
const val MAP_CLASS = "java/util/Map"

altavir commented 2020-06-07 19:15:24 +03:00 (Migrated from github.com)
Review

Add suppress for unused parameters and documentation.

Add suppress for unused parameters and documentation.
altavir commented 2020-06-07 19:15:24 +03:00 (Migrated from github.com)
Review

Add suppress for unused parameters and documentation.

Add suppress for unused parameters and documentation.
altavir commented 2020-06-07 20:02:37 +03:00 (Migrated from github.com)
Review

Space is not actually used.

Space is not actually used.
altavir commented 2020-06-07 20:02:37 +03:00 (Migrated from github.com)
Review

Space is not actually used.

Space is not actually used.
altavir commented 2020-06-07 20:02:44 +03:00 (Migrated from github.com)
Review

Not used

Not used
altavir commented 2020-06-07 20:02:44 +03:00 (Migrated from github.com)
Review

Not used

Not used

View File

@ -26,26 +26,3 @@ fun MethodVisitor.visitLdcOrFConstInsn(value: Float) = when (value) {
2f -> visitInsn(FCONST_2)
else -> visitLdcInsn(value)
}
private val signatureLetters = mapOf(
java.lang.Byte::class.java to "B",
java.lang.Short::class.java to "S",
java.lang.Integer::class.java to "I",
java.lang.Long::class.java to "J",
java.lang.Float::class.java to "F",
java.lang.Double::class.java to "D"
)
fun MethodVisitor.visitBoxedNumberConstant(number: Number) {
val clazz = number.javaClass
val c = clazz.name.replace('.', '/')
when (number) {
is Int -> visitLdcOrIConstInsn(number)
is Double -> visitLdcOrDConstInsn(number)
is Float -> visitLdcOrFConstInsn(number)
else -> visitLdcInsn(number)
}
visitMethodInsn(INVOKESTATIC, c, "valueOf", "(${signatureLetters[clazz]})L${c};", false)
}