aboutsummaryrefslogtreecommitdiffstatsci
path: root/src/CompilerServices/CompilerServices.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/CompilerServices/CompilerServices.cs')
-rw-r--r--src/CompilerServices/CompilerServices.cs34
1 files changed, 24 insertions, 10 deletions
diff --git a/src/CompilerServices/CompilerServices.cs b/src/CompilerServices/CompilerServices.cs
index d6f036ab..43c9d704 100644
--- a/src/CompilerServices/CompilerServices.cs
+++ b/src/CompilerServices/CompilerServices.cs
@@ -17,15 +17,19 @@ namespace Crow
BindingFlags.NonPublic | BindingFlags.Instance);
static MethodInfo stringEquals = typeof (string).GetMethod
("Equals", new Type [3] { typeof (string), typeof (string), typeof (StringComparison) });
- static FieldInfo fiNewValue = typeof (ValueChangeEventArgs).GetField ("NewValue");
- static FieldInfo fiMbName = typeof (ValueChangeEventArgs).GetField ("MemberName");
- static EventInfo eiValueChanged = typeof (IValueChange).GetEvent ("ValueChanged");
- static Type [] dmValueChangedArgs = { typeof (object), typeof (object),
- eiValueChanged.EventHandlerType.GetMethod ("Invoke").
- GetParameters ()[1].ParameterType };
static MethodInfo miFindByName = typeof (GraphicObject).GetMethod ("FindByName");
+ #region ValueChange Reflexion member info
+ static EventInfo eiValueChange = typeof (IValueChange).GetEvent ("ValueChanged");
+ static MethodInfo miInvokeValueChange = eiValueChange.EventHandlerType.GetMethod ("Invoke");
+ static Type [] argsValueChange = { typeof (object), typeof (object), miInvokeValueChange.GetParameters () [1].ParameterType };
+ static FieldInfo fiNewValue = typeof (ValueChangeEventArgs).GetField ("NewValue");
+ static FieldInfo fiMbName = typeof (ValueChangeEventArgs).GetField ("MemberName");
+ static MethodInfo miValueChangeAdd = eiValueChange.GetAddMethod ();
+ #endregion
+
+
public static void emitSetCurInterface(ILGenerator il){
il.Emit (OpCodes.Ldloc_0);
il.Emit (OpCodes.Ldarg_1);
@@ -229,7 +233,7 @@ namespace Crow
MethodAttributes.Family | MethodAttributes.FamANDAssem | MethodAttributes.NewSlot,
CallingConventions.Standard,
typeof (void),
- dmValueChangedArgs,
+ argsValueChange,
target_Type, true);
il = dm.GetILGenerator (256);
@@ -377,9 +381,8 @@ namespace Crow
il.Emit (OpCodes.Pop);
il.Emit (OpCodes.Ret);
- Delegate del = dm.CreateDelegate (eiValueChanged.EventHandlerType, Bindings [0].Source.Instance);
- MethodInfo addHandler = eiValueChanged.GetAddMethod ();
- addHandler.Invoke (grouped [0].Target.Instance, new object [] { del });
+ Delegate del = dm.CreateDelegate (eiValueChange.EventHandlerType, Bindings [0].Source.Instance);
+ miValueChangeAdd.Invoke (grouped [0].Target.Instance, new object [] { del });
}
}
@@ -589,6 +592,17 @@ namespace Crow
return query;
}
+
+ public static MethodInfo SearchExtMethod(Type t, string methodName){
+ MethodInfo mi = null;
+ mi = GetExtensionMethods (Assembly.GetEntryAssembly(), t)
+ .Where (em => em.Name == methodName).FirstOrDefault ();
+ if (mi != null)
+ return mi;
+
+ return GetExtensionMethods (Assembly.GetExecutingAssembly(), t)
+ .Where (em => em.Name == methodName).FirstOrDefault ();
+ }
}
}