mirror of
https://github.com/github/codeql.git
synced 2026-04-30 11:15:13 +02:00
Extract function references
This commit is contained in:
@@ -16,11 +16,13 @@ import org.jetbrains.kotlin.ir.IrStatement
|
||||
import org.jetbrains.kotlin.ir.declarations.*
|
||||
import org.jetbrains.kotlin.ir.expressions.*
|
||||
import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol
|
||||
import org.jetbrains.kotlin.ir.symbols.IrSymbol
|
||||
import org.jetbrains.kotlin.ir.types.*
|
||||
import org.jetbrains.kotlin.ir.util.*
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.util.OperatorNameConventions
|
||||
import org.jetbrains.kotlin.types.Variance
|
||||
import java.util.*
|
||||
|
||||
open class KotlinFileExtractor(
|
||||
override val logger: FileLogger,
|
||||
@@ -421,7 +423,7 @@ open class KotlinFileExtractor(
|
||||
}
|
||||
|
||||
fun extractFunction(f: IrFunction, parentId: Label<out DbReftype>, extractBody: Boolean = true, typeSubstitution: TypeSubstitution? = null): Label<out DbCallable> {
|
||||
currentFunction = f
|
||||
declarationStack.push(f)
|
||||
|
||||
f.typeParameters.map { extractTypeParameter(it) }
|
||||
|
||||
@@ -429,7 +431,7 @@ open class KotlinFileExtractor(
|
||||
|
||||
val id =
|
||||
if (f.isLocalFunction())
|
||||
getLocalFunctionLabels(f).function
|
||||
getLocallyVisibleFunctionLabels(f).function
|
||||
else
|
||||
// TODO: figure out whether to standardise on naming top-level functions for the file-class
|
||||
// or (as temporarily done here) for their containing package.
|
||||
@@ -490,26 +492,28 @@ open class KotlinFileExtractor(
|
||||
|
||||
extractVisibility(f, id, f.visibility)
|
||||
|
||||
currentFunction = null
|
||||
declarationStack.pop()
|
||||
return id
|
||||
}
|
||||
|
||||
fun extractField(f: IrField, parentId: Label<out DbReftype>): Label<out DbField> {
|
||||
val id = useField(f)
|
||||
val locId = tw.getLocation(f)
|
||||
val type = useType(f.type)
|
||||
tw.writeFields(id, f.name.asString(), type.javaResult.id, type.kotlinResult.id, parentId, id)
|
||||
return extractField(useField(f), f.name.asString(), f.type, parentId, tw.getLocation(f), f.visibility, f, isExternalDeclaration(f))
|
||||
}
|
||||
|
||||
private fun extractField(id: Label<out DbField>, name: String, type: IrType, parentId: Label<out DbReftype>, locId: Label<DbLocation>, visibility: DescriptorVisibility, errorElement: IrElement, isExternalDeclaration: Boolean): Label<out DbField> {
|
||||
val t = useType(type)
|
||||
tw.writeFields(id, name, t.javaResult.id, t.kotlinResult.id, parentId, id)
|
||||
tw.writeHasLocation(id, locId)
|
||||
|
||||
extractVisibility(f, id, f.visibility)
|
||||
extractVisibility(errorElement, id, visibility)
|
||||
|
||||
if (!isExternalDeclaration(f)) {
|
||||
if (!isExternalDeclaration) {
|
||||
val fieldDeclarationId = tw.getFreshIdLabel<DbFielddecl>()
|
||||
tw.writeFielddecls(fieldDeclarationId, parentId)
|
||||
tw.writeFieldDeclaredIn(id, fieldDeclarationId, 0)
|
||||
tw.writeHasLocation(fieldDeclarationId, locId)
|
||||
|
||||
extractTypeAccess(type, locId, fieldDeclarationId, 0)
|
||||
extractTypeAccess(t, locId, fieldDeclarationId, 0)
|
||||
}
|
||||
|
||||
return id
|
||||
@@ -660,7 +664,7 @@ open class KotlinFileExtractor(
|
||||
}
|
||||
is IrFunction -> {
|
||||
if (s.isLocalFunction()) {
|
||||
val classId = extractGeneratedClass(s, listOf(pluginContext.irBuiltIns.anyType))
|
||||
val classId = extractGeneratedClass(s, listOf(pluginContext.irBuiltIns.anyType))
|
||||
extracLocalTypeDeclStmt(classId, s, callable, parent, idx)
|
||||
} else {
|
||||
logger.warnElement(Severity.ErrorSevere, "Expected to find local function", s)
|
||||
@@ -829,7 +833,7 @@ open class KotlinFileExtractor(
|
||||
}
|
||||
|
||||
if (callTarget.isLocalFunction()) {
|
||||
val ids = getLocalFunctionLabels(callTarget)
|
||||
val ids = getLocallyVisibleFunctionLabels(callTarget)
|
||||
|
||||
val methodId = ids.function
|
||||
tw.writeCallableBinding(id, methodId)
|
||||
@@ -1192,8 +1196,8 @@ open class KotlinFileExtractor(
|
||||
}
|
||||
}
|
||||
|
||||
private fun extractTypeArguments(
|
||||
c: IrFunctionAccessExpression,
|
||||
private fun <T : IrSymbol> extractTypeArguments(
|
||||
c: IrMemberAccessExpression<T>,
|
||||
id: Label<out DbExprparent>,
|
||||
callable: Label<out DbCallable>,
|
||||
enclosingStmt: Label<out DbStmt>,
|
||||
@@ -1269,7 +1273,9 @@ open class KotlinFileExtractor(
|
||||
|
||||
private val loopIdMap: MutableMap<IrLoop, Label<out DbKtloopstmt>> = mutableMapOf()
|
||||
|
||||
private var currentFunction: IrFunction? = null
|
||||
// todo: add all declaration types, not only IrFunctions.
|
||||
// todo: calculating the enclosing ref type could be done through this, instead of walking up the declaration parent chain
|
||||
private val declarationStack: Stack<IrDeclaration> = Stack()
|
||||
|
||||
abstract inner class StmtExprParent {
|
||||
abstract fun stmt(e: IrExpression, callable: Label<out DbCallable>): StmtParent
|
||||
@@ -1317,7 +1323,7 @@ open class KotlinFileExtractor(
|
||||
is IrDelegatingConstructorCall -> {
|
||||
val stmtParent = parent.stmt(e, callable)
|
||||
|
||||
val irCallable = currentFunction
|
||||
val irCallable = declarationStack.peek()
|
||||
if (irCallable == null) {
|
||||
logger.warnElement(Severity.ErrorSevere, "Current function is not set", e)
|
||||
return
|
||||
@@ -1443,7 +1449,7 @@ open class KotlinFileExtractor(
|
||||
}
|
||||
is IrInstanceInitializerCall -> {
|
||||
val exprParent = parent.expr(e, callable)
|
||||
val irCallable = currentFunction
|
||||
val irCallable = declarationStack.peek()
|
||||
if (irCallable == null) {
|
||||
logger.warnElement(Severity.ErrorSevere, "Current function is not set", e)
|
||||
return
|
||||
@@ -1749,9 +1755,31 @@ open class KotlinFileExtractor(
|
||||
tw.writeVariableBinding(id, instance.id)
|
||||
}
|
||||
}
|
||||
is IrFunctionReference -> {
|
||||
extractFunctionReference(e, parent, callable)
|
||||
}
|
||||
is IrFunctionExpression -> {
|
||||
/*
|
||||
* Extract generated class:
|
||||
* ```
|
||||
* class C : Any, kotlin.FunctionI<T0,T1, ... TI, R> {
|
||||
* constructor() { super(); }
|
||||
* fun invoke(a0:T0, a1:T1, ... aI: TI): R { ... }
|
||||
* }
|
||||
* ```
|
||||
* or in case of big arity lambdas
|
||||
* ```
|
||||
* class C : Any, kotlin.FunctionN<R> {
|
||||
* constructor() { super(); }
|
||||
* fun invoke(a0:T0, a1:T1, ... aI: TI): R { ... }
|
||||
* fun invoke(vararg args: Any?): R {
|
||||
* return invoke(args[0] as T0, args[1] as T1, ..., args[I] as TI)
|
||||
* }
|
||||
* }
|
||||
* ```
|
||||
**/
|
||||
|
||||
val ids = getLocalFunctionLabels(e.function)
|
||||
val ids = getLocallyVisibleFunctionLabels(e.function)
|
||||
val locId = tw.getLocation(e)
|
||||
|
||||
val ext = e.function.extensionReceiverParameter
|
||||
@@ -1766,34 +1794,10 @@ open class KotlinFileExtractor(
|
||||
var types = parameters.map { it.type }
|
||||
types += e.function.returnType
|
||||
|
||||
val fnInterface = if (types.size > BuiltInFunctionArity.BIG_ARITY) {
|
||||
pluginContext.referenceClass(FqName("kotlin.jvm.functions.FunctionN"))!!.typeWith(e.function.returnType)
|
||||
} else {
|
||||
functionN(pluginContext)(parameters.size).typeWith(types)
|
||||
}
|
||||
|
||||
/*
|
||||
* Extract generated class:
|
||||
* ```
|
||||
* class C : Any, kotlin.FunctionI<T0,T1, ... TI, R> {
|
||||
* constructor() { super(); }
|
||||
* fun invoke(a0:T0, a1:T1, ... aI: TI): R { ... }
|
||||
* }
|
||||
* ```
|
||||
* or in case of big arity lambdas
|
||||
* ```
|
||||
* class C : Any, kotlin.FunctionN<R> {
|
||||
* constructor() { super(); }
|
||||
* fun invoke(a0:T0, a1:T1, ... aI: TI): R { ... }
|
||||
* fun invoke(vararg args: Any?): R {
|
||||
* return invoke(args[0] as T0, args[1] as T1, ..., args[I] as TI)
|
||||
* }
|
||||
* }
|
||||
* ```
|
||||
* */
|
||||
extractGeneratedClass(
|
||||
val fnInterfaceType = getFunctionalInterfaceType(types)
|
||||
val id = extractGeneratedClass(
|
||||
e.function, // We're adding this function as a member, and changing its name to `invoke` to implement `kotlin.FunctionX<,,,>.invoke(,,)`
|
||||
listOf(pluginContext.irBuiltIns.anyType, fnInterface))
|
||||
listOf(pluginContext.irBuiltIns.anyType, fnInterfaceType))
|
||||
|
||||
if (types.size > BuiltInFunctionArity.BIG_ARITY) {
|
||||
implementFunctionNInvoke(e.function, ids, locId, parameters)
|
||||
@@ -1807,13 +1811,12 @@ open class KotlinFileExtractor(
|
||||
tw.writeStatementEnclosingExpr(idLambdaExpr, exprParent.enclosingStmt)
|
||||
tw.writeCallableBinding(idLambdaExpr, ids.constructor)
|
||||
|
||||
extractTypeAccess(fnInterface, callable, idLambdaExpr, -3, e, exprParent.enclosingStmt)
|
||||
extractTypeAccess(fnInterfaceType, callable, idLambdaExpr, -3, e, exprParent.enclosingStmt)
|
||||
|
||||
// todo: fix hard coded block body of lambda
|
||||
tw.writeLambdaKind(idLambdaExpr, 1)
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
tw.writeIsAnonymClass(ids.type.javaResult.id as Label<DbClass>, idLambdaExpr)
|
||||
tw.writeIsAnonymClass(id, idLambdaExpr)
|
||||
}
|
||||
is IrClassReference -> {
|
||||
val exprParent = parent.expr(e, callable)
|
||||
@@ -1833,6 +1836,308 @@ open class KotlinFileExtractor(
|
||||
}
|
||||
}
|
||||
|
||||
private fun extractFunctionReference(
|
||||
functionReferenceExpr: IrFunctionReference,
|
||||
parent: StmtExprParent,
|
||||
callable: Label<out DbCallable>
|
||||
) {
|
||||
val target = functionReferenceExpr.reflectionTarget
|
||||
if (target == null) {
|
||||
logger.warnElement(Severity.ErrorSevere, "Expected to find reflection target for function reference", functionReferenceExpr)
|
||||
return
|
||||
}
|
||||
|
||||
/*
|
||||
* Extract generated class:
|
||||
* ```
|
||||
* class C : Any, kotlin.FunctionI<T0,T1, ... TI, R> {
|
||||
* private dispatchReceiver: TD
|
||||
* private extensionReceiver: TE
|
||||
* constructor(dispatchReceiver: TD, extensionReceiver: TE) {
|
||||
* super()
|
||||
* this.dispatchReceiver = dispatchReceiver
|
||||
* this.extensionReceiver = extensionReceiver
|
||||
* }
|
||||
* fun invoke(a0:T0, a1:T1, ... aI: TI): R { return this.dispatchReceiver.FN(a0,a1,...,aI) } OR
|
||||
* fun invoke( a1:T1, ... aI: TI): R { return this.dispatchReceiver.FN(this.dispatchReceiver,a1,...,aI) } OR
|
||||
* fun invoke(a0:T0, a1:T1, ... aI: TI): R { return Ctor(a0,a1,...,aI) }
|
||||
* }
|
||||
* ```
|
||||
* or in case of big arity lambdas ????
|
||||
* ```
|
||||
* class C : Any, kotlin.FunctionN<R> {
|
||||
* private receiver: TD
|
||||
* constructor(receiver: TD) { super(); this.receiver = receiver; }
|
||||
* fun invoke(vararg args: Any?): R {
|
||||
* return this.receiver.FN(args[0] as T0, args[1] as T1, ..., args[I] as TI)
|
||||
* }
|
||||
* }
|
||||
* ```
|
||||
**/
|
||||
|
||||
val typeArguments = if (target is IrConstructorSymbol) {
|
||||
(target.owner.returnType as? IrSimpleType)?.arguments
|
||||
} else {
|
||||
(functionReferenceExpr.dispatchReceiver?.type as? IrSimpleType)?.arguments
|
||||
}
|
||||
|
||||
val targetCallableId = useFunction<DbCallable>(target.owner, typeArguments)
|
||||
val locId = tw.getLocation(functionReferenceExpr)
|
||||
|
||||
val extensionParameter = target.owner.extensionReceiverParameter
|
||||
val parameters =
|
||||
if (extensionParameter != null &&
|
||||
functionReferenceExpr.extensionReceiver == null) {
|
||||
|
||||
// No extension receiver argument is set, so we're creating a parameter for it in `invoke`
|
||||
val l = mutableListOf(extensionParameter)
|
||||
l.addAll(target.owner.valueParameters)
|
||||
l
|
||||
} else {
|
||||
// Either not an extension method or one with extension receiver specified. In the latter case a constructor
|
||||
// argument is created for the extension receiver expression and then passed as the 0th argument of the call
|
||||
// to `target`.
|
||||
target.owner.valueParameters
|
||||
}
|
||||
|
||||
val parameterTypes = parameters.map { it.type }
|
||||
val functionNTypeArguments = parameterTypes + target.owner.returnType
|
||||
val fnInterfaceType = getFunctionalInterfaceType(functionNTypeArguments)
|
||||
|
||||
val javaResult = TypeResult(tw.getFreshIdLabel<DbClass>(), "", "")
|
||||
val kotlinResult = TypeResult(tw.getFreshIdLabel<DbKt_notnull_type>(), "", "")
|
||||
tw.writeKt_notnull_types(kotlinResult.id, javaResult.id)
|
||||
val ids = LocallyVisibleFunctionLabels(
|
||||
TypeResults(javaResult, kotlinResult),
|
||||
tw.getFreshIdLabel(),
|
||||
tw.getFreshIdLabel(),
|
||||
tw.getFreshIdLabel()
|
||||
)
|
||||
|
||||
val currentDeclaration = declarationStack.peek()
|
||||
val id = extractGeneratedClass(ids, listOf(pluginContext.irBuiltIns.anyType, fnInterfaceType), locId, currentDeclaration)
|
||||
|
||||
fun writeExpressionMetadataToTrapFile(id: Label<out DbExpr>, callable: Label<out DbCallable>, stmt: Label<out DbStmt>) {
|
||||
tw.writeHasLocation(id, locId)
|
||||
tw.writeCallableEnclosingExpr(id, callable)
|
||||
tw.writeStatementEnclosingExpr(id, stmt)
|
||||
}
|
||||
|
||||
/**
|
||||
* Extract a parameter to field assignment, such as `this.field = paramName` below:
|
||||
* ```
|
||||
* constructor(paramName: type) {
|
||||
* this.field = paramName
|
||||
* }
|
||||
* ```
|
||||
*/
|
||||
fun extractParameterToFieldAssignmentInConstructor(
|
||||
paramName: String,
|
||||
type: IrType,
|
||||
fieldId: Label<DbField>,
|
||||
paramIdx: Int,
|
||||
stmtIdx: Int
|
||||
) {
|
||||
val paramId = tw.getFreshIdLabel<DbParam>()
|
||||
val paramType = extractValueParameter(paramId, type, paramName, locId, ids.constructor, paramIdx, null)
|
||||
|
||||
val assignmentStmtId = tw.getFreshIdLabel<DbExprstmt>()
|
||||
tw.writeStmts_exprstmt(assignmentStmtId, ids.constructorBlock, stmtIdx, ids.constructor)
|
||||
tw.writeHasLocation(assignmentStmtId, locId)
|
||||
|
||||
val assignmentId = tw.getFreshIdLabel<DbAssignexpr>()
|
||||
tw.writeExprs_assignexpr(assignmentId, paramType.javaResult.id, paramType.kotlinResult.id, assignmentStmtId, 0)
|
||||
writeExpressionMetadataToTrapFile(assignmentId, ids.constructor, assignmentStmtId)
|
||||
|
||||
val lhsId = tw.getFreshIdLabel<DbVaraccess>()
|
||||
tw.writeExprs_varaccess(lhsId, paramType.javaResult.id, paramType.kotlinResult.id, assignmentId, 0)
|
||||
tw.writeVariableBinding(lhsId, fieldId)
|
||||
writeExpressionMetadataToTrapFile(lhsId, ids.constructor, assignmentStmtId)
|
||||
|
||||
val thisId = tw.getFreshIdLabel<DbThisaccess>()
|
||||
tw.writeExprs_thisaccess(thisId, ids.type.javaResult.id, ids.type.kotlinResult.id, lhsId, -1)
|
||||
writeExpressionMetadataToTrapFile(thisId, ids.constructor, assignmentStmtId)
|
||||
|
||||
val rhsId = tw.getFreshIdLabel<DbVaraccess>()
|
||||
tw.writeExprs_varaccess(rhsId, paramType.javaResult.id, paramType.kotlinResult.id, assignmentId, 1)
|
||||
tw.writeVariableBinding(rhsId, paramId)
|
||||
writeExpressionMetadataToTrapFile(rhsId, ids.constructor, assignmentStmtId)
|
||||
}
|
||||
|
||||
val firstAssignmentStmtIdx = 1
|
||||
val extensionParameterIndex: Int
|
||||
val dispatchReceiver = functionReferenceExpr.dispatchReceiver
|
||||
val dispatchFieldId: Label<DbField>?
|
||||
if (dispatchReceiver != null) {
|
||||
dispatchFieldId = tw.getFreshIdLabel()
|
||||
extensionParameterIndex = 1
|
||||
|
||||
extractField(dispatchFieldId, "<dispatchReceiver>", dispatchReceiver.type, id, locId, DescriptorVisibilities.PRIVATE, functionReferenceExpr, false)
|
||||
extractParameterToFieldAssignmentInConstructor("<dispatchReceiver>", dispatchReceiver.type, dispatchFieldId, 0, firstAssignmentStmtIdx)
|
||||
} else {
|
||||
dispatchFieldId = null
|
||||
extensionParameterIndex = 0
|
||||
}
|
||||
|
||||
val extensionReceiver = functionReferenceExpr.extensionReceiver
|
||||
val extensionFieldId: Label<out DbField>?
|
||||
if (extensionReceiver != null) {
|
||||
extensionFieldId = tw.getFreshIdLabel()
|
||||
|
||||
extractField(extensionFieldId, "<extensionReceiver>", extensionReceiver.type, id, locId, DescriptorVisibilities.PRIVATE, functionReferenceExpr, false)
|
||||
extractParameterToFieldAssignmentInConstructor( "<extensionReceiver>", extensionReceiver.type, extensionFieldId, 0 + extensionParameterIndex, firstAssignmentStmtIdx + extensionParameterIndex)
|
||||
} else {
|
||||
extensionFieldId = null
|
||||
}
|
||||
|
||||
val funLabels = if (functionNTypeArguments.size > BuiltInFunctionArity.BIG_ARITY) {
|
||||
addFunctionNInvoke(target.owner.returnType, id, locId)
|
||||
} else {
|
||||
addFunctionInvoke(parameterTypes, target.owner.returnType, id, locId)
|
||||
}
|
||||
|
||||
// Return statement of generated function:
|
||||
val retId = tw.getFreshIdLabel<DbReturnstmt>()
|
||||
tw.writeStmts_returnstmt(retId, funLabels.blockId, 0, funLabels.methodId)
|
||||
tw.writeHasLocation(retId, locId)
|
||||
|
||||
// Call to target function:
|
||||
val dispatchReceiverId: Int
|
||||
val callId: Label<out DbExpr>
|
||||
val callType = useType(target.owner.returnType)
|
||||
if (target is IrConstructorSymbol) {
|
||||
callId = tw.getFreshIdLabel<DbNewexpr>()
|
||||
tw.writeExprs_newexpr(callId, callType.javaResult.id, callType.kotlinResult.id, retId, 0)
|
||||
|
||||
val typeAccessId = extractTypeAccess(callType, locId, funLabels.methodId, callId, -3, retId)
|
||||
|
||||
extractTypeArguments(functionReferenceExpr, typeAccessId, funLabels.methodId, retId)
|
||||
dispatchReceiverId = -2
|
||||
} else {
|
||||
callId = tw.getFreshIdLabel<DbMethodaccess>()
|
||||
tw.writeExprs_methodaccess(callId, callType.javaResult.id, callType.kotlinResult.id, retId, 0)
|
||||
|
||||
extractTypeArguments(functionReferenceExpr, callId, funLabels.methodId, retId, -2, true)
|
||||
dispatchReceiverId = -1
|
||||
}
|
||||
|
||||
writeExpressionMetadataToTrapFile(callId, funLabels.methodId, retId)
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
tw.writeCallableBinding(callId as Label<out DbCaller>, targetCallableId)
|
||||
|
||||
fun writeVariableAccessInInvokeBody(
|
||||
pType: TypeResults,
|
||||
idx: Int,
|
||||
variable: Label<out DbVariable>
|
||||
): Label<DbVaraccess> {
|
||||
val pId = tw.getFreshIdLabel<DbVaraccess>()
|
||||
tw.writeExprs_varaccess(pId, pType.javaResult.id, pType.kotlinResult.id, callId, idx)
|
||||
tw.writeVariableBinding(pId, variable)
|
||||
writeExpressionMetadataToTrapFile(pId, funLabels.methodId, retId)
|
||||
return pId
|
||||
}
|
||||
|
||||
fun writeFieldAccessInInvokeBody(pType: IrType, idx: Int, variable: Label<out DbField>) {
|
||||
val accessId = writeVariableAccessInInvokeBody(useType(pType), idx, variable)
|
||||
val thisId = tw.getFreshIdLabel<DbThisaccess>()
|
||||
tw.writeExprs_thisaccess(thisId, ids.type.javaResult.id, ids.type.kotlinResult.id, accessId, -1)
|
||||
writeExpressionMetadataToTrapFile(thisId, funLabels.methodId, retId)
|
||||
}
|
||||
|
||||
if (dispatchReceiver != null) {
|
||||
writeFieldAccessInInvokeBody(dispatchReceiver.type, dispatchReceiverId, dispatchFieldId!!)
|
||||
}
|
||||
|
||||
val extensionIdxOffset: Int
|
||||
if (extensionReceiver != null) {
|
||||
writeFieldAccessInInvokeBody(extensionReceiver.type, 0, extensionFieldId!!)
|
||||
extensionIdxOffset = 1
|
||||
} else {
|
||||
extensionIdxOffset = 0
|
||||
}
|
||||
|
||||
if (functionNTypeArguments.size > BuiltInFunctionArity.BIG_ARITY) {
|
||||
addArgumentsToInvocationInInvokeNBody(parameters, funLabels, retId, callId, locId, { exp -> writeExpressionMetadataToTrapFile(exp, funLabels.methodId, retId) }, extensionIdxOffset)
|
||||
} else {
|
||||
for ((pIdx, p) in funLabels.parameters.withIndex()) {
|
||||
writeVariableAccessInInvokeBody(p.second, pIdx + extensionIdxOffset, p.first)
|
||||
}
|
||||
}
|
||||
|
||||
// Add constructor (member ref) call:
|
||||
val exprParent = parent.expr(functionReferenceExpr, callable)
|
||||
val idMemberRef = tw.getFreshIdLabel<DbMemberref>()
|
||||
tw.writeExprs_memberref(idMemberRef, ids.type.javaResult.id, ids.type.kotlinResult.id, exprParent.parent, exprParent.idx)
|
||||
tw.writeHasLocation(idMemberRef, locId)
|
||||
tw.writeCallableEnclosingExpr(idMemberRef, callable)
|
||||
tw.writeStatementEnclosingExpr(idMemberRef, exprParent.enclosingStmt)
|
||||
tw.writeCallableBinding(idMemberRef, ids.constructor)
|
||||
|
||||
extractTypeAccess(fnInterfaceType, locId, callable, idMemberRef, -3, exprParent.enclosingStmt)
|
||||
|
||||
tw.writeMemberRefBinding(idMemberRef, targetCallableId)
|
||||
|
||||
// constructor arguments:
|
||||
if (dispatchReceiver != null) {
|
||||
extractExpressionExpr(dispatchReceiver, callable, idMemberRef, 0, exprParent.enclosingStmt)
|
||||
}
|
||||
|
||||
if (extensionReceiver != null) {
|
||||
extractExpressionExpr(extensionReceiver, callable, idMemberRef, 0 + extensionParameterIndex, exprParent.enclosingStmt)
|
||||
}
|
||||
|
||||
tw.writeIsAnonymClass(id, idMemberRef)
|
||||
}
|
||||
|
||||
private fun getFunctionalInterfaceType(functionNTypeArguments: List<IrType>) =
|
||||
if (functionNTypeArguments.size > BuiltInFunctionArity.BIG_ARITY) {
|
||||
pluginContext.referenceClass(FqName("kotlin.jvm.functions.FunctionN"))!!
|
||||
.typeWith(functionNTypeArguments.last())
|
||||
} else {
|
||||
functionN(pluginContext)(functionNTypeArguments.size - 1).typeWith(functionNTypeArguments)
|
||||
}
|
||||
|
||||
private data class FunctionLabels(
|
||||
val methodId: Label<DbMethod>,
|
||||
val blockId: Label<DbBlock>,
|
||||
val parameters: List<Pair<Label<DbParam>, TypeResults>>)
|
||||
|
||||
/**
|
||||
* Adds a function `invoke(a: Any[])` with the specified return type to the class identified by parentId.
|
||||
*/
|
||||
private fun addFunctionNInvoke(returnType: IrType, parentId: Label<out DbReftype>, locId: Label<DbLocation>): FunctionLabels {
|
||||
return addFunctionInvoke(listOf(pluginContext.irBuiltIns.arrayClass.typeWith(pluginContext.irBuiltIns.anyNType)), returnType, parentId, locId)
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a function named "invoke" with the specified parameter types and return type to the class identified by parentId.
|
||||
*/
|
||||
private fun addFunctionInvoke(parameterTypes: List<IrType>, returnType: IrType, parentId: Label<out DbReftype>, locId: Label<DbLocation>): FunctionLabels {
|
||||
val methodId = tw.getFreshIdLabel<DbMethod>()
|
||||
|
||||
val parameters = parameterTypes.mapIndexed { idx, p ->
|
||||
val paramId = tw.getFreshIdLabel<DbParam>()
|
||||
val paramType = extractValueParameter(paramId, p, "a$idx", locId, methodId, idx, null)
|
||||
|
||||
Pair(paramId, paramType)
|
||||
}
|
||||
|
||||
val paramsSignature = parameters.joinToString(separator = ",", prefix = "(", postfix = ")") { it.second.javaResult.signature!! }
|
||||
|
||||
val rt = useType(returnType, TypeContext.RETURN)
|
||||
val shortName = OperatorNameConventions.INVOKE.asString()
|
||||
tw.writeMethods(methodId, shortName, "$shortName$paramsSignature", rt.javaResult.id, rt.kotlinResult.id, parentId, methodId)
|
||||
tw.writeHasLocation(methodId, locId)
|
||||
|
||||
// Block
|
||||
val blockId = tw.getFreshIdLabel<DbBlock>()
|
||||
tw.writeStmts_block(blockId, methodId, 0, methodId)
|
||||
tw.writeHasLocation(blockId, locId)
|
||||
|
||||
return FunctionLabels(methodId, blockId, parameters)
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* This function generates an implementation for `fun kotlin.FunctionN<R>.invoke(vararg args: Any?): R`
|
||||
*
|
||||
@@ -1845,37 +2150,21 @@ open class KotlinFileExtractor(
|
||||
* */
|
||||
private fun implementFunctionNInvoke(
|
||||
lambda: IrFunction,
|
||||
ids: LocalFunctionLabels,
|
||||
ids: LocallyVisibleFunctionLabels,
|
||||
locId: Label<DbLocation>,
|
||||
parameters: List<IrValueParameter>
|
||||
) {
|
||||
val methodId = tw.getFreshIdLabel<DbMethod>()
|
||||
|
||||
val argsParamId = tw.getFreshIdLabel<DbParam>()
|
||||
val argsParamType = pluginContext.irBuiltIns.arrayClass.typeWith(pluginContext.irBuiltIns.anyNType)
|
||||
val paramType = extractValueParameter(argsParamId, argsParamType, "args", locId, methodId, 0, null)
|
||||
|
||||
val paramsSignature = "(${paramType.javaResult.signature!!})"
|
||||
|
||||
val returnType = useType(lambda.returnType, TypeContext.RETURN)
|
||||
val shortName = OperatorNameConventions.INVOKE.asString()
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
tw.writeMethods(methodId, shortName, "$shortName$paramsSignature", returnType.javaResult.id, returnType.kotlinResult.id, ids.type.javaResult.id as Label<out DbReftype>, methodId)
|
||||
tw.writeHasLocation(methodId, locId)
|
||||
|
||||
// Block
|
||||
val blockId = tw.getFreshIdLabel<DbBlock>()
|
||||
tw.writeStmts_block(blockId, methodId, 0, methodId)
|
||||
tw.writeHasLocation(blockId, locId)
|
||||
val funLabels = addFunctionNInvoke(lambda.returnType, ids.type.javaResult.id as Label<DbReftype>, locId)
|
||||
|
||||
// Return
|
||||
val retId = tw.getFreshIdLabel<DbReturnstmt>()
|
||||
tw.writeStmts_returnstmt(retId, blockId, 0, methodId)
|
||||
tw.writeStmts_returnstmt(retId, funLabels.blockId, 0, funLabels.methodId)
|
||||
tw.writeHasLocation(retId, locId)
|
||||
|
||||
fun extractCommonExpr(id: Label<out DbExpr>) {
|
||||
tw.writeHasLocation(id, locId)
|
||||
tw.writeCallableEnclosingExpr(id, methodId)
|
||||
tw.writeCallableEnclosingExpr(id, funLabels.methodId)
|
||||
tw.writeStatementEnclosingExpr(id, retId)
|
||||
}
|
||||
|
||||
@@ -1892,16 +2181,36 @@ open class KotlinFileExtractor(
|
||||
tw.writeExprs_thisaccess(thisId, ids.type.javaResult.id, ids.type.kotlinResult.id, callId, -1)
|
||||
extractCommonExpr(thisId)
|
||||
|
||||
// parameters
|
||||
addArgumentsToInvocationInInvokeNBody(parameters, funLabels, retId, callId, locId, ::extractCommonExpr)
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds the arguments to the method call inside `invoke(a0: Any[])`. Each argument is an array access with a cast:
|
||||
*
|
||||
* ```
|
||||
* fun invoke(args: Any[]) : T {
|
||||
* return fn(args[0] as T0, args[1] as T1, ...)
|
||||
* }
|
||||
* ```
|
||||
*/
|
||||
private fun addArgumentsToInvocationInInvokeNBody(
|
||||
parameters: List<IrValueParameter>,
|
||||
funLabels: FunctionLabels,
|
||||
retId: Label<DbReturnstmt>,
|
||||
callId: Label<out DbExprparent>,
|
||||
locId: Label<DbLocation>,
|
||||
extractCommonExpr: (Label<out DbExpr>) -> Unit,
|
||||
firstArgumentOffset: Int = 0
|
||||
) {
|
||||
val intType = useType(pluginContext.irBuiltIns.intType)
|
||||
val argsParamType = pluginContext.irBuiltIns.arrayClass.typeWith(pluginContext.irBuiltIns.anyNType)
|
||||
val argsType = useType(argsParamType)
|
||||
val anyNType = useType(pluginContext.irBuiltIns.anyNType)
|
||||
|
||||
val func =
|
||||
pluginContext.irBuiltIns.arrayClass.owner.declarations.find { it is IrFunction && it.name.asString() == "get" }
|
||||
val arrayIndexerFunction = pluginContext.irBuiltIns.arrayClass.owner.declarations.find { it is IrFunction && it.name.asString() == "get" }
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
val arrayGetMethodId = useFunction<DbMethod>(func as IrFunction)
|
||||
val arrayIndexerFunctionId = useFunction<DbMethod>(arrayIndexerFunction as IrFunction)
|
||||
|
||||
for ((pIdx, p) in parameters.withIndex()) {
|
||||
// `args[i] as Ti` is generated below for each parameter
|
||||
@@ -1909,23 +2218,23 @@ open class KotlinFileExtractor(
|
||||
// cast
|
||||
val castId = tw.getFreshIdLabel<DbCastexpr>()
|
||||
val type = useType(p.type)
|
||||
tw.writeExprs_castexpr(castId, type.javaResult.id, type.kotlinResult.id, callId, pIdx)
|
||||
tw.writeExprs_castexpr(castId, type.javaResult.id, type.kotlinResult.id, callId, pIdx + firstArgumentOffset)
|
||||
extractCommonExpr(castId)
|
||||
|
||||
// type access
|
||||
extractTypeAccess(p.type, locId, methodId, castId, 0, retId)
|
||||
extractTypeAccess(p.type, locId, funLabels.methodId, castId, 0, retId)
|
||||
|
||||
// element access: `args.get(i)`
|
||||
val getCallId = tw.getFreshIdLabel<DbMethodaccess>()
|
||||
tw.writeExprs_methodaccess(getCallId, anyNType.javaResult.id, anyNType.kotlinResult.id, castId, 1)
|
||||
extractCommonExpr(getCallId)
|
||||
tw.writeCallableBinding(getCallId, arrayGetMethodId)
|
||||
tw.writeCallableBinding(getCallId, arrayIndexerFunctionId)
|
||||
|
||||
// parameter access:
|
||||
val argsAccessId = tw.getFreshIdLabel<DbVaraccess>()
|
||||
tw.writeExprs_varaccess(argsAccessId, argsType.javaResult.id, argsType.kotlinResult.id, getCallId, -1)
|
||||
extractCommonExpr(argsAccessId)
|
||||
tw.writeVariableBinding(argsAccessId, argsParamId)
|
||||
tw.writeVariableBinding(argsAccessId, funLabels.parameters.first().first)
|
||||
|
||||
// index access:
|
||||
val indexId = tw.getFreshIdLabel<DbIntegerliteral>()
|
||||
@@ -2087,27 +2396,29 @@ open class KotlinFileExtractor(
|
||||
private val IrType.isAnonymous: Boolean
|
||||
get() = ((this as? IrSimpleType)?.classifier?.owner as? IrClass)?.isAnonymousObject ?: false
|
||||
|
||||
private fun extractGeneratedClass(localFunction: IrFunction, superTypes: List<IrType>) : Label<out DbClass> {
|
||||
val ids = getLocalFunctionLabels(localFunction)
|
||||
|
||||
/**
|
||||
* Extracts the class around a local function, a lambda, or a function reference.
|
||||
*/
|
||||
private fun extractGeneratedClass(
|
||||
ids: LocallyVisibleFunctionLabels,
|
||||
superTypes: List<IrType>,
|
||||
locId: Label<DbLocation>,
|
||||
currentDeclaration: IrDeclaration
|
||||
): Label<out DbClass> {
|
||||
// Write class
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
val id = ids.type.javaResult.id as Label<out DbClass>
|
||||
val pkgId = extractPackage("")
|
||||
tw.writeClasses(id, "", pkgId, id)
|
||||
val locId = tw.getLocation(localFunction)
|
||||
tw.writeHasLocation(id, locId)
|
||||
|
||||
// Extract local function as a member
|
||||
extractFunctionIfReal(localFunction, id)
|
||||
|
||||
// Extract constructor
|
||||
val unitType = useType(pluginContext.irBuiltIns.unitType)
|
||||
tw.writeConstrs(ids.constructor, "", "", unitType.javaResult.id, unitType.kotlinResult.id, id, ids.constructor)
|
||||
tw.writeHasLocation(ids.constructor, locId)
|
||||
|
||||
// Constructor body
|
||||
val constructorBlockId = tw.getFreshIdLabel<DbBlock>()
|
||||
val constructorBlockId = ids.constructorBlock
|
||||
tw.writeStmts_block(constructorBlockId, ids.constructor, 0, ids.constructor)
|
||||
tw.writeHasLocation(constructorBlockId, locId)
|
||||
|
||||
@@ -2127,7 +2438,7 @@ open class KotlinFileExtractor(
|
||||
addModifiers(id, "public", "static", "final")
|
||||
extractClassSupertypes(superTypes, listOf(), id)
|
||||
|
||||
var parent: IrDeclarationParent? = localFunction.parent
|
||||
var parent: IrDeclarationParent? = currentDeclaration.parent
|
||||
while (parent != null) {
|
||||
// todo: merge this with the implementation in `extractClassSource`
|
||||
if (parent is IrClass) {
|
||||
@@ -2144,7 +2455,7 @@ open class KotlinFileExtractor(
|
||||
}
|
||||
|
||||
if (parent is IrFile) {
|
||||
if (this is KotlinSourceFileExtractor && this.file == localFunction.fileOrNull) {
|
||||
if (this is KotlinSourceFileExtractor && this.file == parent) {
|
||||
tw.writeEnclInReftype(id, this.fileClass)
|
||||
} else {
|
||||
logger.warn(Severity.ErrorSevere, "Unexpected file parent found")
|
||||
@@ -2157,4 +2468,18 @@ open class KotlinFileExtractor(
|
||||
|
||||
return id
|
||||
}
|
||||
|
||||
/**
|
||||
* Extracts the class around a local function or a lambda.
|
||||
*/
|
||||
private fun extractGeneratedClass(localFunction: IrFunction, superTypes: List<IrType>) : Label<out DbClass> {
|
||||
val ids = getLocallyVisibleFunctionLabels(localFunction)
|
||||
|
||||
val id = extractGeneratedClass(ids, superTypes, tw.getLocation(localFunction), localFunction)
|
||||
|
||||
// Extract local function as a member
|
||||
extractFunctionIfReal(localFunction, id)
|
||||
|
||||
return id
|
||||
}
|
||||
}
|
||||
|
||||
@@ -542,25 +542,38 @@ class X {
|
||||
return this.visibility == DescriptorVisibilities.LOCAL
|
||||
}
|
||||
|
||||
private val generatedLocalFunctionTypeMapping: MutableMap<IrFunction, LocalFunctionLabels> = mutableMapOf()
|
||||
private val locallyVisibleFunctionLabelMapping: MutableMap<IrFunction, LocallyVisibleFunctionLabels> = mutableMapOf()
|
||||
|
||||
data class LocalFunctionLabels(val type: TypeResults, val constructor: Label<DbConstructor>, val function: Label<DbMethod>)
|
||||
/**
|
||||
* Data class to hold labels generated for locally visible functions, such as
|
||||
* - local functions,
|
||||
* - lambdas, and
|
||||
* - wrappers around function references.
|
||||
*/
|
||||
data class LocallyVisibleFunctionLabels(val type: TypeResults, val constructor: Label<DbConstructor>, val function: Label<DbMethod>, val constructorBlock: Label<DbBlock>)
|
||||
|
||||
fun getLocalFunctionLabels(f: IrFunction): LocalFunctionLabels {
|
||||
/**
|
||||
* Gets the labels for functions belonging to
|
||||
* - local functions, and
|
||||
* - lambdas.
|
||||
*/
|
||||
fun getLocallyVisibleFunctionLabels(f: IrFunction): LocallyVisibleFunctionLabels {
|
||||
if (!f.isLocalFunction()){
|
||||
logger.warn(Severity.ErrorSevere, "Extracting a non-local function as a local one")
|
||||
}
|
||||
|
||||
var res = generatedLocalFunctionTypeMapping[f]
|
||||
var res = locallyVisibleFunctionLabelMapping[f]
|
||||
if (res == null) {
|
||||
val javaResult = TypeResult(tw.getFreshIdLabel<DbClass>(), "", "")
|
||||
val kotlinResult = TypeResult(tw.getFreshIdLabel<DbKt_notnull_type>(), "", "")
|
||||
tw.writeKt_notnull_types(kotlinResult.id, javaResult.id)
|
||||
res = LocalFunctionLabels(
|
||||
res = LocallyVisibleFunctionLabels(
|
||||
TypeResults(javaResult, kotlinResult),
|
||||
tw.getFreshIdLabel(),
|
||||
tw.getFreshIdLabel())
|
||||
generatedLocalFunctionTypeMapping[f] = res
|
||||
tw.getFreshIdLabel(),
|
||||
tw.getFreshIdLabel()
|
||||
)
|
||||
locallyVisibleFunctionLabelMapping[f] = res
|
||||
}
|
||||
|
||||
return res
|
||||
@@ -576,7 +589,7 @@ class X {
|
||||
|
||||
fun <T: DbCallable> useFunction(f: IrFunction, classTypeArguments: List<IrTypeArgument>? = null): Label<out T> {
|
||||
if (f.isLocalFunction()) {
|
||||
val ids = getLocalFunctionLabels(f)
|
||||
val ids = getLocallyVisibleFunctionLabels(f)
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
return ids.function as Label<out T>
|
||||
} else {
|
||||
|
||||
@@ -1220,7 +1220,7 @@ funcExprs.kt:
|
||||
# 28| 0: [StringLiteral]
|
||||
# 28| 1: [Method] invoke
|
||||
#-----| 4: (Parameters)
|
||||
# 28| 0: [Parameter] args
|
||||
# 28| 0: [Parameter] a0
|
||||
# 28| 5: [BlockStmt] { ... }
|
||||
# 28| 0: [ReturnStmt] return ...
|
||||
# 28| 0: [MethodAccess] invoke(...)
|
||||
@@ -1228,131 +1228,596 @@ funcExprs.kt:
|
||||
# 28| 0: [CastExpr] (...)...
|
||||
# 28| 0: [TypeAccess] int
|
||||
# 28| 1: [MethodAccess] get(...)
|
||||
# 28| -1: [VarAccess] args
|
||||
# 28| -1: [VarAccess] a0
|
||||
# 28| 0: [IntegerLiteral] 0
|
||||
# 28| 1: [CastExpr] (...)...
|
||||
# 28| 0: [TypeAccess] int
|
||||
# 28| 1: [MethodAccess] get(...)
|
||||
# 28| -1: [VarAccess] args
|
||||
# 28| -1: [VarAccess] a0
|
||||
# 28| 1: [IntegerLiteral] 1
|
||||
# 28| 2: [CastExpr] (...)...
|
||||
# 28| 0: [TypeAccess] int
|
||||
# 28| 1: [MethodAccess] get(...)
|
||||
# 28| -1: [VarAccess] args
|
||||
# 28| -1: [VarAccess] a0
|
||||
# 28| 2: [IntegerLiteral] 2
|
||||
# 28| 3: [CastExpr] (...)...
|
||||
# 28| 0: [TypeAccess] int
|
||||
# 28| 1: [MethodAccess] get(...)
|
||||
# 28| -1: [VarAccess] args
|
||||
# 28| -1: [VarAccess] a0
|
||||
# 28| 3: [IntegerLiteral] 3
|
||||
# 28| 4: [CastExpr] (...)...
|
||||
# 28| 0: [TypeAccess] int
|
||||
# 28| 1: [MethodAccess] get(...)
|
||||
# 28| -1: [VarAccess] args
|
||||
# 28| -1: [VarAccess] a0
|
||||
# 28| 4: [IntegerLiteral] 4
|
||||
# 28| 5: [CastExpr] (...)...
|
||||
# 28| 0: [TypeAccess] int
|
||||
# 28| 1: [MethodAccess] get(...)
|
||||
# 28| -1: [VarAccess] args
|
||||
# 28| -1: [VarAccess] a0
|
||||
# 28| 5: [IntegerLiteral] 5
|
||||
# 28| 6: [CastExpr] (...)...
|
||||
# 28| 0: [TypeAccess] int
|
||||
# 28| 1: [MethodAccess] get(...)
|
||||
# 28| -1: [VarAccess] args
|
||||
# 28| -1: [VarAccess] a0
|
||||
# 28| 6: [IntegerLiteral] 6
|
||||
# 28| 7: [CastExpr] (...)...
|
||||
# 28| 0: [TypeAccess] int
|
||||
# 28| 1: [MethodAccess] get(...)
|
||||
# 28| -1: [VarAccess] args
|
||||
# 28| -1: [VarAccess] a0
|
||||
# 28| 7: [IntegerLiteral] 7
|
||||
# 28| 8: [CastExpr] (...)...
|
||||
# 28| 0: [TypeAccess] int
|
||||
# 28| 1: [MethodAccess] get(...)
|
||||
# 28| -1: [VarAccess] args
|
||||
# 28| -1: [VarAccess] a0
|
||||
# 28| 8: [IntegerLiteral] 8
|
||||
# 28| 9: [CastExpr] (...)...
|
||||
# 28| 0: [TypeAccess] int
|
||||
# 28| 1: [MethodAccess] get(...)
|
||||
# 28| -1: [VarAccess] args
|
||||
# 28| -1: [VarAccess] a0
|
||||
# 28| 9: [IntegerLiteral] 9
|
||||
# 28| 10: [CastExpr] (...)...
|
||||
# 28| 0: [TypeAccess] int
|
||||
# 28| 1: [MethodAccess] get(...)
|
||||
# 28| -1: [VarAccess] args
|
||||
# 28| -1: [VarAccess] a0
|
||||
# 28| 10: [IntegerLiteral] 10
|
||||
# 28| 11: [CastExpr] (...)...
|
||||
# 28| 0: [TypeAccess] int
|
||||
# 28| 1: [MethodAccess] get(...)
|
||||
# 28| -1: [VarAccess] args
|
||||
# 28| -1: [VarAccess] a0
|
||||
# 28| 11: [IntegerLiteral] 11
|
||||
# 28| 12: [CastExpr] (...)...
|
||||
# 28| 0: [TypeAccess] int
|
||||
# 28| 1: [MethodAccess] get(...)
|
||||
# 28| -1: [VarAccess] args
|
||||
# 28| -1: [VarAccess] a0
|
||||
# 28| 12: [IntegerLiteral] 12
|
||||
# 28| 13: [CastExpr] (...)...
|
||||
# 28| 0: [TypeAccess] int
|
||||
# 28| 1: [MethodAccess] get(...)
|
||||
# 28| -1: [VarAccess] args
|
||||
# 28| -1: [VarAccess] a0
|
||||
# 28| 13: [IntegerLiteral] 13
|
||||
# 28| 14: [CastExpr] (...)...
|
||||
# 28| 0: [TypeAccess] int
|
||||
# 28| 1: [MethodAccess] get(...)
|
||||
# 28| -1: [VarAccess] args
|
||||
# 28| -1: [VarAccess] a0
|
||||
# 28| 14: [IntegerLiteral] 14
|
||||
# 28| 15: [CastExpr] (...)...
|
||||
# 28| 0: [TypeAccess] int
|
||||
# 28| 1: [MethodAccess] get(...)
|
||||
# 28| -1: [VarAccess] args
|
||||
# 28| -1: [VarAccess] a0
|
||||
# 28| 15: [IntegerLiteral] 15
|
||||
# 28| 16: [CastExpr] (...)...
|
||||
# 28| 0: [TypeAccess] int
|
||||
# 28| 1: [MethodAccess] get(...)
|
||||
# 28| -1: [VarAccess] args
|
||||
# 28| -1: [VarAccess] a0
|
||||
# 28| 16: [IntegerLiteral] 16
|
||||
# 28| 17: [CastExpr] (...)...
|
||||
# 28| 0: [TypeAccess] int
|
||||
# 28| 1: [MethodAccess] get(...)
|
||||
# 28| -1: [VarAccess] args
|
||||
# 28| -1: [VarAccess] a0
|
||||
# 28| 17: [IntegerLiteral] 17
|
||||
# 28| 18: [CastExpr] (...)...
|
||||
# 28| 0: [TypeAccess] int
|
||||
# 28| 1: [MethodAccess] get(...)
|
||||
# 28| -1: [VarAccess] args
|
||||
# 28| -1: [VarAccess] a0
|
||||
# 28| 18: [IntegerLiteral] 18
|
||||
# 28| 19: [CastExpr] (...)...
|
||||
# 28| 0: [TypeAccess] int
|
||||
# 28| 1: [MethodAccess] get(...)
|
||||
# 28| -1: [VarAccess] args
|
||||
# 28| -1: [VarAccess] a0
|
||||
# 28| 19: [IntegerLiteral] 19
|
||||
# 28| 20: [CastExpr] (...)...
|
||||
# 28| 0: [TypeAccess] int
|
||||
# 28| 1: [MethodAccess] get(...)
|
||||
# 28| -1: [VarAccess] args
|
||||
# 28| -1: [VarAccess] a0
|
||||
# 28| 20: [IntegerLiteral] 20
|
||||
# 28| 21: [CastExpr] (...)...
|
||||
# 28| 0: [TypeAccess] int
|
||||
# 28| 1: [MethodAccess] get(...)
|
||||
# 28| -1: [VarAccess] args
|
||||
# 28| -1: [VarAccess] a0
|
||||
# 28| 21: [IntegerLiteral] 21
|
||||
# 28| 22: [CastExpr] (...)...
|
||||
# 28| 0: [TypeAccess] int
|
||||
# 28| 1: [MethodAccess] get(...)
|
||||
# 28| -1: [VarAccess] args
|
||||
# 28| -1: [VarAccess] a0
|
||||
# 28| 22: [IntegerLiteral] 22
|
||||
# 28| -3: [TypeAccess] FunctionN<String>
|
||||
# 31| 2: [Class] MyLambda
|
||||
# 31| 1: [Constructor] MyLambda
|
||||
# 31| 5: [BlockStmt] { ... }
|
||||
# 31| 0: [SuperConstructorInvocationStmt] super(...)
|
||||
# 31| 1: [ExprStmt] <Expr>;
|
||||
# 31| 0: [MethodAccess] <obinit>(...)
|
||||
# 32| 3: [Method] invoke
|
||||
# 30| 14: [ExprStmt] <Expr>;
|
||||
# 30| 0: [MethodAccess] functionExpression0a(...)
|
||||
# 30| 0: [MemberRefExpr] ...::...
|
||||
# 30| -4: [AnonymousClass] new Function0<Integer>(...) { ... }
|
||||
# 30| 1: [Constructor]
|
||||
#-----| 4: (Parameters)
|
||||
# 30| 0: [Parameter] <dispatchReceiver>
|
||||
# 30| 5: [BlockStmt] { ... }
|
||||
# 30| 0: [SuperConstructorInvocationStmt] super(...)
|
||||
# 30| 1: [ExprStmt] <Expr>;
|
||||
# 30| 0: [AssignExpr] ...=...
|
||||
# 30| 0: [VarAccess] this.<dispatchReceiver>
|
||||
# 30| -1: [ThisAccess] this
|
||||
# 30| 1: [VarAccess] <dispatchReceiver>
|
||||
# 30| 1: [FieldDeclaration] FuncRef <dispatchReceiver>;
|
||||
# 30| -1: [TypeAccess] FuncRef
|
||||
# 30| 1: [Method] invoke
|
||||
# 30| 5: [BlockStmt] { ... }
|
||||
# 30| 0: [ReturnStmt] return ...
|
||||
# 30| 0: [MethodAccess] f0(...)
|
||||
# 30| -1: [VarAccess] this.<dispatchReceiver>
|
||||
# 30| -1: [ThisAccess] this
|
||||
# 30| -3: [TypeAccess] Function0<Integer>
|
||||
# 30| 0: [ClassInstanceExpr] new FuncRef(...)
|
||||
# 30| -3: [TypeAccess] FuncRef
|
||||
# 31| 15: [ExprStmt] <Expr>;
|
||||
# 31| 0: [MethodAccess] functionExpression0a(...)
|
||||
# 31| 0: [MemberRefExpr] ...::...
|
||||
# 31| -4: [AnonymousClass] new Function0<Integer>(...) { ... }
|
||||
# 31| 1: [Constructor]
|
||||
#-----| 4: (Parameters)
|
||||
# 31| 0: [Parameter] <dispatchReceiver>
|
||||
# 31| 5: [BlockStmt] { ... }
|
||||
# 31| 0: [SuperConstructorInvocationStmt] super(...)
|
||||
# 31| 1: [ExprStmt] <Expr>;
|
||||
# 31| 0: [AssignExpr] ...=...
|
||||
# 31| 0: [VarAccess] this.<dispatchReceiver>
|
||||
# 31| -1: [ThisAccess] this
|
||||
# 31| 1: [VarAccess] <dispatchReceiver>
|
||||
# 31| 1: [FieldDeclaration] Companion <dispatchReceiver>;
|
||||
# 31| -1: [TypeAccess] Companion
|
||||
# 31| 1: [Method] invoke
|
||||
# 31| 5: [BlockStmt] { ... }
|
||||
# 31| 0: [ReturnStmt] return ...
|
||||
# 31| 0: [MethodAccess] f0(...)
|
||||
# 31| -1: [VarAccess] this.<dispatchReceiver>
|
||||
# 31| -1: [ThisAccess] this
|
||||
# 31| -3: [TypeAccess] Function0<Integer>
|
||||
# 31| 0: [VarAccess] Companion
|
||||
# 32| 16: [ExprStmt] <Expr>;
|
||||
# 32| 0: [MethodAccess] functionExpression1a(...)
|
||||
# 32| 0: [IntegerLiteral] 5
|
||||
# 32| 1: [MemberRefExpr] ...::...
|
||||
# 32| -4: [AnonymousClass] new Function1<Integer,Integer>(...) { ... }
|
||||
# 32| 1: [Constructor]
|
||||
#-----| 4: (Parameters)
|
||||
# 32| 0: [Parameter] <dispatchReceiver>
|
||||
# 32| 5: [BlockStmt] { ... }
|
||||
# 32| 0: [SuperConstructorInvocationStmt] super(...)
|
||||
# 32| 1: [ExprStmt] <Expr>;
|
||||
# 32| 0: [AssignExpr] ...=...
|
||||
# 32| 0: [VarAccess] this.<dispatchReceiver>
|
||||
# 32| -1: [ThisAccess] this
|
||||
# 32| 1: [VarAccess] <dispatchReceiver>
|
||||
# 32| 1: [FieldDeclaration] FuncRef <dispatchReceiver>;
|
||||
# 32| -1: [TypeAccess] FuncRef
|
||||
# 32| 1: [Method] invoke
|
||||
#-----| 4: (Parameters)
|
||||
# 32| 0: [Parameter] a0
|
||||
# 32| 5: [BlockStmt] { ... }
|
||||
# 32| 0: [ReturnStmt] return ...
|
||||
# 32| 0: [MethodAccess] f1(...)
|
||||
# 32| -1: [VarAccess] this.<dispatchReceiver>
|
||||
# 32| -1: [ThisAccess] this
|
||||
# 32| 0: [VarAccess] a0
|
||||
# 32| -3: [TypeAccess] Function1<Integer,Integer>
|
||||
# 32| 0: [ClassInstanceExpr] new FuncRef(...)
|
||||
# 32| -3: [TypeAccess] FuncRef
|
||||
# 33| 17: [ExprStmt] <Expr>;
|
||||
# 33| 0: [MethodAccess] functionExpression1a(...)
|
||||
# 33| 0: [IntegerLiteral] 5
|
||||
# 33| 1: [MemberRefExpr] ...::...
|
||||
# 33| -4: [AnonymousClass] new Function1<Integer,Integer>(...) { ... }
|
||||
# 33| 1: [Constructor]
|
||||
#-----| 4: (Parameters)
|
||||
# 33| 0: [Parameter] <extensionReceiver>
|
||||
# 33| 5: [BlockStmt] { ... }
|
||||
# 33| 0: [SuperConstructorInvocationStmt] super(...)
|
||||
# 33| 1: [ExprStmt] <Expr>;
|
||||
# 33| 0: [AssignExpr] ...=...
|
||||
# 33| 0: [VarAccess] this.<extensionReceiver>
|
||||
# 33| -1: [ThisAccess] this
|
||||
# 33| 1: [VarAccess] <extensionReceiver>
|
||||
# 33| 1: [FieldDeclaration] int <extensionReceiver>;
|
||||
# 33| -1: [TypeAccess] int
|
||||
# 33| 1: [Method] invoke
|
||||
#-----| 4: (Parameters)
|
||||
# 33| 0: [Parameter] a0
|
||||
# 33| 5: [BlockStmt] { ... }
|
||||
# 33| 0: [ReturnStmt] return ...
|
||||
# 33| 0: [MethodAccess] f3(...)
|
||||
# 33| 0: [VarAccess] this.<extensionReceiver>
|
||||
# 33| -1: [ThisAccess] this
|
||||
# 33| 1: [VarAccess] a0
|
||||
# 33| -3: [TypeAccess] Function1<Integer,Integer>
|
||||
# 33| 0: [IntegerLiteral] 3
|
||||
# 34| 18: [ExprStmt] <Expr>;
|
||||
# 34| 0: [MethodAccess] functionExpression3(...)
|
||||
# 34| 0: [IntegerLiteral] 5
|
||||
# 34| 1: [MemberRefExpr] ...::...
|
||||
# 34| -4: [AnonymousClass] new Function2<Integer,Integer,Integer>(...) { ... }
|
||||
# 34| 1: [Constructor]
|
||||
# 34| 5: [BlockStmt] { ... }
|
||||
# 34| 0: [SuperConstructorInvocationStmt] super(...)
|
||||
# 34| 1: [Method] invoke
|
||||
#-----| 4: (Parameters)
|
||||
# 34| 0: [Parameter] a0
|
||||
# 34| 1: [Parameter] a1
|
||||
# 34| 5: [BlockStmt] { ... }
|
||||
# 34| 0: [ReturnStmt] return ...
|
||||
# 34| 0: [MethodAccess] f3(...)
|
||||
# 34| 0: [VarAccess] a0
|
||||
# 34| 1: [VarAccess] a1
|
||||
# 34| -3: [TypeAccess] Function2<Integer,Integer,Integer>
|
||||
# 35| 19: [ExprStmt] <Expr>;
|
||||
# 35| 0: [MethodAccess] functionExpression22(...)
|
||||
# 35| 0: [IntegerLiteral] 5
|
||||
# 35| 1: [MemberRefExpr] ...::...
|
||||
# 35| -4: [AnonymousClass] new Function22<Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Unit>(...) { ... }
|
||||
# 35| 1: [Constructor]
|
||||
#-----| 4: (Parameters)
|
||||
# 35| 0: [Parameter] <dispatchReceiver>
|
||||
# 35| 5: [BlockStmt] { ... }
|
||||
# 35| 0: [SuperConstructorInvocationStmt] super(...)
|
||||
# 35| 1: [ExprStmt] <Expr>;
|
||||
# 35| 0: [AssignExpr] ...=...
|
||||
# 35| 0: [VarAccess] this.<dispatchReceiver>
|
||||
# 35| -1: [ThisAccess] this
|
||||
# 35| 1: [VarAccess] <dispatchReceiver>
|
||||
# 35| 1: [FieldDeclaration] FuncRef <dispatchReceiver>;
|
||||
# 35| -1: [TypeAccess] FuncRef
|
||||
# 35| 1: [Method] invoke
|
||||
#-----| 4: (Parameters)
|
||||
# 35| 0: [Parameter] a0
|
||||
# 35| 1: [Parameter] a1
|
||||
# 35| 2: [Parameter] a2
|
||||
# 35| 3: [Parameter] a3
|
||||
# 35| 4: [Parameter] a4
|
||||
# 35| 5: [Parameter] a5
|
||||
# 35| 6: [Parameter] a6
|
||||
# 35| 7: [Parameter] a7
|
||||
# 35| 8: [Parameter] a8
|
||||
# 35| 9: [Parameter] a9
|
||||
# 35| 10: [Parameter] a10
|
||||
# 35| 11: [Parameter] a11
|
||||
# 35| 12: [Parameter] a12
|
||||
# 35| 13: [Parameter] a13
|
||||
# 35| 14: [Parameter] a14
|
||||
# 35| 15: [Parameter] a15
|
||||
# 35| 16: [Parameter] a16
|
||||
# 35| 17: [Parameter] a17
|
||||
# 35| 18: [Parameter] a18
|
||||
# 35| 19: [Parameter] a19
|
||||
# 35| 20: [Parameter] a20
|
||||
# 35| 21: [Parameter] a21
|
||||
# 35| 5: [BlockStmt] { ... }
|
||||
# 35| 0: [ReturnStmt] return ...
|
||||
# 35| 0: [MethodAccess] f22(...)
|
||||
# 35| -1: [VarAccess] this.<dispatchReceiver>
|
||||
# 35| -1: [ThisAccess] this
|
||||
# 35| 0: [VarAccess] a0
|
||||
# 35| 1: [VarAccess] a1
|
||||
# 35| 2: [VarAccess] a2
|
||||
# 35| 3: [VarAccess] a3
|
||||
# 35| 4: [VarAccess] a4
|
||||
# 35| 5: [VarAccess] a5
|
||||
# 35| 6: [VarAccess] a6
|
||||
# 35| 7: [VarAccess] a7
|
||||
# 35| 8: [VarAccess] a8
|
||||
# 35| 9: [VarAccess] a9
|
||||
# 35| 10: [VarAccess] a10
|
||||
# 35| 11: [VarAccess] a11
|
||||
# 35| 12: [VarAccess] a12
|
||||
# 35| 13: [VarAccess] a13
|
||||
# 35| 14: [VarAccess] a14
|
||||
# 35| 15: [VarAccess] a15
|
||||
# 35| 16: [VarAccess] a16
|
||||
# 35| 17: [VarAccess] a17
|
||||
# 35| 18: [VarAccess] a18
|
||||
# 35| 19: [VarAccess] a19
|
||||
# 35| 20: [VarAccess] a20
|
||||
# 35| 21: [VarAccess] a21
|
||||
# 35| -3: [TypeAccess] Function22<Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Unit>
|
||||
# 35| 0: [ClassInstanceExpr] new FuncRef(...)
|
||||
# 35| -3: [TypeAccess] FuncRef
|
||||
# 36| 20: [ExprStmt] <Expr>;
|
||||
# 36| 0: [MethodAccess] functionExpression23(...)
|
||||
# 36| 0: [IntegerLiteral] 5
|
||||
# 36| 1: [MemberRefExpr] ...::...
|
||||
# 36| -4: [AnonymousClass] new FunctionN<String>(...) { ... }
|
||||
# 36| 1: [Constructor]
|
||||
#-----| 4: (Parameters)
|
||||
# 36| 0: [Parameter] <dispatchReceiver>
|
||||
# 36| 5: [BlockStmt] { ... }
|
||||
# 36| 0: [SuperConstructorInvocationStmt] super(...)
|
||||
# 36| 1: [ExprStmt] <Expr>;
|
||||
# 36| 0: [AssignExpr] ...=...
|
||||
# 36| 0: [VarAccess] this.<dispatchReceiver>
|
||||
# 36| -1: [ThisAccess] this
|
||||
# 36| 1: [VarAccess] <dispatchReceiver>
|
||||
# 36| 1: [FieldDeclaration] FuncRef <dispatchReceiver>;
|
||||
# 36| -1: [TypeAccess] FuncRef
|
||||
# 36| 1: [Method] invoke
|
||||
#-----| 4: (Parameters)
|
||||
# 36| 0: [Parameter] a0
|
||||
# 36| 5: [BlockStmt] { ... }
|
||||
# 36| 0: [ReturnStmt] return ...
|
||||
# 36| 0: [MethodAccess] f23(...)
|
||||
# 36| -1: [VarAccess] this.<dispatchReceiver>
|
||||
# 36| -1: [ThisAccess] this
|
||||
# 36| 0: [CastExpr] (...)...
|
||||
# 36| 0: [TypeAccess] int
|
||||
# 36| 1: [MethodAccess] get(...)
|
||||
# 36| -1: [VarAccess] a0
|
||||
# 36| 0: [IntegerLiteral] 0
|
||||
# 36| 1: [CastExpr] (...)...
|
||||
# 36| 0: [TypeAccess] int
|
||||
# 36| 1: [MethodAccess] get(...)
|
||||
# 36| -1: [VarAccess] a0
|
||||
# 36| 1: [IntegerLiteral] 1
|
||||
# 36| 2: [CastExpr] (...)...
|
||||
# 36| 0: [TypeAccess] int
|
||||
# 36| 1: [MethodAccess] get(...)
|
||||
# 36| -1: [VarAccess] a0
|
||||
# 36| 2: [IntegerLiteral] 2
|
||||
# 36| 3: [CastExpr] (...)...
|
||||
# 36| 0: [TypeAccess] int
|
||||
# 36| 1: [MethodAccess] get(...)
|
||||
# 36| -1: [VarAccess] a0
|
||||
# 36| 3: [IntegerLiteral] 3
|
||||
# 36| 4: [CastExpr] (...)...
|
||||
# 36| 0: [TypeAccess] int
|
||||
# 36| 1: [MethodAccess] get(...)
|
||||
# 36| -1: [VarAccess] a0
|
||||
# 36| 4: [IntegerLiteral] 4
|
||||
# 36| 5: [CastExpr] (...)...
|
||||
# 36| 0: [TypeAccess] int
|
||||
# 36| 1: [MethodAccess] get(...)
|
||||
# 36| -1: [VarAccess] a0
|
||||
# 36| 5: [IntegerLiteral] 5
|
||||
# 36| 6: [CastExpr] (...)...
|
||||
# 36| 0: [TypeAccess] int
|
||||
# 36| 1: [MethodAccess] get(...)
|
||||
# 36| -1: [VarAccess] a0
|
||||
# 36| 6: [IntegerLiteral] 6
|
||||
# 36| 7: [CastExpr] (...)...
|
||||
# 36| 0: [TypeAccess] int
|
||||
# 36| 1: [MethodAccess] get(...)
|
||||
# 36| -1: [VarAccess] a0
|
||||
# 36| 7: [IntegerLiteral] 7
|
||||
# 36| 8: [CastExpr] (...)...
|
||||
# 36| 0: [TypeAccess] int
|
||||
# 36| 1: [MethodAccess] get(...)
|
||||
# 36| -1: [VarAccess] a0
|
||||
# 36| 8: [IntegerLiteral] 8
|
||||
# 36| 9: [CastExpr] (...)...
|
||||
# 36| 0: [TypeAccess] int
|
||||
# 36| 1: [MethodAccess] get(...)
|
||||
# 36| -1: [VarAccess] a0
|
||||
# 36| 9: [IntegerLiteral] 9
|
||||
# 36| 10: [CastExpr] (...)...
|
||||
# 36| 0: [TypeAccess] int
|
||||
# 36| 1: [MethodAccess] get(...)
|
||||
# 36| -1: [VarAccess] a0
|
||||
# 36| 10: [IntegerLiteral] 10
|
||||
# 36| 11: [CastExpr] (...)...
|
||||
# 36| 0: [TypeAccess] int
|
||||
# 36| 1: [MethodAccess] get(...)
|
||||
# 36| -1: [VarAccess] a0
|
||||
# 36| 11: [IntegerLiteral] 11
|
||||
# 36| 12: [CastExpr] (...)...
|
||||
# 36| 0: [TypeAccess] int
|
||||
# 36| 1: [MethodAccess] get(...)
|
||||
# 36| -1: [VarAccess] a0
|
||||
# 36| 12: [IntegerLiteral] 12
|
||||
# 36| 13: [CastExpr] (...)...
|
||||
# 36| 0: [TypeAccess] int
|
||||
# 36| 1: [MethodAccess] get(...)
|
||||
# 36| -1: [VarAccess] a0
|
||||
# 36| 13: [IntegerLiteral] 13
|
||||
# 36| 14: [CastExpr] (...)...
|
||||
# 36| 0: [TypeAccess] int
|
||||
# 36| 1: [MethodAccess] get(...)
|
||||
# 36| -1: [VarAccess] a0
|
||||
# 36| 14: [IntegerLiteral] 14
|
||||
# 36| 15: [CastExpr] (...)...
|
||||
# 36| 0: [TypeAccess] int
|
||||
# 36| 1: [MethodAccess] get(...)
|
||||
# 36| -1: [VarAccess] a0
|
||||
# 36| 15: [IntegerLiteral] 15
|
||||
# 36| 16: [CastExpr] (...)...
|
||||
# 36| 0: [TypeAccess] int
|
||||
# 36| 1: [MethodAccess] get(...)
|
||||
# 36| -1: [VarAccess] a0
|
||||
# 36| 16: [IntegerLiteral] 16
|
||||
# 36| 17: [CastExpr] (...)...
|
||||
# 36| 0: [TypeAccess] int
|
||||
# 36| 1: [MethodAccess] get(...)
|
||||
# 36| -1: [VarAccess] a0
|
||||
# 36| 17: [IntegerLiteral] 17
|
||||
# 36| 18: [CastExpr] (...)...
|
||||
# 36| 0: [TypeAccess] int
|
||||
# 36| 1: [MethodAccess] get(...)
|
||||
# 36| -1: [VarAccess] a0
|
||||
# 36| 18: [IntegerLiteral] 18
|
||||
# 36| 19: [CastExpr] (...)...
|
||||
# 36| 0: [TypeAccess] int
|
||||
# 36| 1: [MethodAccess] get(...)
|
||||
# 36| -1: [VarAccess] a0
|
||||
# 36| 19: [IntegerLiteral] 19
|
||||
# 36| 20: [CastExpr] (...)...
|
||||
# 36| 0: [TypeAccess] int
|
||||
# 36| 1: [MethodAccess] get(...)
|
||||
# 36| -1: [VarAccess] a0
|
||||
# 36| 20: [IntegerLiteral] 20
|
||||
# 36| 21: [CastExpr] (...)...
|
||||
# 36| 0: [TypeAccess] int
|
||||
# 36| 1: [MethodAccess] get(...)
|
||||
# 36| -1: [VarAccess] a0
|
||||
# 36| 21: [IntegerLiteral] 21
|
||||
# 36| 22: [CastExpr] (...)...
|
||||
# 36| 0: [TypeAccess] int
|
||||
# 36| 1: [MethodAccess] get(...)
|
||||
# 36| -1: [VarAccess] a0
|
||||
# 36| 22: [IntegerLiteral] 22
|
||||
# 36| -3: [TypeAccess] FunctionN<String>
|
||||
# 36| 0: [ClassInstanceExpr] new FuncRef(...)
|
||||
# 36| -3: [TypeAccess] FuncRef
|
||||
# 38| 21: [LocalTypeDeclStmt] class ...
|
||||
# 38| 0: [LocalClass]
|
||||
# 38| 1: [Constructor]
|
||||
# 38| 5: [BlockStmt] { ... }
|
||||
# 38| 0: [SuperConstructorInvocationStmt] super(...)
|
||||
# 38| 1: [Method] local
|
||||
# 38| 5: [BlockStmt] { ... }
|
||||
# 38| 0: [ReturnStmt] return ...
|
||||
# 38| 0: [IntegerLiteral] 5
|
||||
# 39| 22: [ExprStmt] <Expr>;
|
||||
# 39| 0: [MethodAccess] functionExpression0a(...)
|
||||
# 39| 0: [MemberRefExpr] ...::...
|
||||
# 39| -4: [AnonymousClass] new Function0<Integer>(...) { ... }
|
||||
# 39| 1: [Constructor]
|
||||
# 39| 5: [BlockStmt] { ... }
|
||||
# 39| 0: [SuperConstructorInvocationStmt] super(...)
|
||||
# 39| 1: [Method] invoke
|
||||
# 39| 5: [BlockStmt] { ... }
|
||||
# 39| 0: [ReturnStmt] return ...
|
||||
# 39| 0: [MethodAccess] local(...)
|
||||
# 39| -3: [TypeAccess] Function0<Integer>
|
||||
# 41| 23: [ExprStmt] <Expr>;
|
||||
# 41| 0: [MethodAccess] fn(...)
|
||||
# 41| -2: [TypeAccess] FuncRef
|
||||
# 41| 0: [MemberRefExpr] ...::...
|
||||
# 41| -4: [AnonymousClass] new Function0<FuncRef>(...) { ... }
|
||||
# 41| 1: [Constructor]
|
||||
# 41| 5: [BlockStmt] { ... }
|
||||
# 41| 0: [SuperConstructorInvocationStmt] super(...)
|
||||
# 41| 1: [Method] invoke
|
||||
# 41| 5: [BlockStmt] { ... }
|
||||
# 41| 0: [ReturnStmt] return ...
|
||||
# 41| 0: [ClassInstanceExpr] new FuncRef(...)
|
||||
# 41| -3: [TypeAccess] FuncRef
|
||||
# 41| -3: [TypeAccess] Function0<FuncRef>
|
||||
# 48| 12: [Method] fn
|
||||
#-----| 2: (Generic Parameters)
|
||||
# 48| 0: [TypeVariable] T
|
||||
#-----| 4: (Parameters)
|
||||
# 32| 0: [Parameter] x
|
||||
# 32| 5: [BlockStmt] { ... }
|
||||
# 32| 0: [ReturnStmt] return ...
|
||||
# 32| 0: [IntegerLiteral] 5
|
||||
# 48| 0: [Parameter] l
|
||||
# 48| 5: [BlockStmt] { ... }
|
||||
# 49| 13: [ExtensionMethod] f3
|
||||
#-----| 4: (Parameters)
|
||||
# 49| 0: [Parameter] <this>
|
||||
# 49| 1: [Parameter] a
|
||||
# 49| 5: [BlockStmt] { ... }
|
||||
# 49| 0: [ReturnStmt] return ...
|
||||
# 49| 0: [IntegerLiteral] 5
|
||||
# 44| 2: [Class] MyLambda
|
||||
# 44| 1: [Constructor] MyLambda
|
||||
# 44| 5: [BlockStmt] { ... }
|
||||
# 44| 0: [SuperConstructorInvocationStmt] super(...)
|
||||
# 44| 1: [ExprStmt] <Expr>;
|
||||
# 44| 0: [MethodAccess] <obinit>(...)
|
||||
# 45| 3: [Method] invoke
|
||||
#-----| 4: (Parameters)
|
||||
# 45| 0: [Parameter] x
|
||||
# 45| 5: [BlockStmt] { ... }
|
||||
# 45| 0: [ReturnStmt] return ...
|
||||
# 45| 0: [IntegerLiteral] 5
|
||||
# 51| 3: [Class] FuncRef
|
||||
# 51| 1: [Constructor] FuncRef
|
||||
# 51| 5: [BlockStmt] { ... }
|
||||
# 51| 0: [SuperConstructorInvocationStmt] super(...)
|
||||
# 51| 1: [ExprStmt] <Expr>;
|
||||
# 51| 0: [MethodAccess] <obinit>(...)
|
||||
# 52| 3: [Class] Companion
|
||||
# 52| 1: [Constructor] Companion
|
||||
# 52| 5: [BlockStmt] { ... }
|
||||
# 52| 0: [SuperConstructorInvocationStmt] super(...)
|
||||
# 52| 1: [ExprStmt] <Expr>;
|
||||
# 52| 0: [MethodAccess] <obinit>(...)
|
||||
# 53| 3: [Method] f0
|
||||
# 53| 5: [BlockStmt] { ... }
|
||||
# 53| 0: [ReturnStmt] return ...
|
||||
# 53| 0: [IntegerLiteral] 5
|
||||
# 55| 4: [Method] f0
|
||||
# 55| 5: [BlockStmt] { ... }
|
||||
# 55| 0: [ReturnStmt] return ...
|
||||
# 55| 0: [IntegerLiteral] 5
|
||||
# 56| 5: [Method] f1
|
||||
#-----| 4: (Parameters)
|
||||
# 56| 0: [Parameter] a
|
||||
# 56| 5: [BlockStmt] { ... }
|
||||
# 56| 0: [ReturnStmt] return ...
|
||||
# 56| 0: [IntegerLiteral] 5
|
||||
# 57| 6: [Method] f22
|
||||
#-----| 4: (Parameters)
|
||||
# 57| 0: [Parameter] a0
|
||||
# 57| 1: [Parameter] a1
|
||||
# 57| 2: [Parameter] a2
|
||||
# 57| 3: [Parameter] a3
|
||||
# 57| 4: [Parameter] a4
|
||||
# 57| 5: [Parameter] a5
|
||||
# 57| 6: [Parameter] a6
|
||||
# 57| 7: [Parameter] a7
|
||||
# 57| 8: [Parameter] a8
|
||||
# 57| 9: [Parameter] a9
|
||||
# 57| 10: [Parameter] a10
|
||||
# 58| 11: [Parameter] a11
|
||||
# 58| 12: [Parameter] a12
|
||||
# 58| 13: [Parameter] a13
|
||||
# 58| 14: [Parameter] a14
|
||||
# 58| 15: [Parameter] a15
|
||||
# 58| 16: [Parameter] a16
|
||||
# 58| 17: [Parameter] a17
|
||||
# 58| 18: [Parameter] a18
|
||||
# 58| 19: [Parameter] a19
|
||||
# 58| 20: [Parameter] a20
|
||||
# 58| 21: [Parameter] a21
|
||||
# 58| 5: [BlockStmt] { ... }
|
||||
# 59| 7: [Method] f23
|
||||
#-----| 4: (Parameters)
|
||||
# 59| 0: [Parameter] a0
|
||||
# 59| 1: [Parameter] a1
|
||||
# 59| 2: [Parameter] a2
|
||||
# 59| 3: [Parameter] a3
|
||||
# 59| 4: [Parameter] a4
|
||||
# 59| 5: [Parameter] a5
|
||||
# 59| 6: [Parameter] a6
|
||||
# 59| 7: [Parameter] a7
|
||||
# 59| 8: [Parameter] a8
|
||||
# 59| 9: [Parameter] a9
|
||||
# 59| 10: [Parameter] a10
|
||||
# 60| 11: [Parameter] a11
|
||||
# 60| 12: [Parameter] a12
|
||||
# 60| 13: [Parameter] a13
|
||||
# 60| 14: [Parameter] a14
|
||||
# 60| 15: [Parameter] a15
|
||||
# 60| 16: [Parameter] a16
|
||||
# 60| 17: [Parameter] a17
|
||||
# 60| 18: [Parameter] a18
|
||||
# 60| 19: [Parameter] a19
|
||||
# 60| 20: [Parameter] a20
|
||||
# 60| 21: [Parameter] a21
|
||||
# 60| 22: [Parameter] a22
|
||||
# 60| 5: [BlockStmt] { ... }
|
||||
# 60| 0: [ReturnStmt] return ...
|
||||
# 60| 0: [StringLiteral]
|
||||
localFunctionCalls.kt:
|
||||
# 0| [CompilationUnit] localFunctionCalls
|
||||
# 0| 1: [Class] LocalFunctionCallsKt
|
||||
|
||||
@@ -612,75 +612,75 @@
|
||||
| exprs.kt:220:5:220:29 | x | exprs.kt:219:1:221:1 | fnClassRef | LocalVariableDeclExpr |
|
||||
| exprs.kt:220:13:220:29 | SomeClass1 | exprs.kt:219:1:221:1 | fnClassRef | TypeAccess |
|
||||
| exprs.kt:220:13:220:29 | SomeClass1.class | exprs.kt:219:1:221:1 | fnClassRef | TypeLiteral |
|
||||
| funcExprs.kt:14:5:14:33 | functionExpression0a(...) | funcExprs.kt:13:1:29:1 | call | MethodAccess |
|
||||
| funcExprs.kt:14:26:14:33 | ...->... | funcExprs.kt:13:1:29:1 | call | LambdaExpr |
|
||||
| funcExprs.kt:14:26:14:33 | Function0<Integer> | funcExprs.kt:13:1:29:1 | call | TypeAccess |
|
||||
| funcExprs.kt:14:5:14:33 | functionExpression0a(...) | funcExprs.kt:13:1:42:1 | call | MethodAccess |
|
||||
| funcExprs.kt:14:26:14:33 | ...->... | funcExprs.kt:13:1:42:1 | call | LambdaExpr |
|
||||
| funcExprs.kt:14:26:14:33 | Function0<Integer> | funcExprs.kt:13:1:42:1 | call | TypeAccess |
|
||||
| funcExprs.kt:14:31:14:31 | 5 | funcExprs.kt:14:26:14:33 | invoke | IntegerLiteral |
|
||||
| funcExprs.kt:15:5:15:33 | functionExpression0b(...) | funcExprs.kt:13:1:29:1 | call | MethodAccess |
|
||||
| funcExprs.kt:15:26:15:33 | ...->... | funcExprs.kt:13:1:29:1 | call | LambdaExpr |
|
||||
| funcExprs.kt:15:26:15:33 | Function0<Object> | funcExprs.kt:13:1:29:1 | call | TypeAccess |
|
||||
| funcExprs.kt:15:5:15:33 | functionExpression0b(...) | funcExprs.kt:13:1:42:1 | call | MethodAccess |
|
||||
| funcExprs.kt:15:26:15:33 | ...->... | funcExprs.kt:13:1:42:1 | call | LambdaExpr |
|
||||
| funcExprs.kt:15:26:15:33 | Function0<Object> | funcExprs.kt:13:1:42:1 | call | TypeAccess |
|
||||
| funcExprs.kt:15:31:15:31 | 5 | funcExprs.kt:15:26:15:33 | invoke | IntegerLiteral |
|
||||
| funcExprs.kt:16:5:16:33 | functionExpression0c(...) | funcExprs.kt:13:1:29:1 | call | MethodAccess |
|
||||
| funcExprs.kt:16:26:16:33 | ...->... | funcExprs.kt:13:1:29:1 | call | LambdaExpr |
|
||||
| funcExprs.kt:16:26:16:33 | Function0<Object> | funcExprs.kt:13:1:29:1 | call | TypeAccess |
|
||||
| funcExprs.kt:16:5:16:33 | functionExpression0c(...) | funcExprs.kt:13:1:42:1 | call | MethodAccess |
|
||||
| funcExprs.kt:16:26:16:33 | ...->... | funcExprs.kt:13:1:42:1 | call | LambdaExpr |
|
||||
| funcExprs.kt:16:26:16:33 | Function0<Object> | funcExprs.kt:13:1:42:1 | call | TypeAccess |
|
||||
| funcExprs.kt:16:31:16:31 | 5 | funcExprs.kt:16:26:16:33 | invoke | IntegerLiteral |
|
||||
| funcExprs.kt:17:5:17:38 | functionExpression1a(...) | funcExprs.kt:13:1:29:1 | call | MethodAccess |
|
||||
| funcExprs.kt:17:26:17:26 | 5 | funcExprs.kt:13:1:29:1 | call | IntegerLiteral |
|
||||
| funcExprs.kt:17:29:17:38 | ...->... | funcExprs.kt:13:1:29:1 | call | LambdaExpr |
|
||||
| funcExprs.kt:17:29:17:38 | Function1<Integer,Integer> | funcExprs.kt:13:1:29:1 | call | TypeAccess |
|
||||
| funcExprs.kt:17:5:17:38 | functionExpression1a(...) | funcExprs.kt:13:1:42:1 | call | MethodAccess |
|
||||
| funcExprs.kt:17:26:17:26 | 5 | funcExprs.kt:13:1:42:1 | call | IntegerLiteral |
|
||||
| funcExprs.kt:17:29:17:38 | ...->... | funcExprs.kt:13:1:42:1 | call | LambdaExpr |
|
||||
| funcExprs.kt:17:29:17:38 | Function1<Integer,Integer> | funcExprs.kt:13:1:42:1 | call | TypeAccess |
|
||||
| funcExprs.kt:17:36:17:36 | 5 | funcExprs.kt:17:29:17:38 | invoke | IntegerLiteral |
|
||||
| funcExprs.kt:18:5:18:34 | functionExpression1a(...) | funcExprs.kt:13:1:29:1 | call | MethodAccess |
|
||||
| funcExprs.kt:18:26:18:26 | 5 | funcExprs.kt:13:1:29:1 | call | IntegerLiteral |
|
||||
| funcExprs.kt:18:29:18:34 | ...->... | funcExprs.kt:13:1:29:1 | call | LambdaExpr |
|
||||
| funcExprs.kt:18:29:18:34 | Function1<Integer,Integer> | funcExprs.kt:13:1:29:1 | call | TypeAccess |
|
||||
| funcExprs.kt:18:5:18:34 | functionExpression1a(...) | funcExprs.kt:13:1:42:1 | call | MethodAccess |
|
||||
| funcExprs.kt:18:26:18:26 | 5 | funcExprs.kt:13:1:42:1 | call | IntegerLiteral |
|
||||
| funcExprs.kt:18:29:18:34 | ...->... | funcExprs.kt:13:1:42:1 | call | LambdaExpr |
|
||||
| funcExprs.kt:18:29:18:34 | Function1<Integer,Integer> | funcExprs.kt:13:1:42:1 | call | TypeAccess |
|
||||
| funcExprs.kt:18:31:18:32 | it | funcExprs.kt:18:29:18:34 | invoke | VarAccess |
|
||||
| funcExprs.kt:19:5:19:43 | functionExpression1a(...) | funcExprs.kt:13:1:29:1 | call | MethodAccess |
|
||||
| funcExprs.kt:19:26:19:26 | 5 | funcExprs.kt:13:1:29:1 | call | IntegerLiteral |
|
||||
| funcExprs.kt:19:29:19:42 | ...->... | funcExprs.kt:13:1:29:1 | call | LambdaExpr |
|
||||
| funcExprs.kt:19:29:19:42 | Function1<Integer,Integer> | funcExprs.kt:13:1:29:1 | call | TypeAccess |
|
||||
| funcExprs.kt:19:5:19:43 | functionExpression1a(...) | funcExprs.kt:13:1:42:1 | call | MethodAccess |
|
||||
| funcExprs.kt:19:26:19:26 | 5 | funcExprs.kt:13:1:42:1 | call | IntegerLiteral |
|
||||
| funcExprs.kt:19:29:19:42 | ...->... | funcExprs.kt:13:1:42:1 | call | LambdaExpr |
|
||||
| funcExprs.kt:19:29:19:42 | Function1<Integer,Integer> | funcExprs.kt:13:1:42:1 | call | TypeAccess |
|
||||
| funcExprs.kt:19:42:19:42 | 5 | funcExprs.kt:19:29:19:42 | invoke | IntegerLiteral |
|
||||
| funcExprs.kt:20:5:20:39 | functionExpression1a(...) | funcExprs.kt:13:1:29:1 | call | MethodAccess |
|
||||
| funcExprs.kt:20:26:20:26 | 5 | funcExprs.kt:13:1:29:1 | call | IntegerLiteral |
|
||||
| funcExprs.kt:20:29:20:38 | MyLambda | funcExprs.kt:13:1:29:1 | call | TypeAccess |
|
||||
| funcExprs.kt:20:29:20:38 | new MyLambda(...) | funcExprs.kt:13:1:29:1 | call | ClassInstanceExpr |
|
||||
| funcExprs.kt:21:5:21:37 | functionExpression1b(...) | funcExprs.kt:13:1:29:1 | call | MethodAccess |
|
||||
| funcExprs.kt:21:26:21:26 | 5 | funcExprs.kt:13:1:29:1 | call | IntegerLiteral |
|
||||
| funcExprs.kt:21:29:21:37 | ...->... | funcExprs.kt:13:1:29:1 | call | LambdaExpr |
|
||||
| funcExprs.kt:21:29:21:37 | Function1<Object,Object> | funcExprs.kt:13:1:29:1 | call | TypeAccess |
|
||||
| funcExprs.kt:20:5:20:39 | functionExpression1a(...) | funcExprs.kt:13:1:42:1 | call | MethodAccess |
|
||||
| funcExprs.kt:20:26:20:26 | 5 | funcExprs.kt:13:1:42:1 | call | IntegerLiteral |
|
||||
| funcExprs.kt:20:29:20:38 | MyLambda | funcExprs.kt:13:1:42:1 | call | TypeAccess |
|
||||
| funcExprs.kt:20:29:20:38 | new MyLambda(...) | funcExprs.kt:13:1:42:1 | call | ClassInstanceExpr |
|
||||
| funcExprs.kt:21:5:21:37 | functionExpression1b(...) | funcExprs.kt:13:1:42:1 | call | MethodAccess |
|
||||
| funcExprs.kt:21:26:21:26 | 5 | funcExprs.kt:13:1:42:1 | call | IntegerLiteral |
|
||||
| funcExprs.kt:21:29:21:37 | ...->... | funcExprs.kt:13:1:42:1 | call | LambdaExpr |
|
||||
| funcExprs.kt:21:29:21:37 | Function1<Object,Object> | funcExprs.kt:13:1:42:1 | call | TypeAccess |
|
||||
| funcExprs.kt:21:36:21:36 | a | funcExprs.kt:21:29:21:37 | invoke | VarAccess |
|
||||
| funcExprs.kt:22:5:22:51 | functionExpression2(...) | funcExprs.kt:13:1:29:1 | call | MethodAccess |
|
||||
| funcExprs.kt:22:25:22:25 | 5 | funcExprs.kt:13:1:29:1 | call | IntegerLiteral |
|
||||
| funcExprs.kt:22:28:22:50 | ...->... | funcExprs.kt:13:1:29:1 | call | LambdaExpr |
|
||||
| funcExprs.kt:22:28:22:50 | Function2<Integer,Integer,Integer> | funcExprs.kt:13:1:29:1 | call | TypeAccess |
|
||||
| funcExprs.kt:22:5:22:51 | functionExpression2(...) | funcExprs.kt:13:1:42:1 | call | MethodAccess |
|
||||
| funcExprs.kt:22:25:22:25 | 5 | funcExprs.kt:13:1:42:1 | call | IntegerLiteral |
|
||||
| funcExprs.kt:22:28:22:50 | ...->... | funcExprs.kt:13:1:42:1 | call | LambdaExpr |
|
||||
| funcExprs.kt:22:28:22:50 | Function2<Integer,Integer,Integer> | funcExprs.kt:13:1:42:1 | call | TypeAccess |
|
||||
| funcExprs.kt:22:50:22:50 | 5 | funcExprs.kt:22:28:22:50 | invoke | IntegerLiteral |
|
||||
| funcExprs.kt:23:5:23:40 | functionExpression2(...) | funcExprs.kt:13:1:29:1 | call | MethodAccess |
|
||||
| funcExprs.kt:23:25:23:25 | 5 | funcExprs.kt:13:1:29:1 | call | IntegerLiteral |
|
||||
| funcExprs.kt:23:28:23:40 | ...->... | funcExprs.kt:13:1:29:1 | call | LambdaExpr |
|
||||
| funcExprs.kt:23:28:23:40 | Function2<Integer,Integer,Integer> | funcExprs.kt:13:1:29:1 | call | TypeAccess |
|
||||
| funcExprs.kt:23:5:23:40 | functionExpression2(...) | funcExprs.kt:13:1:42:1 | call | MethodAccess |
|
||||
| funcExprs.kt:23:25:23:25 | 5 | funcExprs.kt:13:1:42:1 | call | IntegerLiteral |
|
||||
| funcExprs.kt:23:28:23:40 | ...->... | funcExprs.kt:13:1:42:1 | call | LambdaExpr |
|
||||
| funcExprs.kt:23:28:23:40 | Function2<Integer,Integer,Integer> | funcExprs.kt:13:1:42:1 | call | TypeAccess |
|
||||
| funcExprs.kt:23:38:23:38 | 5 | funcExprs.kt:23:28:23:40 | invoke | IntegerLiteral |
|
||||
| funcExprs.kt:24:5:24:44 | functionExpression3(...) | funcExprs.kt:13:1:29:1 | call | MethodAccess |
|
||||
| funcExprs.kt:24:25:24:25 | 5 | funcExprs.kt:13:1:29:1 | call | IntegerLiteral |
|
||||
| funcExprs.kt:24:28:24:44 | ...->... | funcExprs.kt:13:1:29:1 | call | LambdaExpr |
|
||||
| funcExprs.kt:24:28:24:44 | Function2<Integer,Integer,Integer> | funcExprs.kt:13:1:29:1 | call | TypeAccess |
|
||||
| funcExprs.kt:24:5:24:44 | functionExpression3(...) | funcExprs.kt:13:1:42:1 | call | MethodAccess |
|
||||
| funcExprs.kt:24:25:24:25 | 5 | funcExprs.kt:13:1:42:1 | call | IntegerLiteral |
|
||||
| funcExprs.kt:24:28:24:44 | ...->... | funcExprs.kt:13:1:42:1 | call | LambdaExpr |
|
||||
| funcExprs.kt:24:28:24:44 | Function2<Integer,Integer,Integer> | funcExprs.kt:13:1:42:1 | call | TypeAccess |
|
||||
| funcExprs.kt:24:35:24:38 | this | funcExprs.kt:24:28:24:44 | invoke | ThisAccess |
|
||||
| funcExprs.kt:24:35:24:42 | ... + ... | funcExprs.kt:24:28:24:44 | invoke | AddExpr |
|
||||
| funcExprs.kt:24:42:24:42 | a | funcExprs.kt:24:28:24:44 | invoke | VarAccess |
|
||||
| funcExprs.kt:25:5:25:51 | functionExpression4(...) | funcExprs.kt:13:1:29:1 | call | MethodAccess |
|
||||
| funcExprs.kt:25:25:25:25 | 5 | funcExprs.kt:13:1:29:1 | call | IntegerLiteral |
|
||||
| funcExprs.kt:25:28:25:51 | ...->... | funcExprs.kt:13:1:29:1 | call | LambdaExpr |
|
||||
| funcExprs.kt:25:28:25:51 | Function1<Integer,Function1<Integer,Double>> | funcExprs.kt:13:1:29:1 | call | TypeAccess |
|
||||
| funcExprs.kt:25:5:25:51 | functionExpression4(...) | funcExprs.kt:13:1:42:1 | call | MethodAccess |
|
||||
| funcExprs.kt:25:25:25:25 | 5 | funcExprs.kt:13:1:42:1 | call | IntegerLiteral |
|
||||
| funcExprs.kt:25:28:25:51 | ...->... | funcExprs.kt:13:1:42:1 | call | LambdaExpr |
|
||||
| funcExprs.kt:25:28:25:51 | Function1<Integer,Function1<Integer,Double>> | funcExprs.kt:13:1:42:1 | call | TypeAccess |
|
||||
| funcExprs.kt:25:37:25:47 | ...->... | funcExprs.kt:25:28:25:51 | invoke | LambdaExpr |
|
||||
| funcExprs.kt:25:37:25:47 | Function1<Integer,Double> | funcExprs.kt:25:28:25:51 | invoke | TypeAccess |
|
||||
| funcExprs.kt:25:44:25:46 | 5.0 | funcExprs.kt:25:37:25:47 | invoke | DoubleLiteral |
|
||||
| funcExprs.kt:27:5:27:112 | functionExpression22(...) | funcExprs.kt:13:1:29:1 | call | MethodAccess |
|
||||
| funcExprs.kt:27:26:27:26 | 5 | funcExprs.kt:13:1:29:1 | call | IntegerLiteral |
|
||||
| funcExprs.kt:27:29:27:112 | ...->... | funcExprs.kt:13:1:29:1 | call | LambdaExpr |
|
||||
| funcExprs.kt:27:29:27:112 | Function22<Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Unit> | funcExprs.kt:13:1:29:1 | call | TypeAccess |
|
||||
| funcExprs.kt:27:5:27:112 | functionExpression22(...) | funcExprs.kt:13:1:42:1 | call | MethodAccess |
|
||||
| funcExprs.kt:27:26:27:26 | 5 | funcExprs.kt:13:1:42:1 | call | IntegerLiteral |
|
||||
| funcExprs.kt:27:29:27:112 | ...->... | funcExprs.kt:13:1:42:1 | call | LambdaExpr |
|
||||
| funcExprs.kt:27:29:27:112 | Function22<Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Unit> | funcExprs.kt:13:1:42:1 | call | TypeAccess |
|
||||
| funcExprs.kt:27:111:27:111 | 5 | funcExprs.kt:27:29:27:112 | invoke | IntegerLiteral |
|
||||
| funcExprs.kt:27:111:27:111 | (...)... | funcExprs.kt:27:29:27:112 | invoke | CastExpr |
|
||||
| funcExprs.kt:27:111:27:111 | Unit | funcExprs.kt:27:29:27:112 | invoke | TypeAccess |
|
||||
| funcExprs.kt:28:5:28:117 | functionExpression23(...) | funcExprs.kt:13:1:29:1 | call | MethodAccess |
|
||||
| funcExprs.kt:28:26:28:26 | 5 | funcExprs.kt:13:1:29:1 | call | IntegerLiteral |
|
||||
| funcExprs.kt:28:5:28:117 | functionExpression23(...) | funcExprs.kt:13:1:42:1 | call | MethodAccess |
|
||||
| funcExprs.kt:28:26:28:26 | 5 | funcExprs.kt:13:1:42:1 | call | IntegerLiteral |
|
||||
| funcExprs.kt:28:29:28:117 | 0 | funcExprs.kt:28:29:28:117 | invoke | IntegerLiteral |
|
||||
| funcExprs.kt:28:29:28:117 | 1 | funcExprs.kt:28:29:28:117 | invoke | IntegerLiteral |
|
||||
| funcExprs.kt:28:29:28:117 | 2 | funcExprs.kt:28:29:28:117 | invoke | IntegerLiteral |
|
||||
@@ -727,31 +727,31 @@
|
||||
| funcExprs.kt:28:29:28:117 | (...)... | funcExprs.kt:28:29:28:117 | invoke | CastExpr |
|
||||
| funcExprs.kt:28:29:28:117 | (...)... | funcExprs.kt:28:29:28:117 | invoke | CastExpr |
|
||||
| funcExprs.kt:28:29:28:117 | (...)... | funcExprs.kt:28:29:28:117 | invoke | CastExpr |
|
||||
| funcExprs.kt:28:29:28:117 | ...->... | funcExprs.kt:13:1:29:1 | call | LambdaExpr |
|
||||
| funcExprs.kt:28:29:28:117 | FunctionN<String> | funcExprs.kt:13:1:29:1 | call | TypeAccess |
|
||||
| funcExprs.kt:28:29:28:117 | args | funcExprs.kt:28:29:28:117 | invoke | VarAccess |
|
||||
| funcExprs.kt:28:29:28:117 | args | funcExprs.kt:28:29:28:117 | invoke | VarAccess |
|
||||
| funcExprs.kt:28:29:28:117 | args | funcExprs.kt:28:29:28:117 | invoke | VarAccess |
|
||||
| funcExprs.kt:28:29:28:117 | args | funcExprs.kt:28:29:28:117 | invoke | VarAccess |
|
||||
| funcExprs.kt:28:29:28:117 | args | funcExprs.kt:28:29:28:117 | invoke | VarAccess |
|
||||
| funcExprs.kt:28:29:28:117 | args | funcExprs.kt:28:29:28:117 | invoke | VarAccess |
|
||||
| funcExprs.kt:28:29:28:117 | args | funcExprs.kt:28:29:28:117 | invoke | VarAccess |
|
||||
| funcExprs.kt:28:29:28:117 | args | funcExprs.kt:28:29:28:117 | invoke | VarAccess |
|
||||
| funcExprs.kt:28:29:28:117 | args | funcExprs.kt:28:29:28:117 | invoke | VarAccess |
|
||||
| funcExprs.kt:28:29:28:117 | args | funcExprs.kt:28:29:28:117 | invoke | VarAccess |
|
||||
| funcExprs.kt:28:29:28:117 | args | funcExprs.kt:28:29:28:117 | invoke | VarAccess |
|
||||
| funcExprs.kt:28:29:28:117 | args | funcExprs.kt:28:29:28:117 | invoke | VarAccess |
|
||||
| funcExprs.kt:28:29:28:117 | args | funcExprs.kt:28:29:28:117 | invoke | VarAccess |
|
||||
| funcExprs.kt:28:29:28:117 | args | funcExprs.kt:28:29:28:117 | invoke | VarAccess |
|
||||
| funcExprs.kt:28:29:28:117 | args | funcExprs.kt:28:29:28:117 | invoke | VarAccess |
|
||||
| funcExprs.kt:28:29:28:117 | args | funcExprs.kt:28:29:28:117 | invoke | VarAccess |
|
||||
| funcExprs.kt:28:29:28:117 | args | funcExprs.kt:28:29:28:117 | invoke | VarAccess |
|
||||
| funcExprs.kt:28:29:28:117 | args | funcExprs.kt:28:29:28:117 | invoke | VarAccess |
|
||||
| funcExprs.kt:28:29:28:117 | args | funcExprs.kt:28:29:28:117 | invoke | VarAccess |
|
||||
| funcExprs.kt:28:29:28:117 | args | funcExprs.kt:28:29:28:117 | invoke | VarAccess |
|
||||
| funcExprs.kt:28:29:28:117 | args | funcExprs.kt:28:29:28:117 | invoke | VarAccess |
|
||||
| funcExprs.kt:28:29:28:117 | args | funcExprs.kt:28:29:28:117 | invoke | VarAccess |
|
||||
| funcExprs.kt:28:29:28:117 | args | funcExprs.kt:28:29:28:117 | invoke | VarAccess |
|
||||
| funcExprs.kt:28:29:28:117 | ...->... | funcExprs.kt:13:1:42:1 | call | LambdaExpr |
|
||||
| funcExprs.kt:28:29:28:117 | FunctionN<String> | funcExprs.kt:13:1:42:1 | call | TypeAccess |
|
||||
| funcExprs.kt:28:29:28:117 | a0 | funcExprs.kt:28:29:28:117 | invoke | VarAccess |
|
||||
| funcExprs.kt:28:29:28:117 | a0 | funcExprs.kt:28:29:28:117 | invoke | VarAccess |
|
||||
| funcExprs.kt:28:29:28:117 | a0 | funcExprs.kt:28:29:28:117 | invoke | VarAccess |
|
||||
| funcExprs.kt:28:29:28:117 | a0 | funcExprs.kt:28:29:28:117 | invoke | VarAccess |
|
||||
| funcExprs.kt:28:29:28:117 | a0 | funcExprs.kt:28:29:28:117 | invoke | VarAccess |
|
||||
| funcExprs.kt:28:29:28:117 | a0 | funcExprs.kt:28:29:28:117 | invoke | VarAccess |
|
||||
| funcExprs.kt:28:29:28:117 | a0 | funcExprs.kt:28:29:28:117 | invoke | VarAccess |
|
||||
| funcExprs.kt:28:29:28:117 | a0 | funcExprs.kt:28:29:28:117 | invoke | VarAccess |
|
||||
| funcExprs.kt:28:29:28:117 | a0 | funcExprs.kt:28:29:28:117 | invoke | VarAccess |
|
||||
| funcExprs.kt:28:29:28:117 | a0 | funcExprs.kt:28:29:28:117 | invoke | VarAccess |
|
||||
| funcExprs.kt:28:29:28:117 | a0 | funcExprs.kt:28:29:28:117 | invoke | VarAccess |
|
||||
| funcExprs.kt:28:29:28:117 | a0 | funcExprs.kt:28:29:28:117 | invoke | VarAccess |
|
||||
| funcExprs.kt:28:29:28:117 | a0 | funcExprs.kt:28:29:28:117 | invoke | VarAccess |
|
||||
| funcExprs.kt:28:29:28:117 | a0 | funcExprs.kt:28:29:28:117 | invoke | VarAccess |
|
||||
| funcExprs.kt:28:29:28:117 | a0 | funcExprs.kt:28:29:28:117 | invoke | VarAccess |
|
||||
| funcExprs.kt:28:29:28:117 | a0 | funcExprs.kt:28:29:28:117 | invoke | VarAccess |
|
||||
| funcExprs.kt:28:29:28:117 | a0 | funcExprs.kt:28:29:28:117 | invoke | VarAccess |
|
||||
| funcExprs.kt:28:29:28:117 | a0 | funcExprs.kt:28:29:28:117 | invoke | VarAccess |
|
||||
| funcExprs.kt:28:29:28:117 | a0 | funcExprs.kt:28:29:28:117 | invoke | VarAccess |
|
||||
| funcExprs.kt:28:29:28:117 | a0 | funcExprs.kt:28:29:28:117 | invoke | VarAccess |
|
||||
| funcExprs.kt:28:29:28:117 | a0 | funcExprs.kt:28:29:28:117 | invoke | VarAccess |
|
||||
| funcExprs.kt:28:29:28:117 | a0 | funcExprs.kt:28:29:28:117 | invoke | VarAccess |
|
||||
| funcExprs.kt:28:29:28:117 | a0 | funcExprs.kt:28:29:28:117 | invoke | VarAccess |
|
||||
| funcExprs.kt:28:29:28:117 | get(...) | funcExprs.kt:28:29:28:117 | invoke | MethodAccess |
|
||||
| funcExprs.kt:28:29:28:117 | get(...) | funcExprs.kt:28:29:28:117 | invoke | MethodAccess |
|
||||
| funcExprs.kt:28:29:28:117 | get(...) | funcExprs.kt:28:29:28:117 | invoke | MethodAccess |
|
||||
@@ -801,8 +801,252 @@
|
||||
| funcExprs.kt:28:29:28:117 | invoke(...) | funcExprs.kt:28:29:28:117 | invoke | MethodAccess |
|
||||
| funcExprs.kt:28:29:28:117 | this | funcExprs.kt:28:29:28:117 | invoke | ThisAccess |
|
||||
| funcExprs.kt:28:115:28:116 | | funcExprs.kt:28:29:28:117 | invoke | StringLiteral |
|
||||
| funcExprs.kt:31:1:33:1 | <obinit>(...) | funcExprs.kt:31:1:33:1 | MyLambda | MethodAccess |
|
||||
| funcExprs.kt:32:49:32:49 | 5 | funcExprs.kt:32:23:32:49 | invoke | IntegerLiteral |
|
||||
| funcExprs.kt:30:5:30:39 | functionExpression0a(...) | funcExprs.kt:13:1:42:1 | call | MethodAccess |
|
||||
| funcExprs.kt:30:26:30:34 | FuncRef | funcExprs.kt:13:1:42:1 | call | TypeAccess |
|
||||
| funcExprs.kt:30:26:30:34 | new FuncRef(...) | funcExprs.kt:13:1:42:1 | call | ClassInstanceExpr |
|
||||
| funcExprs.kt:30:26:30:38 | ...::... | funcExprs.kt:13:1:42:1 | call | MemberRefExpr |
|
||||
| funcExprs.kt:30:26:30:38 | ...=... | funcExprs.kt:30:26:30:38 | | AssignExpr |
|
||||
| funcExprs.kt:30:26:30:38 | <dispatchReceiver> | funcExprs.kt:30:26:30:38 | | VarAccess |
|
||||
| funcExprs.kt:30:26:30:38 | FuncRef | file://:0:0:0:0 | <none> | TypeAccess |
|
||||
| funcExprs.kt:30:26:30:38 | Function0<Integer> | funcExprs.kt:13:1:42:1 | call | TypeAccess |
|
||||
| funcExprs.kt:30:26:30:38 | f0(...) | funcExprs.kt:30:26:30:38 | invoke | MethodAccess |
|
||||
| funcExprs.kt:30:26:30:38 | this | funcExprs.kt:30:26:30:38 | | ThisAccess |
|
||||
| funcExprs.kt:30:26:30:38 | this | funcExprs.kt:30:26:30:38 | invoke | ThisAccess |
|
||||
| funcExprs.kt:30:26:30:38 | this.<dispatchReceiver> | funcExprs.kt:30:26:30:38 | | VarAccess |
|
||||
| funcExprs.kt:30:26:30:38 | this.<dispatchReceiver> | funcExprs.kt:30:26:30:38 | invoke | VarAccess |
|
||||
| funcExprs.kt:31:5:31:37 | functionExpression0a(...) | funcExprs.kt:13:1:42:1 | call | MethodAccess |
|
||||
| funcExprs.kt:31:26:31:32 | Companion | funcExprs.kt:13:1:42:1 | call | VarAccess |
|
||||
| funcExprs.kt:31:26:31:36 | ...::... | funcExprs.kt:13:1:42:1 | call | MemberRefExpr |
|
||||
| funcExprs.kt:31:26:31:36 | ...=... | funcExprs.kt:31:26:31:36 | | AssignExpr |
|
||||
| funcExprs.kt:31:26:31:36 | <dispatchReceiver> | funcExprs.kt:31:26:31:36 | | VarAccess |
|
||||
| funcExprs.kt:31:26:31:36 | Companion | file://:0:0:0:0 | <none> | TypeAccess |
|
||||
| funcExprs.kt:31:26:31:36 | Function0<Integer> | funcExprs.kt:13:1:42:1 | call | TypeAccess |
|
||||
| funcExprs.kt:31:26:31:36 | f0(...) | funcExprs.kt:31:26:31:36 | invoke | MethodAccess |
|
||||
| funcExprs.kt:31:26:31:36 | this | funcExprs.kt:31:26:31:36 | | ThisAccess |
|
||||
| funcExprs.kt:31:26:31:36 | this | funcExprs.kt:31:26:31:36 | invoke | ThisAccess |
|
||||
| funcExprs.kt:31:26:31:36 | this.<dispatchReceiver> | funcExprs.kt:31:26:31:36 | | VarAccess |
|
||||
| funcExprs.kt:31:26:31:36 | this.<dispatchReceiver> | funcExprs.kt:31:26:31:36 | invoke | VarAccess |
|
||||
| funcExprs.kt:32:5:32:42 | functionExpression1a(...) | funcExprs.kt:13:1:42:1 | call | MethodAccess |
|
||||
| funcExprs.kt:32:26:32:26 | 5 | funcExprs.kt:13:1:42:1 | call | IntegerLiteral |
|
||||
| funcExprs.kt:32:29:32:37 | FuncRef | funcExprs.kt:13:1:42:1 | call | TypeAccess |
|
||||
| funcExprs.kt:32:29:32:37 | new FuncRef(...) | funcExprs.kt:13:1:42:1 | call | ClassInstanceExpr |
|
||||
| funcExprs.kt:32:29:32:41 | ...::... | funcExprs.kt:13:1:42:1 | call | MemberRefExpr |
|
||||
| funcExprs.kt:32:29:32:41 | ...=... | funcExprs.kt:32:29:32:41 | | AssignExpr |
|
||||
| funcExprs.kt:32:29:32:41 | <dispatchReceiver> | funcExprs.kt:32:29:32:41 | | VarAccess |
|
||||
| funcExprs.kt:32:29:32:41 | FuncRef | file://:0:0:0:0 | <none> | TypeAccess |
|
||||
| funcExprs.kt:32:29:32:41 | Function1<Integer,Integer> | funcExprs.kt:13:1:42:1 | call | TypeAccess |
|
||||
| funcExprs.kt:32:29:32:41 | a0 | funcExprs.kt:32:29:32:41 | invoke | VarAccess |
|
||||
| funcExprs.kt:32:29:32:41 | f1(...) | funcExprs.kt:32:29:32:41 | invoke | MethodAccess |
|
||||
| funcExprs.kt:32:29:32:41 | this | funcExprs.kt:32:29:32:41 | | ThisAccess |
|
||||
| funcExprs.kt:32:29:32:41 | this | funcExprs.kt:32:29:32:41 | invoke | ThisAccess |
|
||||
| funcExprs.kt:32:29:32:41 | this.<dispatchReceiver> | funcExprs.kt:32:29:32:41 | | VarAccess |
|
||||
| funcExprs.kt:32:29:32:41 | this.<dispatchReceiver> | funcExprs.kt:32:29:32:41 | invoke | VarAccess |
|
||||
| funcExprs.kt:33:5:33:34 | functionExpression1a(...) | funcExprs.kt:13:1:42:1 | call | MethodAccess |
|
||||
| funcExprs.kt:33:26:33:26 | 5 | funcExprs.kt:13:1:42:1 | call | IntegerLiteral |
|
||||
| funcExprs.kt:33:29:33:29 | 3 | funcExprs.kt:13:1:42:1 | call | IntegerLiteral |
|
||||
| funcExprs.kt:33:29:33:33 | ...::... | funcExprs.kt:13:1:42:1 | call | MemberRefExpr |
|
||||
| funcExprs.kt:33:29:33:33 | ...=... | funcExprs.kt:33:29:33:33 | | AssignExpr |
|
||||
| funcExprs.kt:33:29:33:33 | <extensionReceiver> | funcExprs.kt:33:29:33:33 | | VarAccess |
|
||||
| funcExprs.kt:33:29:33:33 | Function1<Integer,Integer> | funcExprs.kt:13:1:42:1 | call | TypeAccess |
|
||||
| funcExprs.kt:33:29:33:33 | a0 | funcExprs.kt:33:29:33:33 | invoke | VarAccess |
|
||||
| funcExprs.kt:33:29:33:33 | f3(...) | funcExprs.kt:33:29:33:33 | invoke | MethodAccess |
|
||||
| funcExprs.kt:33:29:33:33 | int | file://:0:0:0:0 | <none> | TypeAccess |
|
||||
| funcExprs.kt:33:29:33:33 | this | funcExprs.kt:33:29:33:33 | | ThisAccess |
|
||||
| funcExprs.kt:33:29:33:33 | this | funcExprs.kt:33:29:33:33 | invoke | ThisAccess |
|
||||
| funcExprs.kt:33:29:33:33 | this.<extensionReceiver> | funcExprs.kt:33:29:33:33 | | VarAccess |
|
||||
| funcExprs.kt:33:29:33:33 | this.<extensionReceiver> | funcExprs.kt:33:29:33:33 | invoke | VarAccess |
|
||||
| funcExprs.kt:34:5:34:35 | functionExpression3(...) | funcExprs.kt:13:1:42:1 | call | MethodAccess |
|
||||
| funcExprs.kt:34:25:34:25 | 5 | funcExprs.kt:13:1:42:1 | call | IntegerLiteral |
|
||||
| funcExprs.kt:34:28:34:34 | ...::... | funcExprs.kt:13:1:42:1 | call | MemberRefExpr |
|
||||
| funcExprs.kt:34:28:34:34 | Function2<Integer,Integer,Integer> | funcExprs.kt:13:1:42:1 | call | TypeAccess |
|
||||
| funcExprs.kt:34:28:34:34 | a0 | funcExprs.kt:34:28:34:34 | invoke | VarAccess |
|
||||
| funcExprs.kt:34:28:34:34 | a1 | funcExprs.kt:34:28:34:34 | invoke | VarAccess |
|
||||
| funcExprs.kt:34:28:34:34 | f3(...) | funcExprs.kt:34:28:34:34 | invoke | MethodAccess |
|
||||
| funcExprs.kt:35:5:35:43 | functionExpression22(...) | funcExprs.kt:13:1:42:1 | call | MethodAccess |
|
||||
| funcExprs.kt:35:26:35:26 | 5 | funcExprs.kt:13:1:42:1 | call | IntegerLiteral |
|
||||
| funcExprs.kt:35:29:35:37 | FuncRef | funcExprs.kt:13:1:42:1 | call | TypeAccess |
|
||||
| funcExprs.kt:35:29:35:37 | new FuncRef(...) | funcExprs.kt:13:1:42:1 | call | ClassInstanceExpr |
|
||||
| funcExprs.kt:35:29:35:42 | ...::... | funcExprs.kt:13:1:42:1 | call | MemberRefExpr |
|
||||
| funcExprs.kt:35:29:35:42 | ...=... | funcExprs.kt:35:29:35:42 | | AssignExpr |
|
||||
| funcExprs.kt:35:29:35:42 | <dispatchReceiver> | funcExprs.kt:35:29:35:42 | | VarAccess |
|
||||
| funcExprs.kt:35:29:35:42 | FuncRef | file://:0:0:0:0 | <none> | TypeAccess |
|
||||
| funcExprs.kt:35:29:35:42 | Function22<Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Integer,Unit> | funcExprs.kt:13:1:42:1 | call | TypeAccess |
|
||||
| funcExprs.kt:35:29:35:42 | a0 | funcExprs.kt:35:29:35:42 | invoke | VarAccess |
|
||||
| funcExprs.kt:35:29:35:42 | a1 | funcExprs.kt:35:29:35:42 | invoke | VarAccess |
|
||||
| funcExprs.kt:35:29:35:42 | a2 | funcExprs.kt:35:29:35:42 | invoke | VarAccess |
|
||||
| funcExprs.kt:35:29:35:42 | a3 | funcExprs.kt:35:29:35:42 | invoke | VarAccess |
|
||||
| funcExprs.kt:35:29:35:42 | a4 | funcExprs.kt:35:29:35:42 | invoke | VarAccess |
|
||||
| funcExprs.kt:35:29:35:42 | a5 | funcExprs.kt:35:29:35:42 | invoke | VarAccess |
|
||||
| funcExprs.kt:35:29:35:42 | a6 | funcExprs.kt:35:29:35:42 | invoke | VarAccess |
|
||||
| funcExprs.kt:35:29:35:42 | a7 | funcExprs.kt:35:29:35:42 | invoke | VarAccess |
|
||||
| funcExprs.kt:35:29:35:42 | a8 | funcExprs.kt:35:29:35:42 | invoke | VarAccess |
|
||||
| funcExprs.kt:35:29:35:42 | a9 | funcExprs.kt:35:29:35:42 | invoke | VarAccess |
|
||||
| funcExprs.kt:35:29:35:42 | a10 | funcExprs.kt:35:29:35:42 | invoke | VarAccess |
|
||||
| funcExprs.kt:35:29:35:42 | a11 | funcExprs.kt:35:29:35:42 | invoke | VarAccess |
|
||||
| funcExprs.kt:35:29:35:42 | a12 | funcExprs.kt:35:29:35:42 | invoke | VarAccess |
|
||||
| funcExprs.kt:35:29:35:42 | a13 | funcExprs.kt:35:29:35:42 | invoke | VarAccess |
|
||||
| funcExprs.kt:35:29:35:42 | a14 | funcExprs.kt:35:29:35:42 | invoke | VarAccess |
|
||||
| funcExprs.kt:35:29:35:42 | a15 | funcExprs.kt:35:29:35:42 | invoke | VarAccess |
|
||||
| funcExprs.kt:35:29:35:42 | a16 | funcExprs.kt:35:29:35:42 | invoke | VarAccess |
|
||||
| funcExprs.kt:35:29:35:42 | a17 | funcExprs.kt:35:29:35:42 | invoke | VarAccess |
|
||||
| funcExprs.kt:35:29:35:42 | a18 | funcExprs.kt:35:29:35:42 | invoke | VarAccess |
|
||||
| funcExprs.kt:35:29:35:42 | a19 | funcExprs.kt:35:29:35:42 | invoke | VarAccess |
|
||||
| funcExprs.kt:35:29:35:42 | a20 | funcExprs.kt:35:29:35:42 | invoke | VarAccess |
|
||||
| funcExprs.kt:35:29:35:42 | a21 | funcExprs.kt:35:29:35:42 | invoke | VarAccess |
|
||||
| funcExprs.kt:35:29:35:42 | f22(...) | funcExprs.kt:35:29:35:42 | invoke | MethodAccess |
|
||||
| funcExprs.kt:35:29:35:42 | this | funcExprs.kt:35:29:35:42 | | ThisAccess |
|
||||
| funcExprs.kt:35:29:35:42 | this | funcExprs.kt:35:29:35:42 | invoke | ThisAccess |
|
||||
| funcExprs.kt:35:29:35:42 | this.<dispatchReceiver> | funcExprs.kt:35:29:35:42 | | VarAccess |
|
||||
| funcExprs.kt:35:29:35:42 | this.<dispatchReceiver> | funcExprs.kt:35:29:35:42 | invoke | VarAccess |
|
||||
| funcExprs.kt:36:5:36:43 | functionExpression23(...) | funcExprs.kt:13:1:42:1 | call | MethodAccess |
|
||||
| funcExprs.kt:36:26:36:26 | 5 | funcExprs.kt:13:1:42:1 | call | IntegerLiteral |
|
||||
| funcExprs.kt:36:29:36:37 | FuncRef | funcExprs.kt:13:1:42:1 | call | TypeAccess |
|
||||
| funcExprs.kt:36:29:36:37 | new FuncRef(...) | funcExprs.kt:13:1:42:1 | call | ClassInstanceExpr |
|
||||
| funcExprs.kt:36:29:36:42 | 0 | funcExprs.kt:36:29:36:42 | invoke | IntegerLiteral |
|
||||
| funcExprs.kt:36:29:36:42 | 1 | funcExprs.kt:36:29:36:42 | invoke | IntegerLiteral |
|
||||
| funcExprs.kt:36:29:36:42 | 2 | funcExprs.kt:36:29:36:42 | invoke | IntegerLiteral |
|
||||
| funcExprs.kt:36:29:36:42 | 3 | funcExprs.kt:36:29:36:42 | invoke | IntegerLiteral |
|
||||
| funcExprs.kt:36:29:36:42 | 4 | funcExprs.kt:36:29:36:42 | invoke | IntegerLiteral |
|
||||
| funcExprs.kt:36:29:36:42 | 5 | funcExprs.kt:36:29:36:42 | invoke | IntegerLiteral |
|
||||
| funcExprs.kt:36:29:36:42 | 6 | funcExprs.kt:36:29:36:42 | invoke | IntegerLiteral |
|
||||
| funcExprs.kt:36:29:36:42 | 7 | funcExprs.kt:36:29:36:42 | invoke | IntegerLiteral |
|
||||
| funcExprs.kt:36:29:36:42 | 8 | funcExprs.kt:36:29:36:42 | invoke | IntegerLiteral |
|
||||
| funcExprs.kt:36:29:36:42 | 9 | funcExprs.kt:36:29:36:42 | invoke | IntegerLiteral |
|
||||
| funcExprs.kt:36:29:36:42 | 10 | funcExprs.kt:36:29:36:42 | invoke | IntegerLiteral |
|
||||
| funcExprs.kt:36:29:36:42 | 11 | funcExprs.kt:36:29:36:42 | invoke | IntegerLiteral |
|
||||
| funcExprs.kt:36:29:36:42 | 12 | funcExprs.kt:36:29:36:42 | invoke | IntegerLiteral |
|
||||
| funcExprs.kt:36:29:36:42 | 13 | funcExprs.kt:36:29:36:42 | invoke | IntegerLiteral |
|
||||
| funcExprs.kt:36:29:36:42 | 14 | funcExprs.kt:36:29:36:42 | invoke | IntegerLiteral |
|
||||
| funcExprs.kt:36:29:36:42 | 15 | funcExprs.kt:36:29:36:42 | invoke | IntegerLiteral |
|
||||
| funcExprs.kt:36:29:36:42 | 16 | funcExprs.kt:36:29:36:42 | invoke | IntegerLiteral |
|
||||
| funcExprs.kt:36:29:36:42 | 17 | funcExprs.kt:36:29:36:42 | invoke | IntegerLiteral |
|
||||
| funcExprs.kt:36:29:36:42 | 18 | funcExprs.kt:36:29:36:42 | invoke | IntegerLiteral |
|
||||
| funcExprs.kt:36:29:36:42 | 19 | funcExprs.kt:36:29:36:42 | invoke | IntegerLiteral |
|
||||
| funcExprs.kt:36:29:36:42 | 20 | funcExprs.kt:36:29:36:42 | invoke | IntegerLiteral |
|
||||
| funcExprs.kt:36:29:36:42 | 21 | funcExprs.kt:36:29:36:42 | invoke | IntegerLiteral |
|
||||
| funcExprs.kt:36:29:36:42 | 22 | funcExprs.kt:36:29:36:42 | invoke | IntegerLiteral |
|
||||
| funcExprs.kt:36:29:36:42 | (...)... | funcExprs.kt:36:29:36:42 | invoke | CastExpr |
|
||||
| funcExprs.kt:36:29:36:42 | (...)... | funcExprs.kt:36:29:36:42 | invoke | CastExpr |
|
||||
| funcExprs.kt:36:29:36:42 | (...)... | funcExprs.kt:36:29:36:42 | invoke | CastExpr |
|
||||
| funcExprs.kt:36:29:36:42 | (...)... | funcExprs.kt:36:29:36:42 | invoke | CastExpr |
|
||||
| funcExprs.kt:36:29:36:42 | (...)... | funcExprs.kt:36:29:36:42 | invoke | CastExpr |
|
||||
| funcExprs.kt:36:29:36:42 | (...)... | funcExprs.kt:36:29:36:42 | invoke | CastExpr |
|
||||
| funcExprs.kt:36:29:36:42 | (...)... | funcExprs.kt:36:29:36:42 | invoke | CastExpr |
|
||||
| funcExprs.kt:36:29:36:42 | (...)... | funcExprs.kt:36:29:36:42 | invoke | CastExpr |
|
||||
| funcExprs.kt:36:29:36:42 | (...)... | funcExprs.kt:36:29:36:42 | invoke | CastExpr |
|
||||
| funcExprs.kt:36:29:36:42 | (...)... | funcExprs.kt:36:29:36:42 | invoke | CastExpr |
|
||||
| funcExprs.kt:36:29:36:42 | (...)... | funcExprs.kt:36:29:36:42 | invoke | CastExpr |
|
||||
| funcExprs.kt:36:29:36:42 | (...)... | funcExprs.kt:36:29:36:42 | invoke | CastExpr |
|
||||
| funcExprs.kt:36:29:36:42 | (...)... | funcExprs.kt:36:29:36:42 | invoke | CastExpr |
|
||||
| funcExprs.kt:36:29:36:42 | (...)... | funcExprs.kt:36:29:36:42 | invoke | CastExpr |
|
||||
| funcExprs.kt:36:29:36:42 | (...)... | funcExprs.kt:36:29:36:42 | invoke | CastExpr |
|
||||
| funcExprs.kt:36:29:36:42 | (...)... | funcExprs.kt:36:29:36:42 | invoke | CastExpr |
|
||||
| funcExprs.kt:36:29:36:42 | (...)... | funcExprs.kt:36:29:36:42 | invoke | CastExpr |
|
||||
| funcExprs.kt:36:29:36:42 | (...)... | funcExprs.kt:36:29:36:42 | invoke | CastExpr |
|
||||
| funcExprs.kt:36:29:36:42 | (...)... | funcExprs.kt:36:29:36:42 | invoke | CastExpr |
|
||||
| funcExprs.kt:36:29:36:42 | (...)... | funcExprs.kt:36:29:36:42 | invoke | CastExpr |
|
||||
| funcExprs.kt:36:29:36:42 | (...)... | funcExprs.kt:36:29:36:42 | invoke | CastExpr |
|
||||
| funcExprs.kt:36:29:36:42 | (...)... | funcExprs.kt:36:29:36:42 | invoke | CastExpr |
|
||||
| funcExprs.kt:36:29:36:42 | (...)... | funcExprs.kt:36:29:36:42 | invoke | CastExpr |
|
||||
| funcExprs.kt:36:29:36:42 | ...::... | funcExprs.kt:13:1:42:1 | call | MemberRefExpr |
|
||||
| funcExprs.kt:36:29:36:42 | ...=... | funcExprs.kt:36:29:36:42 | | AssignExpr |
|
||||
| funcExprs.kt:36:29:36:42 | <dispatchReceiver> | funcExprs.kt:36:29:36:42 | | VarAccess |
|
||||
| funcExprs.kt:36:29:36:42 | FuncRef | file://:0:0:0:0 | <none> | TypeAccess |
|
||||
| funcExprs.kt:36:29:36:42 | FunctionN<String> | funcExprs.kt:13:1:42:1 | call | TypeAccess |
|
||||
| funcExprs.kt:36:29:36:42 | a0 | funcExprs.kt:36:29:36:42 | invoke | VarAccess |
|
||||
| funcExprs.kt:36:29:36:42 | a0 | funcExprs.kt:36:29:36:42 | invoke | VarAccess |
|
||||
| funcExprs.kt:36:29:36:42 | a0 | funcExprs.kt:36:29:36:42 | invoke | VarAccess |
|
||||
| funcExprs.kt:36:29:36:42 | a0 | funcExprs.kt:36:29:36:42 | invoke | VarAccess |
|
||||
| funcExprs.kt:36:29:36:42 | a0 | funcExprs.kt:36:29:36:42 | invoke | VarAccess |
|
||||
| funcExprs.kt:36:29:36:42 | a0 | funcExprs.kt:36:29:36:42 | invoke | VarAccess |
|
||||
| funcExprs.kt:36:29:36:42 | a0 | funcExprs.kt:36:29:36:42 | invoke | VarAccess |
|
||||
| funcExprs.kt:36:29:36:42 | a0 | funcExprs.kt:36:29:36:42 | invoke | VarAccess |
|
||||
| funcExprs.kt:36:29:36:42 | a0 | funcExprs.kt:36:29:36:42 | invoke | VarAccess |
|
||||
| funcExprs.kt:36:29:36:42 | a0 | funcExprs.kt:36:29:36:42 | invoke | VarAccess |
|
||||
| funcExprs.kt:36:29:36:42 | a0 | funcExprs.kt:36:29:36:42 | invoke | VarAccess |
|
||||
| funcExprs.kt:36:29:36:42 | a0 | funcExprs.kt:36:29:36:42 | invoke | VarAccess |
|
||||
| funcExprs.kt:36:29:36:42 | a0 | funcExprs.kt:36:29:36:42 | invoke | VarAccess |
|
||||
| funcExprs.kt:36:29:36:42 | a0 | funcExprs.kt:36:29:36:42 | invoke | VarAccess |
|
||||
| funcExprs.kt:36:29:36:42 | a0 | funcExprs.kt:36:29:36:42 | invoke | VarAccess |
|
||||
| funcExprs.kt:36:29:36:42 | a0 | funcExprs.kt:36:29:36:42 | invoke | VarAccess |
|
||||
| funcExprs.kt:36:29:36:42 | a0 | funcExprs.kt:36:29:36:42 | invoke | VarAccess |
|
||||
| funcExprs.kt:36:29:36:42 | a0 | funcExprs.kt:36:29:36:42 | invoke | VarAccess |
|
||||
| funcExprs.kt:36:29:36:42 | a0 | funcExprs.kt:36:29:36:42 | invoke | VarAccess |
|
||||
| funcExprs.kt:36:29:36:42 | a0 | funcExprs.kt:36:29:36:42 | invoke | VarAccess |
|
||||
| funcExprs.kt:36:29:36:42 | a0 | funcExprs.kt:36:29:36:42 | invoke | VarAccess |
|
||||
| funcExprs.kt:36:29:36:42 | a0 | funcExprs.kt:36:29:36:42 | invoke | VarAccess |
|
||||
| funcExprs.kt:36:29:36:42 | a0 | funcExprs.kt:36:29:36:42 | invoke | VarAccess |
|
||||
| funcExprs.kt:36:29:36:42 | f23(...) | funcExprs.kt:36:29:36:42 | invoke | MethodAccess |
|
||||
| funcExprs.kt:36:29:36:42 | get(...) | funcExprs.kt:36:29:36:42 | invoke | MethodAccess |
|
||||
| funcExprs.kt:36:29:36:42 | get(...) | funcExprs.kt:36:29:36:42 | invoke | MethodAccess |
|
||||
| funcExprs.kt:36:29:36:42 | get(...) | funcExprs.kt:36:29:36:42 | invoke | MethodAccess |
|
||||
| funcExprs.kt:36:29:36:42 | get(...) | funcExprs.kt:36:29:36:42 | invoke | MethodAccess |
|
||||
| funcExprs.kt:36:29:36:42 | get(...) | funcExprs.kt:36:29:36:42 | invoke | MethodAccess |
|
||||
| funcExprs.kt:36:29:36:42 | get(...) | funcExprs.kt:36:29:36:42 | invoke | MethodAccess |
|
||||
| funcExprs.kt:36:29:36:42 | get(...) | funcExprs.kt:36:29:36:42 | invoke | MethodAccess |
|
||||
| funcExprs.kt:36:29:36:42 | get(...) | funcExprs.kt:36:29:36:42 | invoke | MethodAccess |
|
||||
| funcExprs.kt:36:29:36:42 | get(...) | funcExprs.kt:36:29:36:42 | invoke | MethodAccess |
|
||||
| funcExprs.kt:36:29:36:42 | get(...) | funcExprs.kt:36:29:36:42 | invoke | MethodAccess |
|
||||
| funcExprs.kt:36:29:36:42 | get(...) | funcExprs.kt:36:29:36:42 | invoke | MethodAccess |
|
||||
| funcExprs.kt:36:29:36:42 | get(...) | funcExprs.kt:36:29:36:42 | invoke | MethodAccess |
|
||||
| funcExprs.kt:36:29:36:42 | get(...) | funcExprs.kt:36:29:36:42 | invoke | MethodAccess |
|
||||
| funcExprs.kt:36:29:36:42 | get(...) | funcExprs.kt:36:29:36:42 | invoke | MethodAccess |
|
||||
| funcExprs.kt:36:29:36:42 | get(...) | funcExprs.kt:36:29:36:42 | invoke | MethodAccess |
|
||||
| funcExprs.kt:36:29:36:42 | get(...) | funcExprs.kt:36:29:36:42 | invoke | MethodAccess |
|
||||
| funcExprs.kt:36:29:36:42 | get(...) | funcExprs.kt:36:29:36:42 | invoke | MethodAccess |
|
||||
| funcExprs.kt:36:29:36:42 | get(...) | funcExprs.kt:36:29:36:42 | invoke | MethodAccess |
|
||||
| funcExprs.kt:36:29:36:42 | get(...) | funcExprs.kt:36:29:36:42 | invoke | MethodAccess |
|
||||
| funcExprs.kt:36:29:36:42 | get(...) | funcExprs.kt:36:29:36:42 | invoke | MethodAccess |
|
||||
| funcExprs.kt:36:29:36:42 | get(...) | funcExprs.kt:36:29:36:42 | invoke | MethodAccess |
|
||||
| funcExprs.kt:36:29:36:42 | get(...) | funcExprs.kt:36:29:36:42 | invoke | MethodAccess |
|
||||
| funcExprs.kt:36:29:36:42 | get(...) | funcExprs.kt:36:29:36:42 | invoke | MethodAccess |
|
||||
| funcExprs.kt:36:29:36:42 | int | funcExprs.kt:36:29:36:42 | invoke | TypeAccess |
|
||||
| funcExprs.kt:36:29:36:42 | int | funcExprs.kt:36:29:36:42 | invoke | TypeAccess |
|
||||
| funcExprs.kt:36:29:36:42 | int | funcExprs.kt:36:29:36:42 | invoke | TypeAccess |
|
||||
| funcExprs.kt:36:29:36:42 | int | funcExprs.kt:36:29:36:42 | invoke | TypeAccess |
|
||||
| funcExprs.kt:36:29:36:42 | int | funcExprs.kt:36:29:36:42 | invoke | TypeAccess |
|
||||
| funcExprs.kt:36:29:36:42 | int | funcExprs.kt:36:29:36:42 | invoke | TypeAccess |
|
||||
| funcExprs.kt:36:29:36:42 | int | funcExprs.kt:36:29:36:42 | invoke | TypeAccess |
|
||||
| funcExprs.kt:36:29:36:42 | int | funcExprs.kt:36:29:36:42 | invoke | TypeAccess |
|
||||
| funcExprs.kt:36:29:36:42 | int | funcExprs.kt:36:29:36:42 | invoke | TypeAccess |
|
||||
| funcExprs.kt:36:29:36:42 | int | funcExprs.kt:36:29:36:42 | invoke | TypeAccess |
|
||||
| funcExprs.kt:36:29:36:42 | int | funcExprs.kt:36:29:36:42 | invoke | TypeAccess |
|
||||
| funcExprs.kt:36:29:36:42 | int | funcExprs.kt:36:29:36:42 | invoke | TypeAccess |
|
||||
| funcExprs.kt:36:29:36:42 | int | funcExprs.kt:36:29:36:42 | invoke | TypeAccess |
|
||||
| funcExprs.kt:36:29:36:42 | int | funcExprs.kt:36:29:36:42 | invoke | TypeAccess |
|
||||
| funcExprs.kt:36:29:36:42 | int | funcExprs.kt:36:29:36:42 | invoke | TypeAccess |
|
||||
| funcExprs.kt:36:29:36:42 | int | funcExprs.kt:36:29:36:42 | invoke | TypeAccess |
|
||||
| funcExprs.kt:36:29:36:42 | int | funcExprs.kt:36:29:36:42 | invoke | TypeAccess |
|
||||
| funcExprs.kt:36:29:36:42 | int | funcExprs.kt:36:29:36:42 | invoke | TypeAccess |
|
||||
| funcExprs.kt:36:29:36:42 | int | funcExprs.kt:36:29:36:42 | invoke | TypeAccess |
|
||||
| funcExprs.kt:36:29:36:42 | int | funcExprs.kt:36:29:36:42 | invoke | TypeAccess |
|
||||
| funcExprs.kt:36:29:36:42 | int | funcExprs.kt:36:29:36:42 | invoke | TypeAccess |
|
||||
| funcExprs.kt:36:29:36:42 | int | funcExprs.kt:36:29:36:42 | invoke | TypeAccess |
|
||||
| funcExprs.kt:36:29:36:42 | int | funcExprs.kt:36:29:36:42 | invoke | TypeAccess |
|
||||
| funcExprs.kt:36:29:36:42 | this | funcExprs.kt:36:29:36:42 | | ThisAccess |
|
||||
| funcExprs.kt:36:29:36:42 | this | funcExprs.kt:36:29:36:42 | invoke | ThisAccess |
|
||||
| funcExprs.kt:36:29:36:42 | this.<dispatchReceiver> | funcExprs.kt:36:29:36:42 | | VarAccess |
|
||||
| funcExprs.kt:36:29:36:42 | this.<dispatchReceiver> | funcExprs.kt:36:29:36:42 | invoke | VarAccess |
|
||||
| funcExprs.kt:38:24:38:24 | 5 | funcExprs.kt:38:5:38:24 | local | IntegerLiteral |
|
||||
| funcExprs.kt:39:5:39:33 | functionExpression0a(...) | funcExprs.kt:13:1:42:1 | call | MethodAccess |
|
||||
| funcExprs.kt:39:26:39:32 | ...::... | funcExprs.kt:13:1:42:1 | call | MemberRefExpr |
|
||||
| funcExprs.kt:39:26:39:32 | Function0<Integer> | funcExprs.kt:13:1:42:1 | call | TypeAccess |
|
||||
| funcExprs.kt:39:26:39:32 | local(...) | funcExprs.kt:39:26:39:32 | invoke | MethodAccess |
|
||||
| funcExprs.kt:41:5:41:17 | FuncRef | funcExprs.kt:13:1:42:1 | call | TypeAccess |
|
||||
| funcExprs.kt:41:5:41:17 | fn(...) | funcExprs.kt:13:1:42:1 | call | MethodAccess |
|
||||
| funcExprs.kt:41:8:41:16 | ...::... | funcExprs.kt:13:1:42:1 | call | MemberRefExpr |
|
||||
| funcExprs.kt:41:8:41:16 | FuncRef | funcExprs.kt:41:8:41:16 | invoke | TypeAccess |
|
||||
| funcExprs.kt:41:8:41:16 | Function0<FuncRef> | funcExprs.kt:13:1:42:1 | call | TypeAccess |
|
||||
| funcExprs.kt:41:8:41:16 | new FuncRef(...) | funcExprs.kt:41:8:41:16 | invoke | ClassInstanceExpr |
|
||||
| funcExprs.kt:44:1:46:1 | <obinit>(...) | funcExprs.kt:44:1:46:1 | MyLambda | MethodAccess |
|
||||
| funcExprs.kt:45:49:45:49 | 5 | funcExprs.kt:45:23:45:49 | invoke | IntegerLiteral |
|
||||
| funcExprs.kt:49:22:49:22 | 5 | funcExprs.kt:49:1:49:22 | f3 | IntegerLiteral |
|
||||
| funcExprs.kt:51:1:61:1 | <obinit>(...) | funcExprs.kt:51:1:61:1 | FuncRef | MethodAccess |
|
||||
| funcExprs.kt:52:5:54:5 | <obinit>(...) | funcExprs.kt:52:5:54:5 | Companion | MethodAccess |
|
||||
| funcExprs.kt:53:25:53:25 | 5 | funcExprs.kt:53:9:53:25 | f0 | IntegerLiteral |
|
||||
| funcExprs.kt:55:21:55:21 | 5 | funcExprs.kt:55:5:55:21 | f0 | IntegerLiteral |
|
||||
| funcExprs.kt:56:27:56:27 | 5 | funcExprs.kt:56:5:56:27 | f1 | IntegerLiteral |
|
||||
| funcExprs.kt:60:134:60:135 | | funcExprs.kt:59:5:60:135 | f23 | StringLiteral |
|
||||
| localFunctionCalls.kt:4:5:4:13 | x | localFunctionCalls.kt:3:1:11:1 | x | LocalVariableDeclExpr |
|
||||
| localFunctionCalls.kt:4:13:4:13 | 5 | localFunctionCalls.kt:3:1:11:1 | x | IntegerLiteral |
|
||||
| localFunctionCalls.kt:5:25:5:25 | i | localFunctionCalls.kt:5:5:5:29 | a | VarAccess |
|
||||
|
||||
@@ -26,8 +26,36 @@ fun call() {
|
||||
|
||||
functionExpression22(5) {a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20,a21 -> 5}
|
||||
functionExpression23(5) {a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20,a21,a22 -> ""}
|
||||
|
||||
functionExpression0a(FuncRef()::f0)
|
||||
functionExpression0a(FuncRef::f0)
|
||||
functionExpression1a(5, FuncRef()::f1)
|
||||
functionExpression1a(5, 3::f3)
|
||||
functionExpression3(5, Int::f3)
|
||||
functionExpression22(5, FuncRef()::f22)
|
||||
functionExpression23(5, FuncRef()::f23)
|
||||
|
||||
fun local(): Int = 5
|
||||
functionExpression0a(::local)
|
||||
|
||||
fn(::FuncRef)
|
||||
}
|
||||
|
||||
class MyLambda: (Int) -> Int {
|
||||
override operator fun invoke(x: Int): Int = 5
|
||||
}
|
||||
}
|
||||
|
||||
fun <T> fn(l: () -> T) {}
|
||||
fun Int.f3(a: Int) = 5
|
||||
|
||||
class FuncRef {
|
||||
companion object {
|
||||
fun f0(): Int = 5
|
||||
}
|
||||
fun f0(): Int = 5
|
||||
fun f1(a: Int): Int = 5
|
||||
fun f22(a0: Int, a1: Int, a2: Int, a3: Int, a4: Int, a5: Int, a6: Int, a7: Int, a8: Int, a9: Int, a10: Int,
|
||||
a11: Int, a12: Int, a13: Int, a14: Int, a15: Int, a16:Int, a17: Int, a18: Int, a19: Int, a20: Int, a21: Int) {}
|
||||
fun f23(a0: Int, a1: Int, a2: Int, a3: Int, a4: Int, a5: Int, a6: Int, a7: Int, a8: Int, a9: Int, a10: Int,
|
||||
a11: Int, a12: Int, a13: Int, a14: Int, a15: Int, a16:Int, a17: Int, a18: Int, a19: Int, a20: Int, a21: Int, a22: Int) = ""
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user