public override void Visit(DVariable n)
        {
            if (n.NameHash == 0 && n.ContainsAttribute(DTokens.Override))
            {
                prv = new MethodOverrideCompletionProvider(n, cdgen);
                halt = true;
                return;
            }

            if (n.IsAlias) {
                // alias |
                // alias id = |
                // NOT alias Type |
                if (IsIncompleteDeclaration (n.Type)) {
                    prv = new CtrlSpaceCompletionProvider (cdgen, scopedBlock,scopedStatement);
                    halt = true;
                }
            }else if (n.Initializer != null) {
                handlesInitializer = true;
                n.Initializer.Accept (this);
                handlesInitializer = false;
            }

            if(!halt)
                VisitDNode(n);

            // auto |
            if(!halt && n.NameHash == 0 && n.ContainsAttribute (DTokens.Auto)) {
                halt = true;
                explicitlyNoCompletion = true;
            }
        }
		public override void Visit (DVariable n)
		{
			if (n.NameHash == 0 && n.ContainsAttribute(DTokens.Override))
			{
				prv = new MethodOverrideCompletionProvider(n, cdgen);
				halt = true;
				return;
			}

			if (n.IsAlias) {
				// alias |
				// alias id = |
				// NOT alias Type |
				if (IsIncompleteDeclaration (n.Type)) {
					prv = new CtrlSpaceCompletionProvider (cdgen, scopedBlock, MemberFilter.All | MemberFilter.BlockKeywords);
					halt = true;
					return;
				}
			}else if (n.Initializer != null) {
				initializedNode = n;
				handlesInitializer = true;
				n.Initializer.Accept (this);
				handlesInitializer = false;
			}

			if(!halt)
				VisitDNode(n);

			// auto |
			if(!halt && n.NameHash == 0 && 
				(n.ContainsAttribute (DTokens.Auto) || DParser.ContainsStorageClass(n.Attributes) != Modifier.Empty)) {
				halt = true;
				explicitlyNoCompletion = true;
			}
		}