public MidPipelineRef( MidPipelineDecl decl, MidMemberTerm memberTerm) { _decl = decl; _memberTerm = memberTerm; }
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 ApplyToPipeline(MidPipelineDecl pipeline) { foreach (var e in pipeline.Elements) { ApplyToElement(e); } }
public void CollectPipelineInfo(MidPipelineDecl pipeline) { foreach (var e in pipeline.Elements) { CollectElementInfo(e); } }
public static void UnmarkOutputs(MidPipelineDecl pipeline) { foreach (var e in pipeline.Elements) { UnmarkOutputs(e); } }
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 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; } }
public MidFacetDecl( IBuilder parent, MidEmitContext context, MidEmitEnv env, MidPipelineDecl parentPipeline, MidPipelineRef originalPipeline) : base(parent, context, env) { _parentPipeline = parentPipeline; _originalPipeline = originalPipeline; }
public void SimplifyPipeline(MidPipelineDecl pipeline) { foreach (var e in pipeline.Elements) { SimplifyElement(e); } foreach (var m in pipeline.Methods) { SimplifyMethod(m); } }
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; } }
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; }
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 ); }