private static Func <TextReader, int> CreateFindMember(IEnumerable <string> names) { var nameToResults = names .Select((name, index) => NameAutomata <int> .CreateName(name, emit => emit.LoadConstant(index))) .ToList(); return(NameAutomata <int> .Create(nameToResults, true, defaultValue : -1)); }
private static SetterLookupThunkReaderDelegate CreateFindMemberThunkReader(IEnumerable <string> names) { var nameToResults = names .Select((name, index) => NameAutomata <int> .CreateName(typeof(ThunkReader).MakeByRefType(), name, emit => emit.LoadConstant(index))) .ToList(); var ret = NameAutomata <int> .Create <SetterLookupThunkReaderDelegate>(typeof(ThunkReader).MakeByRefType(), nameToResults, true, defaultValue : -1); return((SetterLookupThunkReaderDelegate)ret); }
private static Func <TextReader, EnumType> CreateFindEnum(IEnumerable <Tuple <string, object> > names) { var underlyingType = Enum.GetUnderlyingType(typeof(EnumType)); var nameToResults = names .Select(name => NameAutomata <EnumType> .CreateName(name.Item1, emit => LoadConstantOfType(emit, name.Item2, underlyingType))) .ToList(); return (NameAutomata <EnumType> .Create( nameToResults, false, defaultValue : null )); }
private static EnumThunkReaderDelegate <EnumType> CreateFindEnumThunkReader(IEnumerable <Tuple <string, object> > names) { var thunkReaderRef = typeof(ThunkReader).MakeByRefType(); var underlyingType = Enum.GetUnderlyingType(typeof(EnumType)); var nameToResults = names .Select(name => NameAutomata <EnumType> .CreateName(thunkReaderRef, name.Item1, emit => LoadConstantOfType(emit, name.Item2, underlyingType))) .ToList(); var ret = NameAutomata <EnumType> .Create <EnumThunkReaderDelegate <EnumType> >( thunkReaderRef, nameToResults, false, defaultValue : null ); return((EnumThunkReaderDelegate <EnumType>)ret); }