# Compile the body of this function
fun compile_inside_to_java(v: JavaCompilerVisitor) do
var modelbuilder = v.compiler.modelbuilder
var node = modelbuilder.mpropdef2node(self)
var recv = mclassdef.bound_mtype
var arguments = new Array[RuntimeVariable]
var frame = new JavaStaticFrame(v, self, recv, arguments)
v.frame = frame
var selfvar = v.decl_var("self", recv)
arguments.add(selfvar)
var boxed = v.new_expr("args[0]", v.compiler.mainmodule.object_type)
v.add "{selfvar} = {v.autobox(boxed, recv)};"
var msignature = self.msignature
var ret = null
if msignature != null then
ret = msignature.return_mtype
if ret != null then
var retvar = v.decl_var("ret", ret)
if ret.name == "Int" then v.add "{retvar} = 0;"
if ret.name == "Float" then v.add "{retvar} = 0.0;"
if ret.name == "Bool" then v.add "{retvar} = false;"
if ret.name == "Char" then v.add "{retvar} = 0;"
if ret.name == "Byte" then v.add "{retvar} = 0;"
frame.returnvar = retvar
end
end
frame.returnlabel = v.get_name("RET_LABEL")
v.current_node = node
if is_abstract then
v.add_abort("Abstract method `{mproperty.name}` called on `\" + {selfvar}.rtclass.class_name +\"`")
v.add("return null;")
return
end
v.current_node = null
v.add("{frame.returnlabel.as(not null)}: \{")
if node isa APropdef then
node.compile_to_java(v, self, arguments)
else if node isa AClassdef then
node.compile_to_java(v, self, arguments)
else
abort
end
v.add("\}")
if ret != null then
v.add("return {v.autobox(frame.returnvar.as(not null), v.compiler.mainmodule.object_type)};")
else
v.add("return null;")
end
end
src/compiler/java_compiler.nit:1424,2--1480,4