CodegenSyntax

interface CodegenSyntax : AsmSyntax, IrSyntax

Functions

codegen
Link copied to clipboard
open fun codegen(applyFunction: CompilerContext.(receiver: StackValue, resolvedCall: ResolvedCall<*>, c: ExpressionCodegenExtension.Context) -> StackValue?, applyProperty: CompilerContext.(receiver: StackValue, resolvedCall: ResolvedCall<*>, c: ExpressionCodegenExtension.Context) -> StackValue?, generateClassSyntheticParts: CompilerContext.(codegen: ImplementationBodyCodegen) -> Unit): Codegen

The codegen function allows us to interact with applyFunction, applyProperty, and generateClassSyntheticParts. Each one of these functions are invoked as the compiled and type checked tree of KtElement and DeclarationDescriptor is processed for codegen. Here, we can alter the bytecode emitted using the Meta ASM DSL. This DSL mirrors the IR DSL offering a match + transform function that allows us to alter the codegen tree.

irAnonymousInitializer
Link copied to clipboard
open fun Meta.irAnonymousInitializer(f: IrUtils.(IrAnonymousInitializer) -> IrStatement?): IRGeneration
irBlock
Link copied to clipboard
open fun Meta.irBlock(f: IrUtils.(IrBlock) -> IrExpression?): IRGeneration
irBlockBody
Link copied to clipboard
open fun Meta.irBlockBody(f: IrUtils.(IrBlockBody) -> IrBody?): IRGeneration
irBody
Link copied to clipboard
open fun Meta.irBody(f: IrUtils.(IrBody) -> IrBody?): IRGeneration
irBranch
Link copied to clipboard
open fun Meta.irBranch(f: IrUtils.(IrBranch) -> IrBranch?): IRGeneration
irBreak
Link copied to clipboard
open fun Meta.irBreak(f: IrUtils.(IrBreak) -> IrExpression?): IRGeneration
irBreakContinue
Link copied to clipboard
open fun Meta.irBreakContinue(f: IrUtils.(IrBreakContinue) -> IrExpression?): IRGeneration
irCall
Link copied to clipboard
open fun Meta.irCall(f: IrUtils.(IrCall) -> IrElement?): IRGeneration
irCallableReference
Link copied to clipboard
open fun Meta.irCallableReference(f: IrUtils.(IrCallableReference<*>) -> IrElement?): IRGeneration
irCatch
Link copied to clipboard
open fun Meta.irCatch(f: IrUtils.(IrCatch) -> IrCatch?): IRGeneration
irClass
Link copied to clipboard
open fun Meta.irClass(f: IrUtils.(IrClass) -> IrStatement?): IRGeneration
irClassReference
Link copied to clipboard
open fun Meta.irClassReference(f: IrUtils.(IrClassReference) -> IrExpression?): IRGeneration
irComposite
Link copied to clipboard
open fun Meta.irComposite(f: IrUtils.(IrComposite) -> IrExpression?): IRGeneration
irConst
Link copied to clipboard
open fun Meta.irConst(f: IrUtils.(IrConst<*>) -> IrExpression?): IRGeneration
irConstructor
Link copied to clipboard
open fun Meta.irConstructor(f: IrUtils.(IrConstructor) -> IrStatement?): IRGeneration
irConstructorCall
Link copied to clipboard
open fun Meta.irConstructorCall(f: IrUtils.(IrConstructorCall) -> IrElement?): IRGeneration
irContainerExpression
Link copied to clipboard
open fun Meta.irContainerExpression(f: IrUtils.(IrContainerExpression) -> IrExpression?): IRGeneration
irContinue
Link copied to clipboard
open fun Meta.irContinue(f: IrUtils.(IrContinue) -> IrExpression?): IRGeneration
irDeclaration
Link copied to clipboard
open fun Meta.irDeclaration(f: IrUtils.(IrDeclaration) -> IrStatement?): IRGeneration
irDeclarationReference
Link copied to clipboard
open fun Meta.irDeclarationReference(f: IrUtils.(IrDeclarationReference) -> IrExpression?): IRGeneration
irDelegatingConstructorCall
Link copied to clipboard
open fun Meta.irDelegatingConstructorCall(f: IrUtils.(IrDelegatingConstructorCall) -> IrElement?): IRGeneration
irDoWhileLoop
Link copied to clipboard
open fun Meta.irDoWhileLoop(f: IrUtils.(IrDoWhileLoop) -> IrExpression?): IRGeneration
irDump
Link copied to clipboard
open fun Meta.irDump(): IRGeneration
irDumpKotlinLike
Link copied to clipboard
open fun Meta.irDumpKotlinLike(options: KotlinLikeDumpOptions = KotlinLikeDumpOptions()): IRGeneration
irDynamicExpression
Link copied to clipboard
open fun Meta.irDynamicExpression(f: IrUtils.(IrDynamicExpression) -> IrExpression?): IRGeneration
irDynamicMemberExpression
Link copied to clipboard
open fun Meta.irDynamicMemberExpression(f: IrUtils.(IrDynamicMemberExpression) -> IrExpression?): IRGeneration
irDynamicOperatorExpression
Link copied to clipboard
open fun Meta.irDynamicOperatorExpression(f: IrUtils.(IrDynamicOperatorExpression) -> IrExpression?): IRGeneration
irElseBranch
Link copied to clipboard
open fun Meta.irElseBranch(f: IrUtils.(IrElseBranch) -> IrElseBranch?): IRGeneration
irEnumConstructorCall
Link copied to clipboard
open fun Meta.irEnumConstructorCall(f: IrUtils.(IrEnumConstructorCall) -> IrElement?): IRGeneration
irEnumEntry
Link copied to clipboard
open fun Meta.irEnumEntry(f: IrUtils.(IrEnumEntry) -> IrStatement?): IRGeneration
irErrorCallExpression
Link copied to clipboard
open fun Meta.irErrorCallExpression(f: IrUtils.(IrErrorCallExpression) -> IrExpression?): IRGeneration
irErrorDeclaration
Link copied to clipboard
open fun Meta.irErrorDeclaration(f: IrUtils.(IrErrorDeclaration) -> IrStatement?): IRGeneration
irErrorExpression
Link copied to clipboard
open fun Meta.irErrorExpression(f: IrUtils.(IrErrorExpression) -> IrExpression?): IRGeneration
irExpression
Link copied to clipboard
open fun Meta.irExpression(f: IrUtils.(IrExpression) -> IrExpression?): IRGeneration
irExpressionBody
Link copied to clipboard
open fun Meta.irExpressionBody(f: IrUtils.(IrExpressionBody) -> IrBody?): IRGeneration
irField
Link copied to clipboard
open fun Meta.irField(f: IrUtils.(IrField) -> IrStatement?): IRGeneration
irFieldAccess
Link copied to clipboard
open fun Meta.irFieldAccess(f: IrUtils.(IrFieldAccessExpression) -> IrExpression?): IRGeneration
irFile
Link copied to clipboard
open fun Meta.irFile(f: IrUtils.(IrFile) -> IrFile?): IRGeneration
irFunction
Link copied to clipboard
open fun Meta.irFunction(f: IrUtils.(IrFunction) -> IrStatement?): IRGeneration
irFunctionAccess
Link copied to clipboard
open fun Meta.irFunctionAccess(f: IrUtils.(IrFunctionAccessExpression) -> IrElement?): IRGeneration
irFunctionReference
Link copied to clipboard
open fun Meta.irFunctionReference(f: IrUtils.(IrFunctionReference) -> IrElement?): IRGeneration
IrGeneration
Link copied to clipboard
open fun IrSyntax.IrGeneration(generate: (compilerContext: CompilerContext, moduleFragment: IrModuleFragment, pluginContext: IrPluginContext) -> Unit): IRGeneration

