MonoDevelop.Debugger.Gdb.GdbBacktrace.GetExpressionCompletionData C# (CSharp) Method

GetExpressionCompletionData() public method

public GetExpressionCompletionData ( int frameIndex, string exp ) : Mono.Debugging.Client.CompletionData
frameIndex int
exp string
return Mono.Debugging.Client.CompletionData
		public CompletionData GetExpressionCompletionData (int frameIndex, string exp)
		{
			SelectFrame (frameIndex);
			
			bool pointer = exp.EndsWith ("->");
			int i;
			
			if (pointer || exp.EndsWith (".")) {
				exp = exp.Substring (0, exp.Length - (pointer ? 2 : 1));
				i = 0;
				while (i < exp.Length) {
					ObjectValue val = CreateVarObject (exp, session.EvaluationOptions);
					if (!val.IsUnknown && !val.IsError) {
						CompletionData data = new CompletionData ();
						foreach (ObjectValue cv in val.GetAllChildren ())
							data.Items.Add (new CompletionItem (cv.Name, cv.Flags));
						data.ExpressionLength = 0;
						return data;
					}
					i++;
				}
				return null;
			}
			
			i = exp.Length - 1;
			bool lastWastLetter = false;
			while (i >= 0) {
				char c = exp [i--];
				if (!char.IsLetterOrDigit (c) && c != '_')
					break;
				lastWastLetter = !char.IsDigit (c);
			}
			
			if (lastWastLetter) {
				string partialWord = exp.Substring (i+1);
				
				CompletionData cdata = new CompletionData ();
				cdata.ExpressionLength = partialWord.Length;
				
				// Local variables
				
				GdbCommandResult res = session.RunCommand ("-stack-list-locals", "0");
				foreach (ResultData data in res.GetObject ("locals")) {
					string name = data.GetValueString ("name");
					if (name.StartsWith (partialWord))
						cdata.Items.Add (new CompletionItem (name, ObjectValueFlags.Variable));
				}
				
				// Parameters
				
				res = session.RunCommand ("-stack-list-arguments", "0", frameIndex.ToString (), frameIndex.ToString ());
				foreach (ResultData data in res.GetObject ("stack-args").GetObject (0).GetObject ("frame").GetObject ("args")) {
					string name = data.GetValueString ("name");
					if (name.StartsWith (partialWord))
						cdata.Items.Add (new CompletionItem (name, ObjectValueFlags.Parameter));
				}
				
				if (cdata.Items.Count > 0)
					return cdata;
			}			
			return null;
		}