示例#1
0
            ParameterDeclaration CreateParameterForCurrentRangeVariable()
            {
                var param = new ParameterDeclaration();

                if (currentTransparentType.Count == 1)
                {
                    var clonedRangeVariable = (Identifier)currentTransparentType[0].Item1.Clone();
                    if (!rangeVariables.ContainsKey(currentTransparentType[0].Item1))
                    {
                        rangeVariables[currentTransparentType[0].Item1] = param;
                    }
                    param.AddChild(clonedRangeVariable, Roles.Identifier);
                }
                else
                {
                    param.AddChild(Identifier.Create(string.Format(CultureInfo.InvariantCulture, TransparentParameterNameTemplate, currentTransparentParameter++)), Roles.Identifier);
                }
                return(param);
            }
示例#2
0
            Expression VisitNested(Expression node, ParameterDeclaration transparentParameter)
            {
                var oldRangeVariableSubstitutions = activeRangeVariableSubstitutions;

                try {
                    if (transparentParameter != null && currentTransparentType.Count > 1)
                    {
                        activeRangeVariableSubstitutions = new Dictionary <string, Expression>(activeRangeVariableSubstitutions);
                        foreach (var t in currentTransparentType)
                        {
                            activeRangeVariableSubstitutions[t.Item1.Name] = MakeNestedMemberAccess(new IdentifierExpression(transparentParameter.Name), t.Item2);
                        }
                    }
                    var result = node.AcceptVisitor(this);
                    return((Expression)(result ?? node.Clone()));
                }
                finally {
                    activeRangeVariableSubstitutions = oldRangeVariableSubstitutions;
                }
            }
示例#3
0
            Expression AddMemberToCurrentTransparentType(ParameterDeclaration param, Identifier name, Expression value, bool namedExpression)
            {
                Expression newAssignment = VisitNested(value, param);

                if (namedExpression)
                {
                    newAssignment = new NamedExpression(name.Name, VisitNested(value, param));
                    if (!rangeVariables.ContainsKey(name))
                    {
                        rangeVariables[name] = ((NamedExpression)newAssignment).NameToken;
                    }
                }

                foreach (var t in currentTransparentType)
                {
                    t.Item2.Insert(0, param.Name);
                }

                currentTransparentType.Add(Tuple.Create(name, new List <string> {
                    name.Name
                }));
                return(new AnonymousTypeCreateExpression(new[] { new IdentifierExpression(param.Name), newAssignment }));
            }
示例#4
0
 void IAstVisitor.VisitParameterDeclaration(ParameterDeclaration parameterDeclaration)
 {
     Visit(EnterParameterDeclaration, LeaveParameterDeclaration, parameterDeclaration);
 }