recv
the value of the attribute mproperty
by value
# Replace in `recv` the value of the attribute `mproperty` by `value`
fun write_attribute(mproperty: MAttribute, recv: Instance, value: Instance)
do
assert recv isa MutableInstance
recv.attributes[mproperty] = value
end
src/interpreter/naive_interpreter.nit:646,2--651,4
# Replace in `recv` the value of the attribute `mproperty` by `value`
redef fun write_attribute(mproperty: MAttribute, recv: Instance, value: Instance)
do
assert recv isa MutableInstance
# Replace the old value of mproperty in recv
var position = recv.mtype.as(MClassType).mclass.get_position_attributes(mproperty.intro_mclassdef.mclass)
if position > -1 then
# if this attribute class has an unique position for this receiver, then use direct access
write_attribute_sst(recv.internal_attributes, position + mproperty.offset, value)
else
# Otherwise, use perfect hashing to replace the old value
var id = mproperty.intro_mclassdef.mclass.vtable.id
write_attribute_ph(recv.internal_attributes, recv.vtable.internal_vtable,
recv.vtable.mask, id, mproperty.offset, value)
end
end
src/vm/virtual_machine.nit:344,2--361,4