public static MethodInterpreter GetInterpreter(this MethodBase methodBase, CrRuntimeLibrary crRuntime) { var closure = crRuntime.Closure; if (closure != null) { var key = methodBase.ToKey(closure); if (key != null) { return(key.Interpreter); } } var declaringType = methodBase.DeclaringType; var typeToSearch = declaringType.ReversedType(crRuntime); var isGacType = typeToSearch.Assembly.GlobalAssemblyCache; if (isGacType) { var interpreter = new MethodInterpreter(methodBase); if (crRuntime.ResolveInterpreter(interpreter.ToKey(), ref interpreter)) { return(interpreter); } return(null); } return(methodBase.Register()); }
public static MethodInterpreter Register(this MethodBase method, CrRuntimeLibrary crRuntime = null) { SetupTypeResolverIfNecesary(method); var interpreter = new MethodInterpreter(method); Register(interpreter); if (Resolve(interpreter)) { return(interpreter); } if (crRuntime != null) { var methodKind = crRuntime.ResolveInterpreter(interpreter.ToKey(), ref interpreter); //interpreter.Kind = methodKind; } return(interpreter); }