public GeneratorSkeleton(BooClassBuilder generatorBuilder, BooMethodBuilder getEnumeratorBuilder, IType generatorItemType, GeneratorTypeReplacer generatorClassTypeReplacer) { GeneratorClassBuilder = generatorBuilder; GeneratorItemType = generatorItemType; GetEnumeratorBuilder = getEnumeratorBuilder; GeneratorClassTypeReplacer = generatorClassTypeReplacer; }
public GeneratorMethodProcessor(CompilerContext context, InternalMethod method) : base(context, method) { var skeleton = My <GeneratorSkeletonBuilder> .Instance.SkeletonFor(method); _generatorItemType = skeleton.GeneratorItemType; _enumerable = skeleton.GeneratorClassBuilder; _getEnumeratorBuilder = skeleton.GetEnumeratorBuilder; _methodToEnumerableMapper = skeleton.GeneratorClassTypeReplacer; }
GeneratorSkeleton CreateGeneratorSkeleton(Node sourceNode, Method enclosingMethod, IType generatorItemType) { // create the class skeleton for type inference to work var replacer = new GeneratorTypeReplacer(); var builder = SetUpEnumerableClassBuilder(sourceNode, enclosingMethod, generatorItemType, replacer); var getEnumeratorBuilder = SetUpGetEnumeratorMethodBuilder(sourceNode, builder, generatorItemType, replacer); enclosingMethod.DeclaringType.Members.Add(builder.ClassDefinition); return(new GeneratorSkeleton(builder, getEnumeratorBuilder, generatorItemType, replacer)); }
public GeneratorMethodProcessor(CompilerContext context, InternalMethod method) { _labels = new List <LabelStatement>(); _mapping = new Hashtable(); _generator = method; var skeleton = My <GeneratorSkeletonBuilder> .Instance.SkeletonFor(method); _generatorItemType = skeleton.GeneratorItemType; _enumerable = skeleton.GeneratorClassBuilder; _getEnumeratorBuilder = skeleton.GetEnumeratorBuilder; _methodToEnumerableMapper = skeleton.GeneratorClassTypeReplacer; Initialize(context); }
public static IType MapTypeInMethodContext(IType type, Ast.Method method, out GeneratorTypeReplacer mapper) { if (type.GenericInfo != null && type.ConstructedInfo == null) { var td = method.GetAncestor <Ast.TypeDefinition>(); var allGenParams = td.GenericParameters.Concat(method.GenericParameters) .Select(gp => (IGenericParameter)gp.Entity).ToArray(); mapper = new GeneratorTypeReplacer(); foreach (var genParam in type.GenericInfo.GenericParameters) { mapper.Replace(genParam, allGenParams.First(gp => gp.Name.Equals(genParam.Name))); } return(mapper.MapType(type)); } mapper = null; return(type); }