コード例 #1
0
        private IGate EvaluateRecurse(ICodeLabelEvaluator cg, IGate g)
        {
            if (g.Type == GateType.Input)
            {
                if (g is LabelGate)
                {
                    var lg = (LabelGate)g;
                    lg.Label.Evaluate(cg);
                }
            }
            else
            {
                var list = new List <IGate>();
                foreach (var i in g.GetInputs())
                {
                    var u = i;
                    var l = _gc.GetScheduledLabel(u);
                    if (null != l)
                    {
                        u = l;
                    }
                    else
                    {
                        u = EvaluateRecurse(cg, u);
                    }

                    list.Add(u);
                }

                g = SMG.Common.Gate.Compose(g.Type, list);
            }

            return(g);
        }