@Override
	public Object visitReturnStat(returnStat_AST node, ScopeElement data) {
		binaryExpression_AST returnStmt = node.expr;
		MethodUnit methodUnit = (MethodUnit) data.getScopeUnit().getUnit();
		if (methodUnit == null)
			return null;
		Type methodReturnType = methodUnit.getReturnType().typeObj;
		if (returnStmt == null && methodReturnType.name.equals("null")){
			return null;
		}else if (returnStmt == null) {
			decafError.numErrors++;
			decafError.error("Expecting " +methodReturnType.name+ " return type", new Position(0, 0, 0, 0));
		}
		if (returnStmt == null) {
			return null;
		}
		returnStmt.jjtAccept(this, data);
		if (data.getScopeUnit().getUnit() instanceof MethodUnit){
			if (!TypeEquality.eq(returnStmt.typeObj, methodReturnType, null)) {
				decafError.numErrors++;
				decafError.error("Invalid return type in method " + methodUnit.getName(), new Position(0, 0, 0, 0));
			}
		} else {
			System.out.println("Scope Not in method. CHECK IT OUT !!!");
			decafError.numErrors++;
			decafError.error("Scope is not in method", new Position(0, 0, 0, 0));
		}
		return null;
	}