add("{left} = {autobox(right, left.mtype)};")
end
+ # Generate a return with `value`
+ fun ret(value: RuntimeVariable) do
+ var frame = self.frame
+ assert frame != null
+ var returnvar = frame.returnvar
+ if returnvar != null then
+ assign(returnvar, value)
+ end
+ self.add("break {frame.returnlabel.as(not null)};")
+ end
+
# Return a new local RuntimeVariable initialized with the Java expression `jexpr`.
#
# `mtype` is used for the Java return variable initialization.
else if node isa AClassdef then
# TODO compile attributes
v.info("NOT YET IMPLEMENTED attribute handling")
- v.add("return null;")
else
abort
end
+
end
end
# Compile that property definition to java code
fun compile_to_java(v: JavaCompilerVisitor, mpropdef: MMethodDef) do
v.info("NOT YET IMPLEMENTED {class_name}::compile_to_java")
+ v.add("return null;")
end
end
if mpropdef.is_intern then
v.info("NOT YET IMPLEMENTED {class_name}::compile_intern")
# TODO if compile_intern_to_java(v, mpropdef, arguments) then return
- v.add("return null;")
+ v.ret(v.null_instance)
return
end
redef fun expr(v) do return v.frame.as(not null).arguments.first
end
+redef class AReturnExpr
+ redef fun stmt(v) do
+ var nexpr = self.n_expr
+ var frame = v.frame
+ assert frame != null
+ if nexpr != null then
+ v.ret(v.expr(nexpr, frame.returnvar.as(not null).mtype))
+ else
+ v.ret(v.null_instance)
+ end
+ end
+end
+
redef class AVardeclExpr
redef fun stmt(v) do
var variable = self.variable.as(not null)