1 /* ****************************************************************************
3 * Copyright (c) Microsoft Corporation.
5 * This source code is subject to terms and conditions of the Microsoft Public License. A
6 * copy of the license can be found in the License.html file at the root of this distribution. If
7 * you cannot locate the Microsoft Public License, please send an email to
8 * dlr@microsoft.com. By using this source code in any fashion, you are agreeing to be bound
9 * by the terms of the Microsoft Public License.
11 * You must not remove this notice, or any other, from this software.
14 * ***************************************************************************/
16 using System.Reflection;
17 namespace System.Runtime.CompilerServices {
19 /// Class that contains helper methods for DLR CallSites.
21 public static class CallSiteHelpers {
22 private static Type _knownNonDynamicMethodType = typeof(object).GetMethod("ToString").GetType();
25 /// Checks if a <see cref="MethodBase"/> is internally used by DLR and should not
26 /// be displayed on the language code's stack.
28 /// <param name="mb">The input <see cref="MethodBase"/></param>
30 /// True if the input <see cref="MethodBase"/> is internally used by DLR and should not
31 /// be displayed on the language code's stack. Otherwise, false.
33 [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters")]
34 public static bool IsInternalFrame(MethodBase mb) {
35 //All the dynamic methods created for DLR rules have a special name.
36 //We also check if the method has a different type than the known
37 //non-static method. If it does, it is a dynamic method.
38 //This could be improved if the CLR provides a way to attach some information
39 //to the dynamic method we create, like CustomAttributes.
40 if (mb.Name == "CallSite.Target" && mb.GetType() != _knownNonDynamicMethodType) {
44 //Filter out the helper methods.
45 if (mb.DeclaringType == typeof(System.Dynamic.UpdateDelegates)) {