Esempio n. 1
0
 public GeneratorSkeleton(BooClassBuilder generatorBuilder, BooMethodBuilder getEnumeratorBuilder, IType generatorItemType, GeneratorTypeReplacer generatorClassTypeReplacer)
 {
     GeneratorClassBuilder      = generatorBuilder;
     GeneratorItemType          = generatorItemType;
     GetEnumeratorBuilder       = getEnumeratorBuilder;
     GeneratorClassTypeReplacer = generatorClassTypeReplacer;
 }
Esempio n. 2
0
        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;
        }
Esempio n. 3
0
        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);
        }
Esempio n. 5
0
 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);
 }