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); }