@@ -0,0 +1,1561 @@
+package net.folab.fo.ast;%0A%0Aimport net.folab.fo.bytecode.JavaType;%0Aimport net.folab.fo.bytecode.StatementContext;%0A%0Aimport org.objectweb.asm.MethodVisitor;%0Aimport org.objectweb.asm.Opcodes;%0A%0Apublic class Return implements Statement %7B%0A%0A    public static final Statement VOID = new Return(Expression.VOID);%0A%0A    private final Expression returnValue;%0A%0A    public Return(Expression returnValue) %7B%0A        this.returnValue = returnValue;%0A    %7D%0A%0A    public void generate(MethodVisitor mv, StatementContext ctx) %7B%0A%0A        returnValue.generate(mv, ctx);%0A%0A        JavaType returnType = returnValue.getType();%0A        if (returnType.equals(JavaType.VOID)) %7B%0A            mv.visitInsn(Opcodes.RETURN);%0A            ctx.clearStack();%0A%0A        %7D else if (returnType.equals(JavaType.BOOLEAN)%0A                %7C%7C returnType.equals(JavaType.BYTE)%0A                %7C%7C returnType.equals(JavaType.CHAR)%0A                %7C%7C returnType.equals(JavaType.SHORT)%0A                %7C%7C returnType.equals(JavaType.INT)) %7B%0A            mv.visitInsn(Opcodes.IRETURN);%0A            ctx.clearStack();%0A%0A        %7D else if (returnType.equals(JavaType.LONG)) %7B%0A            mv.visitInsn(Opcodes.LRETURN);%0A            ctx.clearStack();%0A%0A        %7D else if (returnType.equals(JavaType.FLOAT)) %7B%0A            mv.visitInsn(Opcodes.FRETURN);%0A            ctx.clearStack();%0A%0A        %7D else if (returnType.equals(JavaType.DOUBLE)) %7B%0A            mv.visitInsn(Opcodes.DRETURN);%0A            ctx.clearStack();%0A%0A        %7D else %7B%0A            mv.visitInsn(Opcodes.ARETURN);%0A            ctx.clearStack();%0A%0A        %7D%0A%0A    %7D%0A%0A%7D%0A

Add Return to represetn return statement