IR, The intermediate representation format, is a structured text format with significant indentation that contains all the information the compiler knows about a program. At this point, the compiler knows the structure of a program based on its sources, what the typed expressions are, and how each of the generic type arguments gets applied. The compiler emits information in this phase that is processed by interpreters and compilers targeting any platform. IR Example

irGetClass
Link copied to clipboard
open fun Meta.irGetClass(f: IrUtils.(IrGetClass) -> IrExpression?): IRGeneration
irGetEnumValue
Link copied to clipboard
open fun Meta.irGetEnumValue(f: IrUtils.(IrGetEnumValue) -> IrExpression?): IRGeneration
irGetField
Link copied to clipboard
open fun Meta.irGetField(f: IrUtils.(IrGetField) -> IrExpression?): IRGeneration
irGetObjectValue
Link copied to clipboard
open fun Meta.irGetObjectValue(f: IrUtils.(IrGetObjectValue) -> IrExpression?): IRGeneration
irGetValue
Link copied to clipboard
open fun Meta.irGetValue(f: IrUtils.(IrGetValue) -> IrExpression?): IRGeneration
irInstanceInitializerCall
Link copied to clipboard
open fun Meta.irInstanceInitializerCall(f: IrUtils.(IrInstanceInitializerCall) -> IrExpression?): IRGeneration
irLocalDelegatedProperty
Link copied to clipboard
open fun Meta.irLocalDelegatedProperty(f: IrUtils.(IrLocalDelegatedProperty) -> IrStatement?): IRGeneration
irLocalDelegatedPropertyReference
Link copied to clipboard
open fun Meta.irLocalDelegatedPropertyReference(f: IrUtils.(IrLocalDelegatedPropertyReference) -> IrElement?): IRGeneration
irLoop
Link copied to clipboard
open fun Meta.irLoop(f: IrUtils.(IrLoop) -> IrExpression?): IRGeneration
irMemberAccess
Link copied to clipboard
open fun Meta.irMemberAccess(f: IrUtils.(IrMemberAccessExpression<*>) -> IrElement?): IRGeneration
irModuleFragment
Link copied to clipboard
open fun Meta.irModuleFragment(f: IrUtils.(IrModuleFragment) -> IrModuleFragment?): IRGeneration
irProperty
Link copied to clipboard
open fun Meta.irProperty(f: IrUtils.(IrProperty) -> IrStatement?): IRGeneration
irPropertyReference
Link copied to clipboard
open fun Meta.irPropertyReference(f: IrUtils.(IrPropertyReference) -> IrElement?): IRGeneration
irReturn
Link copied to clipboard
open fun Meta.irReturn(f: IrUtils.(IrReturn) -> IrExpression?): IRGeneration
irSetField
Link copied to clipboard
open fun Meta.irSetField(f: IrUtils.(IrSetField) -> IrExpression?): IRGeneration
irSetValue
Link copied to clipboard
open fun Meta.irSetValue(f: IrUtils.(IrSetValue) -> IrExpression?): IRGeneration
irSimpleFunction
Link copied to clipboard
open fun Meta.irSimpleFunction(f: IrUtils.(IrSimpleFunction) -> IrStatement?): IRGeneration
irSingletonReference
Link copied to clipboard
open fun Meta.irSingletonReference(f: IrUtils.(IrGetSingletonValue) -> IrExpression?): IRGeneration
irSpreadElement
Link copied to clipboard
open fun Meta.irSpreadElement(f: IrUtils.(IrSpreadElement) -> IrSpreadElement?): IRGeneration
irStringConcatenation
Link copied to clipboard
open fun Meta.irStringConcatenation(f: IrUtils.(IrStringConcatenation) -> IrExpression?): IRGeneration
irSuspendableExpression
Link copied to clipboard
open fun Meta.irSuspendableExpression(f: IrUtils.(IrSuspendableExpression) -> IrExpression?): IRGeneration
irSuspensionPoint
Link copied to clipboard
open fun Meta.irSuspensionPoint(f: IrUtils.(IrSuspensionPoint) -> IrExpression?): IRGeneration
irSyntheticBody
Link copied to clipboard
open fun Meta.irSyntheticBody(f: IrUtils.(IrSyntheticBody) -> IrBody?): IRGeneration
irThrow
Link copied to clipboard
open fun Meta.irThrow(f: IrUtils.(IrThrow) -> IrExpression?): IRGeneration
irTry
Link copied to clipboard
open fun Meta.irTry(f: IrUtils.(IrTry) -> IrExpression?): IRGeneration
irTypeAlias
Link copied to clipboard
open fun Meta.irTypeAlias(f: IrUtils.(IrTypeAlias) -> IrTypeAlias?): IRGeneration
irTypeOperator
Link copied to clipboard
open fun Meta.irTypeOperator(f: IrUtils.(IrTypeOperatorCall) -> IrExpression?): IRGeneration
irTypeParameter
Link copied to clipboard
open fun Meta.irTypeParameter(f: IrUtils.(IrTypeParameter) -> IrStatement?): IRGeneration
irValueAccess
Link copied to clipboard
open fun Meta.irValueAccess(f: IrUtils.(IrValueAccessExpression) -> IrExpression?): IRGeneration
irValueParameter
Link copied to clipboard
open fun Meta.irValueParameter(f: IrUtils.(IrValueParameter) -> IrStatement?): IRGeneration
irVararg
Link copied to clipboard
open fun Meta.irVararg(f: IrUtils.(IrVararg) -> IrExpression?): IRGeneration
irVariable
Link copied to clipboard
open fun Meta.irVariable(f: IrUtils.(IrVariable) -> IrStatement?): IRGeneration
irWhen
Link copied to clipboard
open fun Meta.irWhen(f: IrUtils.(IrWhen) -> IrExpression?): IRGeneration
irWhileLoop
Link copied to clipboard
open fun Meta.irWhileLoop(f: IrUtils.(IrWhileLoop) -> IrExpression?): IRGeneration

Inheritors

MetaPluginSyntax
Link copied to clipboard