reassign_propertyreadtype is the type of the reading of the left value.
writetype is the type of the writing of the left value.
(Because of ACallReassignExpr, both can be different.
Return the static type of the value to store.
# Determine the `reassign_property`
# `readtype` is the type of the reading of the left value.
# `writetype` is the type of the writing of the left value.
# (Because of `ACallReassignExpr`, both can be different.
# Return the static type of the value to store.
private fun resolve_reassignment(v: TypeVisitor, readtype, writetype: MType): nullable MType
do
var reassign_name = self.n_assign_op.operator
self.read_type = readtype
var callsite = v.build_callsite_by_name(self.n_assign_op, readtype, reassign_name, false)
if callsite == null then return null # Skip error
self.reassign_callsite = callsite
var msignature = callsite.msignature
var rettype = msignature.return_mtype
assert msignature.arity == 1 and rettype != null
var value_type = v.visit_expr_subtype(self.n_value, msignature.mparameters.first.mtype)
if value_type == null then return null # Skip error
v.check_subtype(self, rettype, writetype, false)
return rettype
end
src/semantize/typing.nit:1155,2--1179,4