Add symbol & IR builders to JS backend
This commit is contained in:
+110
@@ -0,0 +1,110 @@
|
||||
/*
|
||||
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.ir.backend.js.descriptors
|
||||
|
||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||
import org.jetbrains.kotlin.descriptors.*
|
||||
import org.jetbrains.kotlin.descriptors.annotations.Annotations
|
||||
import org.jetbrains.kotlin.descriptors.impl.*
|
||||
import org.jetbrains.kotlin.ir.descriptors.IrTemporaryVariableDescriptorImpl
|
||||
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
||||
import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol
|
||||
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
||||
import org.jetbrains.kotlin.ir.symbols.impl.IrSimpleFunctionSymbolImpl
|
||||
import org.jetbrains.kotlin.ir.symbols.impl.IrValueParameterSymbolImpl
|
||||
import org.jetbrains.kotlin.ir.symbols.impl.IrVariableSymbolImpl
|
||||
import org.jetbrains.kotlin.ir.symbols.impl.createFunctionSymbol
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.types.KotlinType
|
||||
|
||||
object JsSymbolBuilder {
|
||||
fun buildValueParameter(
|
||||
containingSymbol: IrSimpleFunctionSymbol,
|
||||
index: Int,
|
||||
type: KotlinType,
|
||||
name: String? = null,
|
||||
hasDefault: Boolean = false
|
||||
) =
|
||||
IrValueParameterSymbolImpl(
|
||||
ValueParameterDescriptorImpl(
|
||||
containingSymbol.descriptor,
|
||||
null,
|
||||
index,
|
||||
Annotations.EMPTY,
|
||||
Name.identifier(name ?: "param$index"),
|
||||
type,
|
||||
hasDefault,
|
||||
false,
|
||||
false,
|
||||
null,
|
||||
SourceElement.NO_SOURCE
|
||||
)
|
||||
)
|
||||
|
||||
fun buildSimpleFunction(
|
||||
containingDeclaration: DeclarationDescriptor,
|
||||
name: String,
|
||||
annotations: Annotations = Annotations.EMPTY,
|
||||
kind: CallableMemberDescriptor.Kind = CallableMemberDescriptor.Kind.SYNTHESIZED,
|
||||
source: SourceElement = SourceElement.NO_SOURCE
|
||||
) = IrSimpleFunctionSymbolImpl(
|
||||
SimpleFunctionDescriptorImpl.create(
|
||||
containingDeclaration,
|
||||
annotations,
|
||||
Name.identifier(name),
|
||||
kind,
|
||||
source
|
||||
)
|
||||
)
|
||||
|
||||
fun copyFunctionSymbol(symbol: IrFunctionSymbol, newName: String) = IrSimpleFunctionSymbolImpl(
|
||||
SimpleFunctionDescriptorImpl.create(
|
||||
symbol.descriptor.containingDeclaration,
|
||||
symbol.descriptor.annotations,
|
||||
Name.identifier(newName),
|
||||
symbol.descriptor.kind,
|
||||
symbol.descriptor.source
|
||||
)
|
||||
)
|
||||
|
||||
fun buildVar(
|
||||
containingSymbol: IrFunctionSymbol,
|
||||
name: String,
|
||||
type: KotlinType,
|
||||
mutable: Boolean = false
|
||||
) = IrVariableSymbolImpl(
|
||||
LocalVariableDescriptor(
|
||||
containingSymbol.descriptor,
|
||||
Annotations.EMPTY,
|
||||
Name.identifier(name),
|
||||
type,
|
||||
mutable,
|
||||
false,
|
||||
SourceElement.NO_SOURCE
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
fun <T : TypeParameterDescriptor> IrSimpleFunctionSymbol.initialize(
|
||||
receiverParameterType: KotlinType? = null,
|
||||
dispatchParameterDescriptor: ReceiverParameterDescriptor? = null,
|
||||
typeParameters: List<T> = emptyList(),
|
||||
valueParameters: List<ValueParameterDescriptor> = emptyList(),
|
||||
type: KotlinType? = null,
|
||||
modality: Modality = Modality.FINAL,
|
||||
visibility: Visibility = Visibilities.LOCAL
|
||||
) = this.apply {
|
||||
(descriptor as FunctionDescriptorImpl).initialize(
|
||||
receiverParameterType,
|
||||
dispatchParameterDescriptor,
|
||||
typeParameters,
|
||||
valueParameters,
|
||||
type,
|
||||
modality,
|
||||
visibility
|
||||
)
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
/*
|
||||
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.ir.backend.js.ir
|
||||
|
||||
import org.jetbrains.kotlin.backend.common.ir.Ir
|
||||
import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor
|
||||
import org.jetbrains.kotlin.ir.IrStatement
|
||||
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
|
||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOriginImpl
|
||||
import org.jetbrains.kotlin.ir.declarations.impl.IrFunctionImpl
|
||||
import org.jetbrains.kotlin.ir.declarations.impl.IrValueParameterImpl
|
||||
import org.jetbrains.kotlin.ir.declarations.impl.IrVariableImpl
|
||||
import org.jetbrains.kotlin.ir.expressions.*
|
||||
import org.jetbrains.kotlin.ir.expressions.impl.*
|
||||
import org.jetbrains.kotlin.ir.symbols.*
|
||||
import org.jetbrains.kotlin.ir.symbols.impl.IrValueParameterSymbolImpl
|
||||
import org.jetbrains.kotlin.types.KotlinType
|
||||
|
||||
object JsIrBuilder {
|
||||
|
||||
object SYNTHESIZED_STATEMENT : IrStatementOriginImpl("SYNTHESIZED_STATEMENT")
|
||||
object SYNTHESIZED_DECLARATION : IrDeclarationOriginImpl("SYNTHESIZED_DECLARATION")
|
||||
|
||||
fun buildCall(target: IrFunctionSymbol, type: KotlinType? = null, typeArguments: Map<TypeParameterDescriptor, KotlinType>? = null) =
|
||||
IrCallImpl(
|
||||
UNDEFINED_OFFSET,
|
||||
UNDEFINED_OFFSET,
|
||||
type ?: target.descriptor.returnType!!,
|
||||
target,
|
||||
target.descriptor,
|
||||
typeArguments,
|
||||
SYNTHESIZED_STATEMENT
|
||||
)
|
||||
|
||||
fun buildReturn(targetSymbol: IrFunctionSymbol, value: IrExpression) =
|
||||
IrReturnImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, targetSymbol, value)
|
||||
|
||||
fun buildValueParameter(symbol: IrValueParameterSymbol) =
|
||||
IrValueParameterImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, SYNTHESIZED_DECLARATION, symbol)
|
||||
|
||||
fun buildFunction(symbol: IrSimpleFunctionSymbol) = IrFunctionImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, SYNTHESIZED_DECLARATION, symbol)
|
||||
|
||||
fun buildGetValue(symbol: IrValueSymbol) = IrGetValueImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, symbol, SYNTHESIZED_STATEMENT)
|
||||
|
||||
fun buildBlockBody() = IrBlockBodyImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET)
|
||||
fun buildBlockBody(stmts: List<IrStatement>) = IrBlockBodyImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, stmts)
|
||||
|
||||
fun buildFunctionReference(type: KotlinType, symbol: IrFunctionSymbol) =
|
||||
IrFunctionReferenceImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, type, symbol, symbol.descriptor)
|
||||
|
||||
fun buildVar(symbol: IrVariableSymbol) = IrVariableImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, SYNTHESIZED_DECLARATION, symbol)
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user