/// <summary>
        /// Checks if the expression can be coppied or moved, without changing the semantics of the program. Additional checks must be made to find the scope of the supposed move.
        /// </summary>
        /// <param name="expression">The expression in question.</param>
        /// <returns>Returns true, if the expression can be safely moved/coppied.</returns>
        private bool CanBePropagated(Expression expression)
        {
            ExpressionTreeVisitor etv = new ExpressionTreeVisitor();

            return(etv.CanBePropagated(expression));
        }
 /// <summary>
 /// Checks if the expression can be coppied or moved, without changing the semantics of the program. Additional checks must be made to find the scope of the supposed move.
 /// </summary>
 /// <param name="expression">The expression in question.</param>
 /// <returns>Returns true, if the expression can be safely moved/coppied.</returns>
 private bool CanBePropagated(Expression expression)
 {
     ExpressionTreeVisitor etv = new ExpressionTreeVisitor();
     return etv.CanBePropagated(expression);
 }