Inheritance: MidContainerDecl
Exemple #1
0
 public MidPipelineRef(
     MidPipelineDecl decl,
     MidMemberTerm memberTerm)
 {
     _decl       = decl;
     _memberTerm = memberTerm;
 }
Exemple #2
0
        private FieldInfo CreateField(
            MidPipelineDecl pipeline,
            MidElementDecl element,
            MidAttributeDecl attribute,
            MidFieldDecl field)
        {
            var midExp = _exps.FieldRef(
                attribute.Range,
                _exps.AttributeRef(attribute.Range, attribute),
                field);

            var name = _identifiers.unique(
                string.Format("{0}_{1}", attribute.Name, field.Name));

            var newAttr = element.CacheAttr(
                midExp,
                field.Type);

            newAttr.TrySetName(name, attribute.Range);

            return(new FieldInfo {
                AttrDecl = newAttr,
                FieldDecl = field
            });
        }
Exemple #3
0
 public void ApplyToPipeline(MidPipelineDecl pipeline)
 {
     foreach (var e in pipeline.Elements)
     {
         ApplyToElement(e);
     }
 }
Exemple #4
0
 public void CollectPipelineInfo(MidPipelineDecl pipeline)
 {
     foreach (var e in pipeline.Elements)
     {
         CollectElementInfo(e);
     }
 }
Exemple #5
0
 public static void UnmarkOutputs(MidPipelineDecl pipeline)
 {
     foreach (var e in pipeline.Elements)
     {
         UnmarkOutputs(e);
     }
 }
Exemple #6
0
        public void Collect(
            MidPipelineDecl pipeline,
            MidElementDecl element,
            MidAttributeDecl attribute)
        {
            if (!attribute.IsOutput)
            {
                return;
            }

            if (!(attribute.Type is MidStructRef))
            {
                return;
            }

            // Unmark the attribute as an output...
            attribute.IsOutput = false;

            var structType = (MidStructRef)attribute.Type;

            AttributeInfo attrInfo;

            attrInfo.AttrDecl = attribute;
            attrInfo.Fields   = (from f in structType.Fields
                                 select CreateField(pipeline, element, attribute, f)).ToArray();

            _replacePass._attrInfos[attribute] = attrInfo;
        }
Exemple #7
0
        public void ApplyToPipeline(MidPipelineDecl p)
        {
            _attributesToKeep.Clear();
            _mapOldToNew.Clear();
            _mapOldToWrapper.Clear();
            _attributeWrappersToKeep.Clear();

            // Find all the attributes worth keeping...
            CollectPipelineInfo(p);

            // Now go ahead and blow away all the old attributes,
            // replacing them with shiny new ones!!!

            _transform = new MidTransform(
                (e) => CleanupExp((dynamic)e));

            foreach (var e in p.Elements)
            {
                e.Clear();
            }

            foreach (var a in _attributesToKeep)
            {
                if (a.Exp != null)
                {
                    a.Exp = _transform.Transform(a.Exp);
                }

                var newAttr = MapOldToNew(a);
            }

            // We copy the attributes array, since otherwise
            // we end up mutating it by adding new attributes
            foreach (var e in p.Elements)
            {
                foreach (var a in e.Attributes.ToArray())
                {
                    _transform.ApplyToAttribute(a);
                }
            }
            foreach (var m in p.Methods)
            {
                if (m.Body != null)
                {
                    m.Body = _transform.Transform(m.Body);
                }
            }

            foreach (var e in p.Elements)
            {
                var oldWrappers = e.AttributeWrappers.ToArray();

                var newWrappers = (from w in oldWrappers
                                   where _attributeWrappersToKeep.Contains(w)
                                   select w).ToArray();

                e.AttributeWrappers = newWrappers;
            }
        }
Exemple #8
0
 public MidFacetDecl(
     IBuilder parent,
     MidEmitContext context,
     MidEmitEnv env,
     MidPipelineDecl parentPipeline,
     MidPipelineRef originalPipeline)
     : base(parent, context, env)
 {
     _parentPipeline   = parentPipeline;
     _originalPipeline = originalPipeline;
 }
Exemple #9
0
        public void SimplifyPipeline(MidPipelineDecl pipeline)
        {
            foreach (var e in pipeline.Elements)
            {
                SimplifyElement(e);
            }

            foreach (var m in pipeline.Methods)
            {
                SimplifyMethod(m);
            }
        }
Exemple #10
0
        public static void Dump(
            this MidPipelineDecl pipeline,
            Span span)
        {
            span.WriteLine("pipeline {0} {{", pipeline.Name);
            var inner = span.IndentSpan();

            foreach (var e in pipeline.Elements)
            {
                e.Dump(inner);
            }
            span.WriteLine("}");
        }
        public void ApplyToPipeline( MidPipelineDecl p )
        {
            _attributesToKeep.Clear();
            _mapOldToNew.Clear();
            _mapOldToWrapper.Clear();
            _attributeWrappersToKeep.Clear();

            // Find all the attributes worth keeping...
            CollectPipelineInfo( p );

            // Now go ahead and blow away all the old attributes,
            // replacing them with shiny new ones!!!

            _transform = new MidTransform(
                ( e ) => CleanupExp( (dynamic) e ) );

            foreach( var e in p.Elements )
                 e.Clear();

            foreach( var a in _attributesToKeep )
            {
                if( a.Exp != null )
                    a.Exp = _transform.Transform( a.Exp );

                var newAttr = MapOldToNew( a );
            }

            // We copy the attributes array, since otherwise
            // we end up mutating it by adding new attributes
            foreach( var e in p.Elements )
                foreach( var a in e.Attributes.ToArray() )
                    _transform.ApplyToAttribute( a );
            foreach( var m in p.Methods )
            {
                if( m.Body != null )
                    m.Body = _transform.Transform( m.Body );
            }

            foreach( var e in p.Elements )
            {
                var oldWrappers = e.AttributeWrappers.ToArray();

                var newWrappers = (from w in oldWrappers
                                   where _attributeWrappersToKeep.Contains(w)
                                   select w).ToArray();

                e.AttributeWrappers = newWrappers;
            }
        }
