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;
            }
        }
Esempio n. 2
0
 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;
 }
Esempio n. 7
0
        } // 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);