Ejemplo n.º 1
0
        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;
            }
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        private void OnTypeReference(TypeReference node)
        {
            var type = (IType)node.Entity;

            node.Entity = _replacer.MapType(type);
        }