+ redef fun compile_callsite(callsite, arguments)
+ do
+ var res = super
+ if callsite.erasure_cast and not self.compiler.as(SeparateErasureCompiler).modelbuilder.toolcontext.opt_no_check_erasure_cast.value then
+ assert res != null
+ var mtype = callsite.msignature.return_mtype
+ assert mtype != null
+ self.add("/* Erasure cast for return {res} isa {mtype} */")
+ var cond = self.type_test(res, mtype, "erasure")
+ self.add("if (!{cond}) \{")
+ #var x = self.class_name_string(res)
+ #var y = self.class_name_string(arguments.first)
+ #self.add("fprintf(stderr, \"Erasure cast: expected {mtype} (self is %s), got %s for {res}\\n\", {y}, {x});")
+ self.add_abort("Cast failed")
+ self.add("\}")
+ end
+ return res
+ end
+