Exemple #1
0
        protected Block getExpandedBlock(Arguments arguments)
        {
            var region = new Region();

            using var popper = new RegionPopper(region, "invoke expanded");
            items.Must().HaveCountOfExactly(2).OrThrow(LOCATION, () => "There must be exactly two functions");
            var item0       = items[0];
            var item1       = items[1];
            var lambda0     = item0.Lambda;
            var lambda1     = item1.Lambda;
            var parameters0 = lambda0.Parameters;
            var parameters1 = lambda1.Parameters;

            parameters0.AnyComparisands.Must().BeTrue().OrThrow(LOCATION, () => "The first function must have a comparisand");

            var values = parameters1.GetArguments(arguments);

            popper.Push();

            var(checkExpression, checkVariable) = firstComparisand(lambda0.Parameters);
            var expander = new Expander(functionName, item1.Lambda.Block, checkExpression, checkVariable, lambda0.Block, region);

            SetArguments(values);
            foreach (var parameter in parameters1.GetParameters())
            {
                expander.AddParameter(parameter);
            }

            var block = expander.Expand();

            return(block);
        }
Exemple #2
0
        Block getExpandedBlock(Arguments arguments)
        {
            var region = new Region();

            using (var popper = new RegionPopper(region, "invoke expanded"))
            {
                Assert(items.Count == 2, LOCATION, "There must be exactly two functions");
                var item0       = items[0];
                var item1       = items[1];
                var lambda0     = item0.Lambda;
                var lambda1     = item1.Lambda;
                var parameters0 = lambda0.Parameters;
                var parameters1 = lambda1.Parameters;
                Assert(parameters0.AnyComparisands, LOCATION, "The first function must have a comparisand");

                var values = parameters1.GetArguments(arguments);
                popper.Push();

                (var checkExpression, var checkVariable) = firstComparisand(lambda0.Parameters);
                var expander = new Expander(functionName, item1.Lambda.Block, checkExpression, checkVariable, lambda0.Block, region);

                SetArguments(values);
                foreach (var parameter in parameters1.GetParameters())
                {
                    expander.AddParameter(parameter);
                }

                var block = expander.Expand();
                return(block);
            }
        }