Signed-off-by: Jean Privat <jean@pryen.org>
var res
if is_lazy then
var set
var res
if is_lazy then
var set
- var ret = self.mpropdef.static_mtype
var useiset = not ret.is_c_primitive and not ret isa MNullableType
var guard = self.mlazypropdef.mproperty
if useiset then
var useiset = not ret.is_c_primitive and not ret isa MNullableType
var guard = self.mlazypropdef.mproperty
if useiset then
assert arguments.length == 2
v.write_attribute(self.mpropdef.mproperty, arguments.first, arguments[1])
if is_lazy then
assert arguments.length == 2
v.write_attribute(self.mpropdef.mproperty, arguments.first, arguments[1])
if is_lazy then
- var ret = self.mpropdef.static_mtype
var useiset = not ret.is_c_primitive and not ret isa MNullableType
if not useiset then
v.write_attribute(self.mlazypropdef.mproperty, arguments.first, v.bool_instance(true))
var useiset = not ret.is_c_primitive and not ret isa MNullableType
if not useiset then
v.write_attribute(self.mlazypropdef.mproperty, arguments.first, v.bool_instance(true))
v.frame = frame
var value
v.frame = frame
var value
- var mtype = self.mpropdef.static_mtype
assert mtype != null
var nexpr = self.n_expr
assert mtype != null
var nexpr = self.n_expr
end
var mpropdef = self.mpropdef
if mpropdef == null then return
end
var mpropdef = self.mpropdef
if mpropdef == null then return
- var mtype = mpropdef.static_mtype.as(not null)
+ var mtype = self.mtype.as(not null)
mtype = mtype.anchor_to(v.mainmodule, recv.mtype.as(MClassType))
if mtype isa MNullableType then
v.write_attribute(self.mpropdef.mproperty, recv, v.null_instance)
mtype = mtype.anchor_to(v.mainmodule, recv.mtype.as(MClassType))
if mtype isa MNullableType then
v.write_attribute(self.mpropdef.mproperty, recv, v.null_instance)
redef class AAttrPropdef
redef type MPROPDEF: MAttributeDef
redef class AAttrPropdef
redef type MPROPDEF: MAttributeDef
+ # The static type of the property (declared, inferred or inherited)
+ # This attribute is also used to check if the property was analyzed and is valid.
+ var mtype: nullable MType
+
# Is the node tagged `noinit`?
var noinit = false
# Is the node tagged `noinit`?
var noinit = false
if mpropdef != null then
mpropdef.static_mtype = mtype
end
if mpropdef != null then
mpropdef.static_mtype = mtype
end
var mpropdef = self.mpropdef
if mpropdef == null then return # Error thus skipped
var ntype = self.n_type
var mpropdef = self.mpropdef
if mpropdef == null then return # Error thus skipped
var ntype = self.n_type
- var mtype = self.mpropdef.static_mtype
if mtype == null then return # Error thus skipped
var mclassdef = mpropdef.mclassdef
if mtype == null then return # Error thus skipped
var mclassdef = mpropdef.mclassdef
var nexpr = self.n_expr
if nexpr != null then
var nexpr = self.n_expr
if nexpr != null then
- var mtype = self.mpropdef.static_mtype
v.visit_expr_subtype(nexpr, mtype)
end
var nblock = self.n_block
v.visit_expr_subtype(nexpr, mtype)
end
var nblock = self.n_block