示例#1
0
        /// <summary>
        /// Create the template output
        /// </summary>
        public virtual string TransformText()
        {
            this.Write("using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing Toe.S" +
                       "PIRV.Instructions;\r\nusing Toe.SPIRV.Reflection.Types;\r\nusing Toe.SPIRV.Spv;\r\n\r\nn" +
                       "amespace Toe.SPIRV.Reflection.Nodes\r\n{\r\n    public partial class ");

            #line 16 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"
            this.Write(this.ToStringHelper.ToStringWithCulture(name));

            #line default
            #line hidden
            this.Write(" : ");

            #line 16 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"
            this.Write(this.ToStringHelper.ToStringWithCulture(baseClass));

            #line default
            #line hidden

            #line 16 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"
            this.Write(this.ToStringHelper.ToStringWithCulture(_instruction.HasDefaultExit?", INodeWithNext":""));

            #line default
            #line hidden
            this.Write("\r\n    {\r\n        public ");

            #line 18 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"
            this.Write(this.ToStringHelper.ToStringWithCulture(name));

            #line default
            #line hidden
            this.Write("()\r\n        {\r\n        }\r\n");

            #line 21 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"

            {
            #line default
            #line hidden
                this.Write("\r\n        public ");

            #line 25 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(name));

            #line default
            #line hidden
                this.Write("(");

            #line 25 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(string.Join(", ", _operands.Concat(new KeyValuePair <string, string>("debugName", "string")).Select(_ => $"{_.Value} {ViewUtils.ToVarName(_.Key)}"))));

            #line default
            #line hidden
                this.Write(" = null)\r\n        {\r\n");

            #line 27 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"

                foreach (var op in _operands)
                {
                    if (op.Value.StartsWith("IList<") || op.Value.StartsWith("IEnumerable<"))
                    {
            #line default
            #line hidden
                        this.Write("            if (");

            #line 33 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"
                        this.Write(this.ToStringHelper.ToStringWithCulture(ViewUtils.ToVarName(op.Key)));

            #line default
            #line hidden
                        this.Write(" != null) { foreach (var node in ");

            #line 33 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"
                        this.Write(this.ToStringHelper.ToStringWithCulture(ViewUtils.ToVarName(op.Key)));

            #line default
            #line hidden
                        this.Write(") this.");

            #line 33 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"
                        this.Write(this.ToStringHelper.ToStringWithCulture(op.Key));

            #line default
            #line hidden
                        this.Write(".Add(node); }\r\n");

            #line 34 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"
                    }
                    else
                    {
            #line default
            #line hidden
                        this.Write("            this.");

            #line 39 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"
                        this.Write(this.ToStringHelper.ToStringWithCulture(op.Key));

            #line default
            #line hidden
                        this.Write(" = ");

            #line 39 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"
                        this.Write(this.ToStringHelper.ToStringWithCulture(ViewUtils.ToVarName(op.Key)));

            #line default
            #line hidden
                        this.Write(";\r\n");

            #line 40 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"
                    }
                }


            #line default
            #line hidden
                this.Write("            DebugName = debugName;\r\n        }\r\n");

            #line 46 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"
            }


            #line default
            #line hidden
            this.Write("\r\n        public override Op OpCode => Op.");

            #line 50 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"
            this.Write(this.ToStringHelper.ToStringWithCulture(_instruction.Name));

            #line default
            #line hidden
            this.Write(";\r\n");

            #line 51 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"

            if (_instruction.HasDefaultExit)
            {
            #line default
            #line hidden
                this.Write(@"
        /// <summary>
        /// Next operation in sequence
        /// </summary>
        public ExecutableNode Next { get; set; }

        public override ExecutableNode GetNext()
        {
            return Next;
        }

        public T Then<T>(T node) where T: ExecutableNode
        {
            Next = node;
            return node;
        }
");

            #line 71 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"
            }
            foreach (var op in _instruction.Operands)
            {
                switch (op.Class)
                {
                case SpirvOperandClassification.Type:


            #line default
            #line hidden
                    this.Write("\r\n        public SpirvTypeBase ");

            #line 80 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(op.Name));

            #line default
            #line hidden
                    this.Write(" { get; set; }\r\n");

            #line 81 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"

                    break;

                case SpirvOperandClassification.Exit:
                case SpirvOperandClassification.Input:


            #line default
            #line hidden
                    this.Write("\r\n        public ");

            #line 87 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(GetNodeType(op)));

            #line default
            #line hidden
                    this.Write(" ");

            #line 87 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(op.Name));

            #line default
            #line hidden
                    this.Write(" { get; set; }\r\n");

            #line 88 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"

                    break;

                case SpirvOperandClassification.RepeatedInput:


            #line default
            #line hidden
                    this.Write("\r\n        public IList<");

            #line 93 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(GetNodeType(op)));

            #line default
            #line hidden
                    this.Write("> ");

            #line 93 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(op.Name));

            #line default
            #line hidden
                    this.Write(" { get; private set; } = new PrintableList<");

            #line 93 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(GetNodeType(op)));

            #line default
            #line hidden
                    this.Write(">();\r\n");

            #line 94 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"

                    break;

                default:
                    if (op.Quantifier == SpirvOperandQuantifier.Repeated)
                    {
            #line default
            #line hidden
                        this.Write("\r\n        public ");

            #line 101 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"
                        this.Write(this.ToStringHelper.ToStringWithCulture(GetPropertyType(op)));

            #line default
            #line hidden
                        this.Write(" ");

            #line 101 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"
                        this.Write(this.ToStringHelper.ToStringWithCulture(op.Name));

            #line default
            #line hidden
                        this.Write(" { get; private set; } = new ");

            #line 101 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"
                        this.Write(this.ToStringHelper.ToStringWithCulture(GetPropertyType(op).Replace("IList<", "List<")));

            #line default
            #line hidden
                        this.Write("();\r\n");

            #line 102 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"
                    }
                    else
                    {
            #line default
            #line hidden
                        this.Write("\r\n        public ");

            #line 108 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"
                        this.Write(this.ToStringHelper.ToStringWithCulture(GetPropertyType(op)));

            #line default
            #line hidden
                        this.Write(" ");

            #line 108 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"
                        this.Write(this.ToStringHelper.ToStringWithCulture(op.Name));

            #line default
            #line hidden
                        this.Write(" { get; set; }\r\n");

            #line 109 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"
                    }
                    break;
                }
            }

            if (_instruction.IdResultType != null)
            {
            #line default
            #line hidden
                this.Write("\r\n        public SpirvTypeBase ResultType { get; set; }\r\n\r\n        public overrid" +
                           "e SpirvTypeBase GetResultType()\r\n        {\r\n            return ResultType;\r\n    " +
                           "    }\r\n");

            #line 125 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"
            }

            if (_instruction.Operands.Any(op => op.Class == SpirvOperandClassification.Input || op.Class == SpirvOperandClassification.RepeatedInput))
            {
            #line default
            #line hidden
                this.Write("\r\n        public override IEnumerable<Node> GetInputNodes()\r\n        {\r\n");

            #line 134 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"

                foreach (var op in _instruction.Operands)
                {
                    if (op.Class == SpirvOperandClassification.Input)
                    {
            #line default
            #line hidden
                        this.Write("                yield return ");

            #line 140 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"
                        this.Write(this.ToStringHelper.ToStringWithCulture(op.Name));

            #line default
            #line hidden
                        this.Write(";\r\n");

            #line 141 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"
                    }
                    else if (op.Class == SpirvOperandClassification.RepeatedInput)
                    {
            #line default
            #line hidden
                        this.Write("                for (var index = 0; index < ");

            #line 146 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"
                        this.Write(this.ToStringHelper.ToStringWithCulture(op.Name));

            #line default
            #line hidden
                        this.Write(".Count; index++)\r\n                {\r\n                    yield return ");

            #line 148 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"
                        this.Write(this.ToStringHelper.ToStringWithCulture(op.Name));

            #line default
            #line hidden
                        this.Write("[index];\r\n                }\r\n");

            #line 150 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"
                    }
                }


            #line default
            #line hidden
                this.Write("        }\r\n");

            #line 155 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"
            }


            #line default
            #line hidden
            this.Write("\r\n        public ");

            #line 159 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"
            this.Write(this.ToStringHelper.ToStringWithCulture(name));

            #line default
            #line hidden
            this.Write(@" WithDecoration(Spv.Decoration decoration)
        {
            AddDecoration(decoration);
            return this;
        }

        public override void SetUp(Instruction op, SpirvInstructionTreeBuilder treeBuilder)
        {
            base.SetUp(op, treeBuilder);
            SetUp((");

            #line 168 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"
            this.Write(this.ToStringHelper.ToStringWithCulture(opname));

            #line default
            #line hidden
            this.Write(")op, treeBuilder);\r\n        }\r\n\r\n        public ");

            #line 171 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"
            this.Write(this.ToStringHelper.ToStringWithCulture(name));

            #line default
            #line hidden
            this.Write(" SetUp(Action<");

            #line 171 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"
            this.Write(this.ToStringHelper.ToStringWithCulture(name));

            #line default
            #line hidden
            this.Write("> setup)\r\n        {\r\n            setup(this);\r\n            return this;\r\n        " +
                       "}\r\n\r\n        private void SetUp(");

            #line 177 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"
            this.Write(this.ToStringHelper.ToStringWithCulture(opname));

            #line default
            #line hidden
            this.Write(" op, SpirvInstructionTreeBuilder treeBuilder)\r\n        {\r\n");

            #line 179 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"

            if (_instruction.IdResultType != null)
            {
            #line default
            #line hidden
                this.Write("            ResultType = treeBuilder.ResolveType(op.IdResultType);\r\n");

            #line 184 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"
            }

            foreach (var op in _instruction.Operands)
            {
                switch (op.Class)
                {
                case SpirvOperandClassification.Type:


            #line default
            #line hidden
                    this.Write("            ");

            #line 193 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(op.Name));

            #line default
            #line hidden
                    this.Write(" = treeBuilder.ResolveType(op.");

            #line 193 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(op.Name));

            #line default
            #line hidden
                    this.Write(");\r\n");

            #line 194 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"

                    break;

                case SpirvOperandClassification.Exit:
                case SpirvOperandClassification.Input:


            #line default
            #line hidden
                    this.Write("            ");

            #line 199 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(op.Name));

            #line default
            #line hidden
                    this.Write(" = ");

            #line 199 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(CastNodeType(op)));

            #line default
            #line hidden
                    this.Write("treeBuilder.GetNode(op.");

            #line 199 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(op.Name));

            #line default
            #line hidden
                    this.Write(");\r\n");

            #line 200 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"

                    break;

                case SpirvOperandClassification.RepeatedInput:


            #line default
            #line hidden
                    this.Write("            ");

            #line 204 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(op.Name));

            #line default
            #line hidden
                    this.Write(" = treeBuilder.GetNodes(op.");

            #line 204 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(op.Name));

            #line default
            #line hidden
                    this.Write(");\r\n");

            #line 205 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"

                    break;

                default:
                    if (op.Quantifier == SpirvOperandQuantifier.Repeated)
                    {
            #line default
            #line hidden
                        this.Write("            foreach (var item in op.");

            #line 211 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"
                        this.Write(this.ToStringHelper.ToStringWithCulture(op.Name));

            #line default
            #line hidden
                        this.Write(") { ");

            #line 211 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"
                        this.Write(this.ToStringHelper.ToStringWithCulture(op.Name));

            #line default
            #line hidden
                        this.Write(".Add(treeBuilder.Parse(item)); }\r\n");

            #line 212 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"
                    }
                    else if (op.Kind == SpirvOperandKind.LiteralSpecConstantOpInteger)
                    {
            #line default
            #line hidden
                        this.Write("            ");

            #line 217 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"
                        this.Write(this.ToStringHelper.ToStringWithCulture(op.Name));

            #line default
            #line hidden
                        this.Write(" = treeBuilder.Parse(op.");

            #line 217 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"
                        this.Write(this.ToStringHelper.ToStringWithCulture(op.Name));

            #line default
            #line hidden
                        this.Write(");\r\n");

            #line 218 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"
                    }
                    else
                    {
            #line default
            #line hidden
                        this.Write("            ");

            #line 223 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"
                        this.Write(this.ToStringHelper.ToStringWithCulture(op.Name));

            #line default
            #line hidden
                        this.Write(" = op.");

            #line 223 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"
                        this.Write(this.ToStringHelper.ToStringWithCulture(op.Name));

            #line default
            #line hidden
                        this.Write(";\r\n");

            #line 224 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"
                    }
                    break;
                }
            }


            #line default
            #line hidden
            this.Write("            SetUpDecorations(op, treeBuilder);\r\n        }\r\n\r\n        /// <summary" +
                       ">Returns a string that represents the ");

            #line 233 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"
            this.Write(this.ToStringHelper.ToStringWithCulture(name));

            #line default
            #line hidden
            this.Write(" object.</summary>\r\n        /// <returns>A string that represents the ");

            #line 234 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"
            this.Write(this.ToStringHelper.ToStringWithCulture(name));

            #line default
            #line hidden
            this.Write(" object.</returns>\r\n        /// <filterpriority>2</filterpriority>\r\n        publi" +
                       "c override string ToString()\r\n        {\r\n            return $\"");

            #line 238 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"
            this.Write(this.ToStringHelper.ToStringWithCulture(name));

            #line default
            #line hidden
            this.Write("(");

            #line 238 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"
            this.Write(this.ToStringHelper.ToStringWithCulture(string.Join(", ", _operands.Concat(new KeyValuePair <string, string>("DebugName", "string")).Select(_ => $"{{{_.Key}}}"))));

            #line default
            #line hidden
            this.Write(")\";\r\n        }\r\n    }\r\n");

            #line 241 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"

            if (_instruction.HasDefaultEnter)
            {
            #line default
            #line hidden
                this.Write("\r\n    public static partial class INodeWithNextExtensionMethods\r\n    {\r\n        p" +
                           "ublic static ");

            #line 248 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(name));

            #line default
            #line hidden
                this.Write(" Then");

            #line 248 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(name));

            #line default
            #line hidden
                this.Write("(this INodeWithNext node");

            #line 248 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"

                foreach (var op in _instruction.Operands)
                {
                    this.Write(", ");
                    switch (op.Class)
                    {
                    case SpirvOperandClassification.Type:
                        this.Write($"SpirvTypeBase {ViewUtils.ToVarName(op.Name)}");
                        break;

                    case SpirvOperandClassification.Exit:
                    case SpirvOperandClassification.Input:
                        this.Write($"{GetNodeType(op)} {ViewUtils.ToVarName(op.Name)}");
                        break;

                    case SpirvOperandClassification.RepeatedInput:
                        this.Write($"IEnumerable<{GetNodeType(op)}> {ViewUtils.ToVarName(op.Name)}");
                        break;

                    default:
                        this.Write($"{GetPropertyType(op)} {ViewUtils.ToVarName(op.Name)}");
                        break;
                    }
                }


            #line default
            #line hidden
                this.Write(", string debugName = null)\r\n        {\r\n            return node.Then(new ");

            #line 271 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(name));

            #line default
            #line hidden
                this.Write("(");

            #line 271 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"

                {
                    var sep = "";
                    foreach (var op in _instruction.Operands)
                    {
                        this.Write(sep); sep = ", ";
                        this.Write(ViewUtils.ToVarName(op.Name));
                    }
                    this.Write($"{sep}debugName");
                }


            #line default
            #line hidden
                this.Write("));\r\n        }\r\n    }\r\n");

            #line 284 "C:\github\Toe.SPIRV\src\Toe.SPIRV.CodeGenerator\Views\NodeTemplate.tt"
            }


            #line default
            #line hidden
            this.Write("}");
            return(this.GenerationEnvironment.ToString());
        }