private static ImmediateWindow.Result Execute(Type type, string[] members, string[] parameters, ref string result) { ImmediateWindow.Result result2; try { List <MemberInfo> list = new List <MemberInfo>(); string text = string.Empty; bool flag = false; Type type2 = type; int i = 0; while (i < members.Length) { string text2 = members[i]; result = string.Empty; MemberInfo memberInfo = null; MemberInfo[] members2 = type.GetMembers(BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic); MemberInfo[] members3 = type.GetMembers(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); foreach (MemberInfo memberInfo2 in members2) { if (memberInfo2.Name.ICompare(text2) == 0) { memberInfo = memberInfo2; break; } if (memberInfo2.Name.StartsWith(text2, true, CultureInfo.InvariantCulture)) { if (text.Empty()) { result = result + memberInfo2.Name + " "; } else { result = string.Concat(new string[] { result, text, ".", memberInfo2.Name, " " }); } } } if (memberInfo == null) { MemberInfo[] array = members3; int j = 0; while (j < array.Length) { MemberInfo memberInfo3 = array[j]; if (memberInfo3.Name.ICompare(text2) == 0) { memberInfo = memberInfo3; if (i == 0) { flag = true; break; } break; } else { if (memberInfo3.Name.StartsWith(text2, true, CultureInfo.InvariantCulture)) { if (text.Empty()) { result = result + memberInfo3.Name + " "; } else { result = string.Concat(new string[] { result, text, ".", memberInfo3.Name, " " }); } } j++; } } } if (memberInfo == null) { if (result.Length > 0) { return(ImmediateWindow.Result.IncompleteMember); } return(ImmediateWindow.Result.InvalidMember); } else { if (!text.Empty()) { text += "."; } text += memberInfo.Name; result = string.Empty; type = ImmediateWindow.GetMemberUndelyingType(memberInfo); list.Add(memberInfo); i++; } } object obj = null; if (flag) { if (parameters.Length == 0) { return(ImmediateWindow.Result.InstanceNameRequired); } foreach (UnityEngine.Object @object in UnityEngine.Object.FindObjectsOfTypeAll(type2)) { if (parameters[0].ICompare("?") == 0 || @object.name.ICompare(parameters[0]) == 0) { obj = @object; break; } } if (obj == null) { return(ImmediateWindow.Result.InvalidInstanceName); } parameters = parameters.Skip(1).ToArray <string>(); } if (list.Count > 0) { for (int k = 0; k < list.Count; k++) { MemberInfo memberInfo4 = list[k]; bool flag2 = k == list.Count - 1; if (memberInfo4.MemberType == MemberTypes.Field) { FieldInfo fieldInfo = (FieldInfo)memberInfo4; if (!flag2) { obj = fieldInfo.GetValue(obj); } else if (parameters.Length != 0) { object value = fieldInfo.GetValue(obj); ((FieldInfo)memberInfo4).SetValue(obj, ImmediateWindow.ConvertFromString(parameters[0], fieldInfo.FieldType)); result = "> " + ((value != null) ? value.ToString() : null) + " -> " + parameters[0]; } else { object value2 = fieldInfo.GetValue(obj); result = "> " + ((value2 != null) ? value2.ToString() : null) + " " + ImmediateWindow.GetNameMemberValue(value2); } } else if (memberInfo4.MemberType == MemberTypes.Property) { PropertyInfo propertyInfo = (PropertyInfo)memberInfo4; if (!flag2) { obj = propertyInfo.GetValue(obj); } else if (parameters.Length != 0) { object value3 = propertyInfo.GetValue(obj); ((PropertyInfo)memberInfo4).SetValue(obj, ImmediateWindow.ConvertFromString(parameters[0], propertyInfo.PropertyType)); result = "> " + ((value3 != null) ? value3.ToString() : null) + " -> " + parameters[0]; } else { object value4 = propertyInfo.GetValue(obj); result = "> " + ((value4 != null) ? value4.ToString() : null) + " " + ImmediateWindow.GetNameMemberValue(value4); } } else if (memberInfo4.MemberType == MemberTypes.Method) { MethodInfo methodInfo = (MethodInfo)memberInfo4; ParameterInfo[] parameters2 = methodInfo.GetParameters(); if (!flag2) { ParameterInfo[] array3 = parameters2; for (int j = 0; j < array3.Length; j++) { if (!array3[j].IsOptional) { return(ImmediateWindow.Result.MethodRequiresParameters); } } object[] parameters3 = Enumerable.Repeat <object>(Type.Missing, parameters2.Length).ToArray <object>(); obj = methodInfo.Invoke(obj, parameters3); } else { List <object> list2 = new List <object>(); for (int l = 0; l < parameters2.Length; l++) { if (parameters.Length > l) { list2.Add(ImmediateWindow.ConvertFromString(parameters[l], parameters2[l].ParameterType)); } } object obj2 = methodInfo.Invoke(obj, list2.ToArray()); result = "> " + ((obj2 != null) ? obj2.ToString() : null) + " " + ImmediateWindow.GetNameMemberValue(obj2); } } } result2 = ImmediateWindow.Result.Success; } else if (result.Length > 0) { result2 = ImmediateWindow.Result.IncompleteMember; } else { result2 = ImmediateWindow.Result.InvalidMember; } } catch (Exception ex) { result = ex.ToString(); result2 = ImmediateWindow.Result.Exception; } return(result2); }