Beispiel #1
0
        public override object Generate(FunctionExpression expr, object[] inputs)
        {
            var node = new SSAGenerator.NodeOperator();

            node.Expression = expr;
            node.Type       = Type;

            var input    = (SSAGenerator.SymbolTable)inputs[0];
            var retTable = new SSAGenerator.SymbolTable();

            foreach (var kv in input.Tables)
            {
                if (!(kv.Value.Value is SSAGenerator.Value))
                {
                    throw new InvalidOperationException(expr.Line);
                }

                node.Inputs.Add(kv.Value.Value as SSAGenerator.Value);
            }

            int ind = 0;

            foreach (var table in input.Tables)
            {
                var ret = new SSAGenerator.Value();
                ret.Index     = ind;
                ret.Generator = node;
                node.Outputs.Add(ret);
                retTable.Tables.Add(table.Key, new SSAGenerator.Attribute(ret));
                ind++;
            }
            return(retTable);
        }
Beispiel #2
0
        public override object Generate(FunctionExpression expr, object[] inputs)
        {
            var node = new SSAGenerator.NodeOperator();

            node.Expression = expr;
            node.Type       = Type;

            var ret = new SSAGenerator.Value();

            ret.Index     = 0;
            ret.Generator = node;

            for (int i = 0; i < Arguments.Length; i++)
            {
                node.Inputs.Add((SSAGenerator.Value)inputs[i]);
            }
            node.Outputs.Add(ret);
            return(ret);
        }