[JS IR BE] support new intrinsics in IR -> JS

This commit is contained in:
Zalim Bashorov
2018-04-12 02:54:51 +03:00
parent 76e102a2d2
commit 48219e4a9a
@@ -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<IrSymbol, IrCallTransformer>.binOp(function: IrFunction,
private fun MutableMap<IrSymbol, IrCallTransformer>.prefixOp(function: IrFunction, op: JsUnaryOperator) {
put(function.symbol, { _, args -> JsPrefixOperation(op, args[0]) })
}
private fun MutableMap<IrSymbol, IrCallTransformer>.postfixOp(function: IrFunction, op: JsUnaryOperator) {
put(function.symbol, { _, args -> JsPostfixOperation(op, args[0]) })
}