Do numeric type conversion in JS MST compilers #447
@ -28,11 +28,14 @@ internal fun <T> MST.compileWith(algebra: Algebra<T>): Expression<T> {
|
||||
variable(node.identity)
|
||||
}
|
||||
|
||||
is Numeric -> constant(node.value)
|
||||
is Numeric -> constant(
|
||||
(algebra as? NumericAlgebra<T>)?.number(node.value) ?: error("Numeric nodes are not supported by $this")
|
||||
)
|
||||
|
||||
is Unary -> when {
|
||||
algebra is NumericAlgebra && node.value is Numeric -> constant(
|
||||
algebra.unaryOperationFunction(node.operation)(algebra.number((node.value as Numeric).value)))
|
||||
algebra.unaryOperationFunction(node.operation)(algebra.number((node.value as Numeric).value))
|
||||
)
|
||||
|
||||
else -> call(algebra.unaryOperationFunction(node.operation), visit(node.value))
|
||||
}
|
||||
|
@ -114,7 +114,7 @@ internal class DoubleWasmBuilder(target: MST) : WasmBuilder<Double, DoubleExpres
|
||||
|
||||
override fun createModule() = readBinary(f64StandardFunctions)
|
||||
|
||||
override fun visitNumeric(node: Numeric) = ctx.f64.const(node.value)
|
||||
override fun visitNumeric(node: Numeric) = ctx.f64.const(node.value.toDouble())
|
||||
|
||||
override fun visitUnary(node: Unary): ExpressionRef = when (node.operation) {
|
||||
GroupOps.MINUS_OPERATION -> ctx.f64.neg(visit(node.value))
|
||||
@ -157,7 +157,7 @@ internal class IntWasmBuilder(target: MST) : WasmBuilder<Int, IntExpression>(i32
|
||||
}
|
||||
}
|
||||
|
||||
override fun visitNumeric(node: Numeric) = ctx.i32.const(node.value)
|
||||
override fun visitNumeric(node: Numeric) = ctx.i32.const(node.value.toInt())
|
||||
|
||||
override fun visitUnary(node: Unary): ExpressionRef = when (node.operation) {
|
||||
GroupOps.MINUS_OPERATION -> ctx.i32.sub(ctx.i32.const(0), visit(node.value))
|
||||
|
Loading…
Reference in New Issue
Block a user