private GeneralGetter MakeTranslateFunc(Type type) { GeneralGetter fixTypeGetter = (IntPtr isolate, IGetValueFromJs getValueApi, IntPtr value, bool isByRef) => { if (getValueApi.GetJsValueType(isolate, value, isByRef) == JsValueType.NativeObject) { var objPtr = getValueApi.GetObject(isolate, value, isByRef); var obj = objectPool.Get(objPtr.ToInt32()); return((obj != null && type.IsAssignableFrom(obj.GetType())) ? obj : null); } return(null); }; if (typeof(Delegate).IsAssignableFrom(type)) { return((IntPtr isolate, IGetValueFromJs getValueApi, IntPtr value, bool isByRef) => { var jsValueType = getValueApi.GetJsValueType(isolate, value, isByRef); if (jsValueType == JsValueType.Function) { var nativePtr = getValueApi.GetFunction(isolate, value, isByRef); var result = genericDelegateFactory.Create(type, nativePtr); if (result == null) { throw new Exception("can not find delegate bridge for " + type.GetFriendlyName()); } return result; } else { return fixTypeGetter(isolate, getValueApi, value, isByRef); } }); } return(fixTypeGetter); }