public RG_EdgeTU_RX(MG.RG_EdgeNode rg_EdgeNode, preCH preCH_in) { var memANodeRX = (MGRX.MemANodeRX)rg_EdgeNode.memAVT.children[0]; // todo proper field in MemAVTNode - hard cast doubles as Assert memANodeRX.ACMembTypingCallback = () => preCH_in.PayT; // for now, and for lazyness: no extra TU_RX for MemARX var memA_preCH_out = new deferred_preCH( () => { return(new TTuple { isMulti = false, // todo PayT = SGA.MembType_Exact(preCH_in.PayT, memANodeRX.name) }); }, dataSrc: null // not used in RX-case ); // todo Assign creates a new Column ( thus distinct preCH ) in the properly translated version // the proper preCH out is that of AssignVT - but since types are identical, and that's all we care for here : this could simply be dropped, but i need the assignVTNode for scoping if (rg_EdgeNode.assignVT == null) { preCH_out = memA_preCH_out; } else { assignVTNode = new Assign_VBXTU(preCH_in, rg_EdgeNode.assignVT); preCH_out = assignVTNode.preCH_out; } }
public preCH_deltaScope addRef(string name, out preCH pCH_out) // this needs a more descriptive name { try { pCH_out = ownLL_head.findNode(name).pay; return(this); } catch (LL_Exception) { } try { pCH_out = origLL_head.findNode(name).pay; return(new preCH_deltaScope(origScope, origLL_head, ownLL_head, externals.chain(name, pCH_out))); } catch (LL_Exception) { } throw new ScopeException(); }
public TestSG_TU(MG.SG_EdgeNode edgeNode, preCH preCH_in) { if (edgeNode.typefilter != null) { typefilter = new TypeFilterVBX_TU(preCH_in, edgeNode.typefilter); pre_CH_out = typefilter.preCH_out; } else { pre_CH_out = new deferred_adapter_preCH(() => preCH_in.CH); } // plug in delegate in both cases }
public PrimitveStepTU_RX(preCH preCH_in, MGRX.PrimitiveStepNode prim_step_node) { // pretty fucky - copy and paste job from the nonRX variant - needed though to plug in the RX constructors for child TUs this.primtv_step_node = prim_step_node; // var primaryNN = primtv_step_node.children[0]; if (primaryNN is MG.SG_EdgeNode) { primaryTU = new SG_EdgeTU(preCH_in, (MG.SG_EdgeNode)primaryNN); primary_preCH_out = ((SG_EdgeTU)primaryTU).preCH_out; } else if (primaryNN is MG.MemANode) { var MemTU = new MemA_VBX_TU_RX(preCH_in, (MGRX.MemANodeRX)primaryNN); // type - patch I primaryTU = MemTU; primary_preCH_out = MemTU.preCH_out; } else if (primaryNN is MG.FilterNode) { var filterTU = new FilterTU(preCH_in, (MG.FilterNode)primaryNN); primaryTU = filterTU; primary_preCH_out = filterTU.preCH_out; } else if (primaryNN is MG.FanNode) { var fanTU = new FanTU(preCH_in, (MG.FanNode)primaryNN); primaryTU = fanTU; primary_preCH_out = fanTU.pRHS; } else { throw new Exception(); // grammar changed or parser bug } preCH current_preCH_out = primary_preCH_out; foreach (var asgn_node in primtv_step_node.assigns) { var asgn_TU = new Assign_VBXTU(current_preCH_out, asgn_node); assigns.Add(asgn_TU); current_preCH_out = asgn_TU.preCH_out; } preCH_out = current_preCH_out; }
public FanElemRX_TU(MG.FanElemNode fanElemNode, preCH preCH_in) { var _subTUs = new List <TranslationUnit>(); var loop_preCH = preCH_in; foreach (NamedNode nn in fanElemNode.children) { if (nn is MG.RG_EdgeNode) // and thus implicitly generated by RG_Edge_RX, atm it reuses the normal RG_EdgeNode { var rg_edgeTU = new RG_EdgeTU_RX((MG.RG_EdgeNode)nn, loop_preCH); _subTUs.Add(rg_edgeTU); loop_preCH = rg_edgeTU.preCH_out; } else { throw new NotImplementedException(); } } preCH_out = loop_preCH; subTUs = _subTUs.ToArray(); }
public MemA_VBX_TU_RX(preCH preCH_in, MGRX.MemANodeRX memA_node_rx) : base(preCH_in, memA_node_rx) { memA_node_rx.ACMembTypingCallback = () => preCH_in.PayT; }
} // the readonlys need a detour over constructor public preCH_deltaScope decl(string name, preCH pre_ch) => new preCH_deltaScope( origScope, origLL_head, ownLL_head.chain(name, pre_ch), externals);