// Path: src/main/java/com/pidanic/saral/domain/expression/Expression.java
// public abstract class Expression {
//     private Type type;
// 
//     public Expression(Type type) {
//         this.type = type;
//     }
// 
//     public Type type() {
//         return type;
//     }
// 
//     public abstract void accept(ExpressionGenerator generator);
// }
// 
// Path: src/main/java/com/pidanic/saral/generator/ReturnStatementGenerator.java
// public class ReturnStatementGenerator extends StatementGenerator {
// 
//     private final MethodVisitor methodVisitor;
//     private final Scope scope;
// 
//     public ReturnStatementGenerator(Scope scope, MethodVisitor methodVisitor) {
//         this.scope = scope;
//         this.methodVisitor = methodVisitor;
//     }
// 
//     public void generate(ReturnStatement retStatement) {
//         Expression returnVariable = retStatement.getExpression();
//         Type retType = returnVariable.type();
//         returnVariable.accept(new ExpressionGenerator(methodVisitor, scope));
//         methodVisitor.visitInsn(retType.getTypeSpecificOpcode().getReturn());
//     }
// }
// 
// Path: src/main/java/com/pidanic/saral/generator/StatementGenerator.java
// public class StatementGenerator {
// }


import com.pidanic.saral.domain.expression.Expression;
import com.pidanic.saral.generator.ReturnStatementGenerator;
import com.pidanic.saral.generator.StatementGenerator;
package com.pidanic.saral.domain;


public class ReturnStatement implements Statement {

    private Expression expression;

    public ReturnStatement(Expression variable) {
        this.expression = variable;
    }

    @Override
// Path: src/main/java/com/pidanic/saral/domain/expression/Expression.java
// public abstract class Expression {
//     private Type type;
// 
//     public Expression(Type type) {
//         this.type = type;
//     }
// 
//     public Type type() {
//         return type;
//     }
// 
//     public abstract void accept(ExpressionGenerator generator);
// }
// 
// Path: src/main/java/com/pidanic/saral/generator/ReturnStatementGenerator.java
// public class ReturnStatementGenerator extends StatementGenerator {
// 
//     private final MethodVisitor methodVisitor;
//     private final Scope scope;
// 
//     public ReturnStatementGenerator(Scope scope, MethodVisitor methodVisitor) {
//         this.scope = scope;
//         this.methodVisitor = methodVisitor;
//     }
// 
//     public void generate(ReturnStatement retStatement) {
//         Expression returnVariable = retStatement.getExpression();
//         Type retType = returnVariable.type();
//         returnVariable.accept(new ExpressionGenerator(methodVisitor, scope));
//         methodVisitor.visitInsn(retType.getTypeSpecificOpcode().getReturn());
//     }
// }
// 
// Path: src/main/java/com/pidanic/saral/generator/StatementGenerator.java
// public class StatementGenerator {
// }


// Path: src/main/java/com/pidanic/saral/domain/ReturnStatement.java
import com.pidanic.saral.domain.expression.Expression;
import com.pidanic.saral.generator.ReturnStatementGenerator;
import com.pidanic.saral.generator.StatementGenerator;

package com.pidanic.saral.domain;


public class ReturnStatement implements Statement {

    private Expression expression;

    public ReturnStatement(Expression variable) {
        this.expression = variable;
    }

    @Override
    public void accept(StatementGenerator generator) {