Exemple #12
0
        private MidMemberDecl EmitMemberDeclImpl(
            MidModuleDecl midModule,
            IResPipelineDecl resPipeline,
            MidEmitEnv outerEnv)
        {
            var midPipeline = new MidPipelineDecl(
                midModule,
                resPipeline.Name,
                this,
                outerEnv,
                resPipeline.Range);

            midPipeline.IsAbstract = (resPipeline.ConcretenessMode == ResMemberConcretenessMode.Abstract);
            midPipeline.IsPrimary  = (resPipeline.MixinMode == ResMixinMode.Primary);

            MidEmitEnv env = new MidGlobalEmitEnv(outerEnv, outerEnv.Context);

            env.Insert(
                resPipeline.ThisParameter,
                (SourceRange r) =>
                new MidLit <object>(r, null, new MidPipelineRef(midPipeline, null)));
            midPipeline.Env = env;

            midPipeline.AddBuildAction(() =>
            {
                foreach (var resFacet in resPipeline.Facets)
                {
                    var originalPipeline = (MidPipelineRef)EmitMemberTerm(
                        resFacet.OriginalPipeline.MemberTerm,
                        env);
                    var midFacet = midPipeline.AddFacet(
                        originalPipeline);

                    foreach (var resLine in resFacet.MemberLines)
                    {
                        var resDecl = resLine.EffectiveDecl;
                        var midDecl = EmitMemberDecl(midFacet, resDecl, env);
                        midPipeline.InsertMemberDecl(resDecl, midDecl);
                    }
                    midFacet.DoneBuilding();
                }
            });
            midPipeline.DoneBuilding();

            midModule.AddPipeline(midPipeline);
            midModule.InsertMemberDecl(resPipeline, midPipeline);
            return(midPipeline);
        }
        public void Collect(
            MidPipelineDecl pipeline,
            MidElementDecl element,
            MidAttributeDecl attribute)
        {
            if (!attribute.IsOutput)
                return;

            if (!(attribute.Type is MidStructRef))
                return;

            // Unmark the attribute as an output...
            attribute.IsOutput = false;

            var structType = (MidStructRef)attribute.Type;

            AttributeInfo attrInfo;
            attrInfo.AttrDecl = attribute;
            attrInfo.Fields = (from f in structType.Fields
                               select CreateField(pipeline, element, attribute, f)).ToArray();

            _replacePass._attrInfos[attribute] = attrInfo;
        }
 public static void UnmarkOutputs( MidPipelineDecl pipeline )
 {
     foreach( var e in pipeline.Elements )
         UnmarkOutputs( e );
 }
 public void ApplyToPipeline(MidPipelineDecl pipeline)
 {
     foreach (var e in pipeline.Elements)
         ApplyToElement(e);
 }
 public void AddPipeline(MidPipelineDecl pipeline)
 {
     _pipelines.Add(pipeline);
 }
 public MidPipelineRef(
     MidPipelineDecl decl,
     MidMemberTerm memberTerm)
 {
     _decl = decl;
     _memberTerm = memberTerm;
 }
 public MidFacetDecl(
     IBuilder parent,
     MidEmitContext context,
     MidEmitEnv env,
     MidPipelineDecl parentPipeline,
     MidPipelineRef originalPipeline)
     : base(parent, context, env)
 {
     _parentPipeline = parentPipeline;
     _originalPipeline = originalPipeline;
 }
Exemple #19
0
 public void AddPipeline(MidPipelineDecl pipeline)
 {
     _pipelines.Add(pipeline);
 }
        private FieldInfo CreateField(
            MidPipelineDecl pipeline,
            MidElementDecl element,
            MidAttributeDecl attribute,
            MidFieldDecl field)
        {
            var midExp = _exps.FieldRef(
                    attribute.Range,
                    _exps.AttributeRef( attribute.Range, attribute ),
                    field );

            var name = _identifiers.unique(
                string.Format( "{0}_{1}", attribute.Name, field.Name ) );

            var newAttr = element.CacheAttr(
                midExp,
                field.Type);
            newAttr.TrySetName(name, attribute.Range);

            return new FieldInfo{
                AttrDecl = newAttr,
                FieldDecl = field};
        }
        public void SimplifyPipeline(MidPipelineDecl pipeline)
        {
            foreach (var e in pipeline.Elements)
                SimplifyElement(e);

            foreach (var m in pipeline.Methods)
                SimplifyMethod(m);
        }
 public void CollectPipelineInfo( MidPipelineDecl pipeline )
 {
     foreach( var e in pipeline.Elements )
         CollectElementInfo( e );
 }