public virtual object VisitQueryExpression(QueryExpression queryExpression, object data) {
			Debug.Assert((queryExpression != null));
			Debug.Assert((queryExpression.FromClause != null));
			Debug.Assert((queryExpression.MiddleClauses != null));
			Debug.Assert((queryExpression.SelectOrGroupClause != null));
			queryExpression.FromClause.AcceptVisitor(this, data);
			foreach (QueryExpressionClause o in queryExpression.MiddleClauses) {
				Debug.Assert(o != null);
				o.AcceptVisitor(this, data);
			}
			return queryExpression.SelectOrGroupClause.AcceptVisitor(this, data);
		}
		public override object VisitQueryExpression(QueryExpression queryExpression, object data)
		{
			endLocationStack.Push(GetQueryVariableEndScope(queryExpression));
			base.VisitQueryExpression(queryExpression, data);
			endLocationStack.Pop();
			return null;
		}
		Location GetQueryVariableEndScope(QueryExpression queryExpression)
		{
			return queryExpression.EndLocation;
		}
示例#4
0
	void QueryExpressionBody(
#line  2479 "Frames/cs.ATG" 
ref QueryExpression q) {

#line  2480 "Frames/cs.ATG" 
		QueryExpressionFromClause fromClause;     QueryExpressionWhereClause whereClause;
		QueryExpressionLetClause letClause;       QueryExpressionJoinClause joinClause;
		QueryExpressionOrderClause orderClause;
		QueryExpressionSelectClause selectClause; QueryExpressionGroupClause groupClause;
		
		while (StartOf(39)) {
			if (la.kind == 137) {
				QueryExpressionFromClause(
#line  2486 "Frames/cs.ATG" 
out fromClause);

#line  2486 "Frames/cs.ATG" 
				SafeAdd<QueryExpressionClause>(q, q.MiddleClauses, fromClause); 
			} else if (la.kind == 127) {
				QueryExpressionWhereClause(
#line  2487 "Frames/cs.ATG" 
out whereClause);

#line  2487 "Frames/cs.ATG" 
				SafeAdd<QueryExpressionClause>(q, q.MiddleClauses, whereClause); 
			} else if (la.kind == 141) {
				QueryExpressionLetClause(
#line  2488 "Frames/cs.ATG" 
out letClause);

#line  2488 "Frames/cs.ATG" 
				SafeAdd<QueryExpressionClause>(q, q.MiddleClauses, letClause); 
			} else if (la.kind == 142) {
				QueryExpressionJoinClause(
#line  2489 "Frames/cs.ATG" 
out joinClause);

#line  2489 "Frames/cs.ATG" 
				SafeAdd<QueryExpressionClause>(q, q.MiddleClauses, joinClause); 
			} else {
				QueryExpressionOrderByClause(
#line  2490 "Frames/cs.ATG" 
out orderClause);

#line  2490 "Frames/cs.ATG" 
				SafeAdd<QueryExpressionClause>(q, q.MiddleClauses, orderClause); 
			}
		}
		if (la.kind == 133) {
			QueryExpressionSelectClause(
#line  2492 "Frames/cs.ATG" 
out selectClause);

#line  2492 "Frames/cs.ATG" 
			q.SelectOrGroupClause = selectClause; 
		} else if (la.kind == 134) {
			QueryExpressionGroupClause(
#line  2493 "Frames/cs.ATG" 
out groupClause);

#line  2493 "Frames/cs.ATG" 
			q.SelectOrGroupClause = groupClause; 
		} else SynErr(218);
		if (la.kind == 136) {
			QueryExpressionIntoClause(
#line  2495 "Frames/cs.ATG" 
ref q);
		}
	}
示例#5
0
	void QueryExpressionIntoClause(
#line  2555 "Frames/cs.ATG" 
ref QueryExpression q) {

#line  2556 "Frames/cs.ATG" 
		QueryExpression firstQuery = q;
		QueryExpression continuedQuery = new QueryExpression(); 
		continuedQuery.StartLocation = q.StartLocation;
		firstQuery.EndLocation = la.Location;
		continuedQuery.FromClause = new QueryExpressionFromClause();
		continuedQuery.FromClause.StartLocation = la.Location;
		// nest firstQuery inside continuedQuery.
		continuedQuery.FromClause.InExpression = firstQuery;
		continuedQuery.IsQueryContinuation = true;
		q = continuedQuery;
		
		Expect(136);
		Identifier();

#line  2569 "Frames/cs.ATG" 
		continuedQuery.FromClause.Identifier = t.val; 

#line  2570 "Frames/cs.ATG" 
		continuedQuery.FromClause.EndLocation = t.EndLocation; 
		QueryExpressionBody(
#line  2571 "Frames/cs.ATG" 
ref q);
	}
		public sealed override object VisitQueryExpression(QueryExpression queryExpression, object data) {
			this.BeginVisit(queryExpression);
			object result = this.TrackedVisitQueryExpression(queryExpression, data);
			this.EndVisit(queryExpression);
			return result;
		}
示例#7
0
	void QueryExpression(
#line  2431 "Frames/cs.ATG" 
out Expression outExpr) {

#line  2432 "Frames/cs.ATG" 
		QueryExpression q = new QueryExpression(); outExpr = q; q.StartLocation = la.Location; 
		QueryExpressionFromClause fromClause;
		
		QueryExpressionFromClause(
#line  2436 "Frames/cs.ATG" 
out fromClause);

#line  2436 "Frames/cs.ATG" 
		q.FromClause = fromClause; 
		QueryExpressionBody(
#line  2437 "Frames/cs.ATG" 
ref q);

#line  2438 "Frames/cs.ATG" 
		q.EndLocation = t.EndLocation; 
		outExpr = q; /* set outExpr to q again if QueryExpressionBody changed it (can happen with 'into' clauses) */ 
		
	}
		public virtual object TrackedVisitQueryExpression(QueryExpression queryExpression, object data) {
			return base.VisitQueryExpression(queryExpression, data);
		}
