code: private Environment checkReturn(Stmt.Return stmt, Environment environment, EnclosingScope scope)
  			throws IOException {
  		// Determine the set of return types for the enclosing function or
  		// method. This then allows us to check the given operands are
  		// appropriate subtypes.
  		Decl.FunctionOrMethod fm = scope.getEnclosingScope(FunctionOrMethodScope.class).getDeclaration();
  		Tuple<Type> types = fm.getType().getReturns();
  		// Type check the operands for the return statement (if any)
  		checkMultiExpressions(stmt.getReturns(), environment, types);
  		// Return bottom as following environment to signal that control-flow
  		// cannot continue here. Thus, any following statements will encounter
  		// the BOTTOM environment and, hence, report an appropriate error.
  		return FlowTypeUtils.BOTTOM;
  	}
docs: Type check a <code>return</code> statement. If a return expression is given,
  then we must check that this is well-formed and is a subtype of the enclosing
  function or method's declared return type. The environment after a return
  statement is "bottom" because that represents an unreachable program point.
  
  @param stmt
  Statement to type check
  @param environment
  Determines the type of all variables immediately going into this
  block
  @param scope
  The stack of enclosing scopes
  @return
  @throws ResolveError
  If a named type within this statement cannot be resolved within
  the enclosing project.