Example #1
0
        private expression DesugarRecursiveParameters(expression expression, pattern_node pattern)
        {
            List <pattern_parameter> parameters = pattern.parameters;
            expression conjunction = new is_pattern_expr(expression, pattern, pattern.source_context);

            for (int i = 0; i < parameters.Count; i++)
            {
                if (parameters[i] is recursive_pattern_parameter parameter)
                {
                    //var parameterType = (parameter.pattern as deconstructor_pattern).type;
                    var newName = NewGeneralName();
                    pattern_parameter varParameter = null;
                    if (pattern is deconstructor_pattern)
                    {
                        varParameter = new var_deconstructor_parameter(newName, null, false);
                    }
                    else if (pattern is collection_pattern)
                    {
                        varParameter = new collection_pattern_var_parameter(newName, null);
                    }
                    else if (pattern is tuple_pattern)
                    {
                        varParameter = new tuple_pattern_var_parameter(newName, null);
                    }
                    parameters[i]       = varParameter;
                    varParameter.Parent = parameters[i];
                    conjunction         = bin_expr.LogicalAnd(conjunction, DesugarRecursiveParameters(newName, parameter.pattern));
                }
            }
            return(conjunction);
        }
        private expression DesugarRecursiveDeconstructor(expression expression, deconstructor_pattern pattern)
        {
            List <pattern_deconstructor_parameter> parameters = pattern.parameters;
            expression conjunction = new is_pattern_expr(expression, pattern);

            for (int i = 0; i < parameters.Count; i++)
            {
                if (parameters[i] is recursive_deconstructor_parameter parameter)
                {
                    //var parameterType = (parameter.pattern as deconstructor_pattern).type;
                    var newName      = NewGeneralName();
                    var varParameter = new var_deconstructor_parameter(newName, null);
                    parameters[i]       = varParameter;
                    varParameter.Parent = parameters[i];
                    conjunction         = bin_expr.LogicalAnd(conjunction, DesugarRecursiveDeconstructor(newName, parameter.pattern as deconstructor_pattern));
                }
            }

            return(conjunction);
        }
Example #3
0
 public virtual void visit(var_deconstructor_parameter _var_deconstructor_parameter)
 {
     DefaultVisit(_var_deconstructor_parameter);
 }