private void CreateSharedLocalsClass() { _shared.Clear(); CollectSharedLocalEntities(_currentMethod.Locals); CollectSharedLocalEntities(_currentMethod.Parameters); if (_shared.Count > 0) { BooClassBuilder builder = CodeBuilder.CreateClass(Context.GetUniqueName(_currentMethod.Name, "locals")); builder.Modifiers |= TypeMemberModifiers.Internal; builder.AddBaseType(TypeSystemServices.ObjectType); var genericsSet = new HashSet <string>(); var replacer = new GeneratorTypeReplacer(); foreach (ILocalEntity local in _shared) { CheckTypeForGenericParams(local.Type, genericsSet, builder, replacer); Field field = builder.AddInternalField( string.Format("${0}", local.Name), replacer.MapType(local.Type)); _mappings[local] = (IField)field.Entity; } builder.AddConstructor().Body.Add( CodeBuilder.CreateSuperConstructorInvocation(TypeSystemServices.ObjectType)); _sharedLocalsClass = builder.ClassDefinition; } }
private void AddToMoveNextMethod(Local local) { var newLocal = new InternalLocal(local, _methodToStateMachineMapper.MapType(((InternalLocal)local.Entity).Type)); _entityMapper.Add(local.Entity, newLocal); local.Entity = newLocal; _moveNext.Method.Locals.Add(local); }
private void OnTypeReference(TypeReference node) { var type = (IType)node.Entity; node.Entity = _replacer.MapType(type); }