JS backend: simplify DelegatePropertyAccessIntrinsic

This commit is contained in:
Erokhin Stanislav
2014-01-30 18:36:15 +04:00
parent 5a343841d9
commit 97955776c4
@@ -75,7 +75,10 @@ class DefaultVariableAccessCase(callInfo: VariableAccessInfo) : VariableAccessCa
class DelegatePropertyAccessIntrinsic(callInfo: VariableAccessInfo) : VariableAccessCase(callInfo), DelegateIntrinsic<VariableAccessInfo> { class DelegatePropertyAccessIntrinsic(callInfo: VariableAccessInfo) : VariableAccessCase(callInfo), DelegateIntrinsic<VariableAccessInfo> {
override fun VariableAccessInfo.canBeApply(): Boolean { override fun VariableAccessInfo.canBeApply(): Boolean {
return variableDescriptor is PropertyDescriptor if(variableDescriptor is PropertyDescriptor) {
return isGetAccess() || (variableDescriptor as PropertyDescriptor).isVar()
}
return false
} }
override fun VariableAccessInfo.getArgs(): List<JsExpression> { override fun VariableAccessInfo.getArgs(): List<JsExpression> {
@@ -88,22 +91,9 @@ class DelegatePropertyAccessIntrinsic(callInfo: VariableAccessInfo) : VariableAc
override fun VariableAccessInfo.getDescriptor(): CallableDescriptor { override fun VariableAccessInfo.getDescriptor(): CallableDescriptor {
val propertyDescriptor = variableDescriptor as PropertyDescriptor val propertyDescriptor = variableDescriptor as PropertyDescriptor
return if (isGetAccess()) { return if (isGetAccess()) {
var getter = propertyDescriptor.getGetter() propertyDescriptor.getGetter()!!
if (getter == null) {
val getterImpl = DescriptorFactory.createDefaultGetter(propertyDescriptor)
getterImpl.initialize(propertyDescriptor.getType())
((propertyDescriptor as PropertyDescriptorImpl)).initialize(getterImpl, propertyDescriptor.getSetter())
getter = getterImpl
}
getter!!
} else { } else {
var setter = propertyDescriptor.getSetter() propertyDescriptor.getSetter()!!
if (setter == null) {
val setterImpl = DescriptorFactory.createDefaultSetter(propertyDescriptor)
((propertyDescriptor as PropertyDescriptorImpl)).initialize(propertyDescriptor.getGetter(), setterImpl)
setter = setterImpl
}
setter!!
} }
} }
} }
@@ -126,4 +116,4 @@ fun createVariableAccessCases(): CallCaseDispatcher<VariableAccessCase, Variable
caseDispatcher.addCase(::NativeVariableAccessCase) { it.isNative() } caseDispatcher.addCase(::NativeVariableAccessCase) { it.isNative() }
caseDispatcher.addCase(::DefaultVariableAccessCase) { true } // TODO: fix this caseDispatcher.addCase(::DefaultVariableAccessCase) { true } // TODO: fix this
return caseDispatcher return caseDispatcher
} }