Exemple #1
0
        override public void OnMethod(Method node)
        {
            _references.Clear();
            _mappings.Clear();
            _currentMethod     = node;
            _sharedLocalsClass = null;
            _closureDepth      = 0;

            Visit(node.Body);

            CreateSharedLocalsClass();
            if (null != _sharedLocalsClass)
            {
                //node.DeclaringType.Members.Add(_sharedLocalsClass);
                TypeSystemServices.AddCompilerGeneratedType(_sharedLocalsClass);
                Map();
            }
        }
        void CreateEnumerator()
        {
#if NET_2_0
            IType abstractEnumeratorType =
                TypeSystemServices.Map(typeof(Boo.Lang.GenericGeneratorEnumerator <>)).
                GenericTypeDefinitionInfo.MakeGenericType(new IType[] { _generatorItemType });
#else
            IType abstractEnumeratorType = TypeSystemServices.Map(typeof(Boo.Lang.AbstractGeneratorEnumerator));
#endif

            _state = NameResolutionService.ResolveField(abstractEnumeratorType, "_state");
            _yield = NameResolutionService.ResolveMethod(abstractEnumeratorType, "Yield");

            _enumerator             = CodeBuilder.CreateClass(_enumerable.ClassDefinition.Name + "_Enumerator");
            _enumerator.LexicalInfo = this.LexicalInfo;
            _enumerator.AddBaseType(abstractEnumeratorType);
            _enumerator.AddBaseType(TypeSystemServices.IEnumeratorType);

            CreateEnumeratorConstructor();
            CreateMoveNext();

            //_enumerable.ClassDefinition.Members.Add(_enumerator.ClassDefinition);
            TypeSystemServices.AddCompilerGeneratedType(_enumerator.ClassDefinition);
        }