From 48219e4a9a17a260176806a141a5a3050dc1d03c Mon Sep 17 00:00:00 2001 From: Zalim Bashorov Date: Thu, 12 Apr 2018 02:54:51 +0300 Subject: [PATCH] [JS IR BE] support new intrinsics in IR -> JS --- .../irToJs/JsIntrinsicTransformers.kt | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/JsIntrinsicTransformers.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/JsIntrinsicTransformers.kt index 7b6a8dadba4..e1d714ee2e1 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/JsIntrinsicTransformers.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/JsIntrinsicTransformers.kt @@ -26,14 +26,38 @@ class JsIntrinsicTransformers(intrinsics: JsIntrinsics) { binOp(intrinsics.jsEqeq, JsBinaryOperator.EQ) binOp(intrinsics.jsNotEq, JsBinaryOperator.NEQ) + binOp(intrinsics.jsGt, JsBinaryOperator.GT) + binOp(intrinsics.jsGtEq, JsBinaryOperator.GTE) + binOp(intrinsics.jsLt, JsBinaryOperator.LT) + binOp(intrinsics.jsLtEq, JsBinaryOperator.LTE) + prefixOp(intrinsics.jsNot, JsUnaryOperator.NOT) + prefixOp(intrinsics.jsUnaryPlus, JsUnaryOperator.POS) + prefixOp(intrinsics.jsUnaryMinus, JsUnaryOperator.NEG) + + prefixOp(intrinsics.jsPrefixInc, JsUnaryOperator.INC) + postfixOp(intrinsics.jsPostfixInc, JsUnaryOperator.INC) + prefixOp(intrinsics.jsPrefixDec, JsUnaryOperator.DEC) + postfixOp(intrinsics.jsPostfixDec, JsUnaryOperator.DEC) + binOp(intrinsics.jsPlus, JsBinaryOperator.ADD) binOp(intrinsics.jsMinus, JsBinaryOperator.SUB) binOp(intrinsics.jsMult, JsBinaryOperator.MUL) binOp(intrinsics.jsDiv, JsBinaryOperator.DIV) binOp(intrinsics.jsMod, JsBinaryOperator.MOD) + binOp(intrinsics.jsBitAnd, JsBinaryOperator.BIT_AND) + binOp(intrinsics.jsBitOr, JsBinaryOperator.BIT_OR) + binOp(intrinsics.jsBitXor, JsBinaryOperator.BIT_XOR) + prefixOp(intrinsics.jsBitNot, JsUnaryOperator.BIT_NOT) + + binOp(intrinsics.jsBitShiftR, JsBinaryOperator.SHR) + binOp(intrinsics.jsBitShiftRU, JsBinaryOperator.SHRU) + binOp(intrinsics.jsBitShiftL, JsBinaryOperator.SHL) + + binOp(intrinsics.jsInstanceOf, JsBinaryOperator.INSTANCEOF) + add(intrinsics.jsObjectCreate) { call, _ -> val classToCreate = call.getTypeArgument(0)!! val prototype = prototypeOf(classToCreate.constructor.declarationDescriptor!!.name.toJsName().makeRef()) @@ -57,3 +81,7 @@ private fun MutableMap.binOp(function: IrFunction, private fun MutableMap.prefixOp(function: IrFunction, op: JsUnaryOperator) { put(function.symbol, { _, args -> JsPrefixOperation(op, args[0]) }) } + +private fun MutableMap.postfixOp(function: IrFunction, op: JsUnaryOperator) { + put(function.symbol, { _, args -> JsPostfixOperation(op, args[0]) }) +}