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); }
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); }