[FIR JS] Generate dynamic FIRs via DynamicScope
This commit is contained in:
committed by
teamcity
parent
5e97a36680
commit
eaa77b5af6
@@ -522,6 +522,7 @@ fun FirFunction.getAsForbiddenNamedArgumentsTarget(session: FirSession): Forbidd
|
||||
}
|
||||
}
|
||||
FirDeclarationOrigin.Synthetic -> null
|
||||
FirDeclarationOrigin.DynamicScope -> null
|
||||
FirDeclarationOrigin.RenamedForOverride -> null
|
||||
FirDeclarationOrigin.WrappedIntegerOperator -> null
|
||||
is FirDeclarationOrigin.Plugin -> null // TODO: figure out what to do with plugin generated functions
|
||||
|
||||
@@ -20,6 +20,7 @@ sealed class CallKind(vararg resolutionSequence: ResolutionStage) {
|
||||
CheckDslScopeViolation,
|
||||
CheckLowPriorityInOverloadResolution,
|
||||
PostponedVariablesInitializerResolutionStage,
|
||||
LowerPriorityIfDynamic,
|
||||
ConstraintSystemForks,
|
||||
CheckIncompatibleTypeVariableUpperBounds,
|
||||
)
|
||||
@@ -53,6 +54,7 @@ sealed class CallKind(vararg resolutionSequence: ResolutionStage) {
|
||||
EagerResolveOfCallableReferences,
|
||||
CheckLowPriorityInOverloadResolution,
|
||||
PostponedVariablesInitializerResolutionStage,
|
||||
LowerPriorityIfDynamic,
|
||||
ConstraintSystemForks,
|
||||
CheckIncompatibleTypeVariableUpperBounds,
|
||||
)
|
||||
|
||||
+6
-1
@@ -6,6 +6,7 @@
|
||||
package org.jetbrains.kotlin.fir.resolve.calls
|
||||
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
|
||||
import org.jetbrains.kotlin.fir.declarations.FirFunction
|
||||
import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
|
||||
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
||||
@@ -79,7 +80,11 @@ fun BodyResolveComponents.mapArguments(
|
||||
|
||||
// If this is an indexed access set operator, it could have default values or a vararg parameter in the middle.
|
||||
// For proper argument mapping, wrap the last one, which is supposed to be the updated value, as a named argument.
|
||||
val isIndexedSetOperator = function is FirSimpleFunction && function.isOperator && function.name == OperatorNameConventions.SET
|
||||
val isIndexedSetOperator = function is FirSimpleFunction
|
||||
&& function.isOperator
|
||||
&& function.name == OperatorNameConventions.SET
|
||||
&& function.origin !is FirDeclarationOrigin.DynamicScope
|
||||
|
||||
if (isIndexedSetOperator &&
|
||||
function.valueParameters.any { it.defaultValue != null || it.isVararg }
|
||||
) {
|
||||
|
||||
@@ -644,6 +644,14 @@ internal object CheckDeprecatedSinceKotlin : ResolutionStage() {
|
||||
}
|
||||
}
|
||||
|
||||
internal object LowerPriorityIfDynamic : ResolutionStage() {
|
||||
override suspend fun check(candidate: Candidate, callInfo: CallInfo, sink: CheckerSink, context: ResolutionContext) {
|
||||
if (candidate.symbol.origin is FirDeclarationOrigin.DynamicScope) {
|
||||
candidate.addDiagnostic(LowerPriorityForDynamic)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal object ConstraintSystemForks : ResolutionStage() {
|
||||
override suspend fun check(candidate: Candidate, callInfo: CallInfo, sink: CheckerSink, context: ResolutionContext) {
|
||||
if (candidate.system.hasContradiction) return
|
||||
|
||||
+7
-1
@@ -5,6 +5,8 @@
|
||||
|
||||
package org.jetbrains.kotlin.fir.resolve.calls
|
||||
|
||||
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
|
||||
import org.jetbrains.kotlin.fir.declarations.FirTypeParameterRefsOwner
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeProjection
|
||||
import org.jetbrains.kotlin.fir.types.builder.buildPlaceholderProjection
|
||||
@@ -33,7 +35,11 @@ internal object MapTypeArguments : ResolutionStage() {
|
||||
|
||||
val owner = candidate.symbol.fir as FirTypeParameterRefsOwner
|
||||
|
||||
if (typeArguments.size == owner.typeParameters.size || callInfo.callKind == CallKind.DelegatingConstructorCall) {
|
||||
if (
|
||||
typeArguments.size == owner.typeParameters.size ||
|
||||
callInfo.callKind == CallKind.DelegatingConstructorCall ||
|
||||
(owner as? FirDeclaration)?.origin is FirDeclarationOrigin.DynamicScope
|
||||
) {
|
||||
candidate.typeArgumentMapping = TypeArgumentMapping.Mapped(typeArguments)
|
||||
} else {
|
||||
candidate.typeArgumentMapping = TypeArgumentMapping.Mapped(emptyList())
|
||||
|
||||
Reference in New Issue
Block a user