[JS IR BE] Add compiler instrinsic to express undefined value in BE

This commit is contained in:
Roman Artemev
2020-10-06 16:04:22 +03:00
parent f794ced888
commit 383146f836
2 changed files with 13 additions and 0 deletions
@@ -308,6 +308,8 @@ class JsIntrinsics(private val irBuiltIns: IrBuiltIns, val context: JsIrBackendC
val readSharedBox = defineReadSharedBox()
val writeSharedBox = defineWriteSharedBox()
val jsUndefined = defineJsUndefinedIntrinsic()
// Helpers:
private fun getInternalFunction(name: String) =
@@ -401,6 +403,14 @@ class JsIntrinsics(private val irBuiltIns: IrBuiltIns, val context: JsIrBackendC
}
}
private fun defineJsUndefinedIntrinsic(): IrSimpleFunction {
return irFactory.addFunction(externalPackageFragment) {
name = Name.identifier("\$undefined")
}.apply {
returnType = context.irBuiltIns.nothingNType
}
}
private fun defineEs6DefaultTypeIntrinsic(): IrSimpleFunction {
return irFactory.addFunction(externalPackageFragment) {
name = Name.identifier("DefaultType")
@@ -235,6 +235,9 @@ class JsIntrinsicTransformers(backendContext: JsIrBackendContext) {
val value = args[1]
jsAssignment(JsNameRef(Namer.SHARED_BOX_V, box), value)
}
add(intrinsics.jsUndefined) { call: IrCall, context: JsGenerationContext ->
JsPrefixOperation(JsUnaryOperator.VOID, JsIntLiteral(1))
}
}
}