JS backend: Fix super property access call

This commit is contained in:
Erokhin Stanislav
2013-12-20 23:04:04 +04:00
parent 392da838ca
commit 4527c56f6d
@@ -115,11 +115,22 @@ class DelegatePropertyAccessIntrinsic(callInfo: VariableAccessInfo) : VariableAc
}
}
class SuperPropertyAccessCase(callInfo: VariableAccessInfo) : VariableAccessCase(callInfo) {
override fun VariableAccessInfo.thisObject(): JsExpression {
val variableName = context.program().getStringLiteral(this.variableName.getIdent())
return if (isGetAccess())
JsInvocation(context.namer().getCallGetProperty(), JsLiteral.THIS, thisObject!!, variableName)
else
JsInvocation(context.namer().getCallSetProperty(), JsLiteral.THIS, thisObject!!, variableName, getSetToExpression())
}
}
fun createVariableAccessCases(): CallCaseDispatcher<VariableAccessCase, VariableAccessInfo> {
val caseDispatcher = CallCaseDispatcher<VariableAccessCase, VariableAccessInfo>()
caseDispatcher.addCase { DelegatePropertyAccessIntrinsic(it).intrinsic() }
caseDispatcher.addCase(::ValueParameterAccessCase) { it.variableDescriptor is ValueParameterDescriptor}
caseDispatcher.addCase(::SuperPropertyAccessCase) { it.isSuperInvocation() }
//caseDispatcher.addCase(::ValueParameterAccessCase) { it.variableDescriptor is ValueParameterDescriptor}
caseDispatcher.addCase(::NativeVariableAccessCase) { it.isNative() }
caseDispatcher.addCase(::DefaultVariableAccessCase) { true } // TODO: fix this
return caseDispatcher