示例#9
0
	void QueryExpr(
#line  2013 "VBNET.ATG" 
out Expression expr) {

#line  2015 "VBNET.ATG" 
		QueryExpression qexpr = new QueryExpression();
		qexpr.StartLocation = la.Location;
		List<QueryExpressionClause> middleClauses = new List<QueryExpressionClause>();
		expr = qexpr;
		
		FromOrAggregateQueryOperator(
#line  2020 "VBNET.ATG" 
middleClauses);
		while (StartOf(31)) {
			QueryOperator(
#line  2021 "VBNET.ATG" 
middleClauses);
		}

#line  2023 "VBNET.ATG" 
		qexpr.EndLocation = t.EndLocation;
		
	}
示例#10
0
		public override object VisitQueryExpression(QueryExpression queryExpression, object data)
		{
			if (this.queryExpression != null) // prevent endloss loop: var n = from n select n; n.$ (doesn't make sense, but you can type this)
				return null;
			this.queryExpression = queryExpression;
			IReturnType type = null;
			QueryExpressionSelectClause selectClause = queryExpression.SelectOrGroupClause as QueryExpressionSelectClause;
			if (selectClause != null) {
				InvocationExpression selectInvocation = new InvocationExpression (new MemberReferenceExpression (queryExpression.FromClause.InExpression, "Select"));
				LambdaExpression selectLambdaExpr = new LambdaExpression ();
				selectLambdaExpr.Parent = selectInvocation;
				selectLambdaExpr.Parameters.Add (new ParameterDeclarationExpression (null, "par"));
				selectLambdaExpr.ExpressionBody = selectClause.Projection;
				TypeReference typeRef = new TypeReference ("System.Func");
				typeRef.GenericTypes.Add (TypeReference.Null);
				ResolveResult result = resolver.ResolveExpression (selectLambdaExpr, resolver.ResolvePosition, false);
				
				typeRef.GenericTypes.Add (NRefactoryResolver.ConvertToTypeReference (result.ResolvedType));
				
				ObjectCreateExpression createExpression = new ObjectCreateExpression (typeRef, new List<Expression> (new Expression [] {
					null,
					selectLambdaExpr
				}));
				
				selectInvocation.Arguments.Add (createExpression);
				return CreateResult (ResolveType (selectInvocation));
			}
			
			QueryExpressionGroupClause groupClause = queryExpression.SelectOrGroupClause as QueryExpressionGroupClause;
			if (groupClause != null) {
				InvocationExpression groupInvocation = new InvocationExpression (new MemberReferenceExpression (queryExpression.FromClause.InExpression, "GroupBy"));
				
				LambdaExpression keyLambdaExpr = new LambdaExpression ();
				keyLambdaExpr.Parent = groupInvocation;
				keyLambdaExpr.Parameters.Add (new ParameterDeclarationExpression (null, "par"));
				keyLambdaExpr.ExpressionBody = groupClause.GroupBy;
				groupInvocation.Arguments.Add (keyLambdaExpr);
				
				LambdaExpression elementLambdaExpr = new LambdaExpression ();
				elementLambdaExpr.Parent = groupInvocation;
				elementLambdaExpr.Parameters.Add (new ParameterDeclarationExpression (null, "par"));
				elementLambdaExpr.ExpressionBody = groupClause.Projection;
				groupInvocation.Arguments.Add (elementLambdaExpr);
				return CreateResult (ResolveType (groupInvocation));
			}
			
			if (type != null) 
				return CreateResult (new DomReturnType("System.Collections.Generic.IEnumerable", false, new List<IReturnType> (new IReturnType[] { type })));
			return null;
		}
		public virtual object VisitQueryExpression(QueryExpression queryExpression, object data) {
			Debug.Assert((queryExpression != null));
			Debug.Assert((queryExpression.FromClause != null));
			Debug.Assert((queryExpression.MiddleClauses != null));
			Debug.Assert((queryExpression.SelectOrGroupClause != null));
			nodeStack.Push(queryExpression.FromClause);
			queryExpression.FromClause.AcceptVisitor(this, data);
			queryExpression.FromClause = ((QueryExpressionFromClause)(nodeStack.Pop()));
			for (int i = 0; i < queryExpression.MiddleClauses.Count; i++) {
				QueryExpressionClause o = queryExpression.MiddleClauses[i];
				Debug.Assert(o != null);
				nodeStack.Push(o);
				o.AcceptVisitor(this, data);
				o = (QueryExpressionClause)nodeStack.Pop();
				if (o == null)
					queryExpression.MiddleClauses.RemoveAt(i--);
				else
					queryExpression.MiddleClauses[i] = o;
			}
			nodeStack.Push(queryExpression.SelectOrGroupClause);
			queryExpression.SelectOrGroupClause.AcceptVisitor(this, data);
			queryExpression.SelectOrGroupClause = ((QueryExpressionClause)(nodeStack.Pop()));
			return null;
		}
		public virtual object VisitQueryExpression(QueryExpression queryExpression, object data) {
			throw new global::System.NotImplementedException("QueryExpression");
		}