Execute type checks of covariant parameters

Property definitions

nitc $ NaiveInterpreter :: parameter_check
	# Execute type checks of covariant parameters
	fun parameter_check(node: ANode, mpropdef: MMethodDef, args: Array[Instance])
	do
		var msignature = mpropdef.msignature.as(not null)
		for i in [0..msignature.arity[ do
			var mp = msignature.mparameters[i]

			# skip test for vararg since the array is instantiated with the correct polymorphic type
			if mp.is_vararg then continue

			# skip if the cast is not required
			var origmtype =  mpropdef.mproperty.intro.msignature.mparameters[i].mtype
			if not origmtype.need_anchor then continue

			#print "{mpropdef}: {mpropdef.mproperty.intro.msignature.mparameters[i]}"

			# get the parameter type
			var mtype = mp.mtype
			var anchor = args.first.mtype.as(MClassType)
			var amtype = mtype.anchor_to(self.mainmodule, anchor)
			if not args[i+1].mtype.is_subtype(self.mainmodule, anchor, amtype) then
				node.fatal(self, "Cast failed. Expected `{mtype}`, got `{args[i+1].mtype}`")
			end
		end
	end
src/interpreter/naive_interpreter.nit:572,2--596,4