public void VisitInstructionNone(CilInstructionNone instruction)
 {
     if (instruction is LoadConstI40Instruction loadConstI40Instruction)
     {
         VisitLoadConstI40Intruction(loadConstI40Instruction);
     }
     else if (instruction is LoadConstI41Instruction loadConstI41Instruction)
     {
         VisitLoadConstI41Instruction(loadConstI41Instruction);
     }
     else if (instruction is LoadConstI42Instruction loadConstI42Instruction)
     {
         VisitLoadConstI42Instruction(loadConstI42Instruction);
     }
     else if (instruction is LoadConstI43Instruction loadConstI43Instruction)
     {
         VisitLoadConstI43Instruction(loadConstI43Instruction);
     }
     else if (instruction is LoadConstI44Instruction loadConstI44Instruction)
     {
         VisitLoadConstI44Instruction(loadConstI44Instruction);
     }
     else if (instruction is LoadConstI45Instruction loadConstI45Instruction)
     {
         VisitLoadConstI45Instruction(loadConstI45Instruction);
     }
     else if (instruction is LoadConstI46Instruction loadConstI46Instruction)
     {
         VisitLoadConstI46Instruction(loadConstI46Instruction);
     }
     else if (instruction is LoadConstI47Instruction loadConstI47Instruction)
     {
         VisitLoadConstI47Instruction(loadConstI47Instruction);
     }
     else if (instruction is LoadConstI48Instruction loadConstI48Instruction)
     {
         VisitLoadConstI48Instruction(loadConstI48Instruction);
     }
     else if (instruction is LoadConstI4M1Instruction loadConstI4M1Instruction)
     {
         VisitLoadConstI4M1Instruction(loadConstI4M1Instruction);
     }
     else if (instruction is ReturnInstruction returnInstruction)
     {
         VisitReturnInstruction(returnInstruction);
     }
     else if (instruction is DuplicateInstruction duplicateInstruction)
     {
         VisitDuplicateInstruction(duplicateInstruction);
     }
     else if (instruction is StoreArrayElementI2Instruction storeArrayElementI2Instruction)
     {
         VisitStoreArrayElementI2Instruction(storeArrayElementI2Instruction);
     }
     else if (instruction is LoadArrayElementRefInstruction loadArrayElementRefInstruction)
     {
         VisitLoadArrayElementRefInstruction(loadArrayElementRefInstruction);
     }
     else if (instruction is StoreLocal0Instruction storeLocal0Instruction)
     {
         VisitStoreLocal0Instruction(storeLocal0Instruction);
     }
     else if (instruction is StoreLocal1Instruction storeLocal1Instruction)
     {
         VisitStoreLocal1Instruction(storeLocal1Instruction);
     }
     else if (instruction is StoreLocal2Instruction storeLocal2Instruction)
     {
         VisitStoreLocal2Instruction(storeLocal2Instruction);
     }
     else if (instruction is StoreLocal3Instruction storeLocal3Instruction)
     {
         VisitStoreLocal3Instruction(storeLocal3Instruction);
     }
     else if (instruction is LoadLocal0Instruction loadLocal0Instruction)
     {
         VisitLoadLocal0Instruction(loadLocal0Instruction);
     }
     else if (instruction is LoadLocal1Instruction loadLocal1Instruction)
     {
         VisitLoadLocal1Instruction(loadLocal1Instruction);
     }
     else if (instruction is LoadLocal2Instruction loadLocal2Instruction)
     {
         VisitLoadLocal2Instruction(loadLocal2Instruction);
     }
     else if (instruction is LoadLocal3Instruction loadLocal3Instruction)
     {
         VisitLoadLocal3Instruction(loadLocal3Instruction);
     }
     else if (instruction is AddInstruction addInstruction)
     {
         VisitAddInstruction(addInstruction);
     }
     else if (instruction is ConvertI8Instruction convertI8Instruction)
     {
         VisitConvertI8Instruction(convertI8Instruction);
     }
     else if (instruction is ConvertU8Instruction convertU8Instruction)
     {
         VisitConvertU8Instruction(convertU8Instruction);
     }
     else if (instruction is ConvertR4Instruction convertR4Instruction)
     {
         VisitConvertR4Instruction(convertR4Instruction);
     }
     else if (instruction is ConvertR8Instruction convertR8Instruction)
     {
         VisitConvertR8Instruction(convertR8Instruction);
     }
     else if (instruction is ConvertRUnsignedInstruction convertRUnsignedInstruction)
     {
         VisitConvertRUnsignedInstruction(convertRUnsignedInstruction);
     }
     else if (instruction is SubtractInstruction subtractInstruction)
     {
         VisitSubtractInstruction(subtractInstruction);
     }
     else if (instruction is ConvertI1Instruction convertI1Instruction)
     {
         VisitConvertI1Instruction(convertI1Instruction);
     }
     else if (instruction is ConvertI2Instruction convertI2Instruction)
     {
         VisitConvertI2Instruction(convertI2Instruction);
     }
     else if (instruction is ConvertU1Instruction convertU1Instruction)
     {
         VisitConvertU1Instruction(convertU1Instruction);
     }
     else if (instruction is ConvertU2Instruction convertU2Instruction)
     {
         VisitConvertU2Instruction(convertU2Instruction);
     }
     else if (instruction is MultiplyInstruction multiplyInstruction)
     {
         VisitMultiplyInstruction(multiplyInstruction);
     }
     else if (instruction is DivideInstruction divideInstruction)
     {
         VisitDivideInstruction(divideInstruction);
     }
     else if (instruction is DivideUnsignedInstruction divideUnsignedInstruction)
     {
         VisitDivideUnsignedInstruction(divideUnsignedInstruction);
     }
     else if (instruction is RemainderInstruction remainderInstruction)
     {
         VisitRemainderInstruction(remainderInstruction);
     }
     else if (instruction is RemainderUnsignedInstruction remainderUnsignedInstruction)
     {
         VisitRemainderUnsignedInstruction(remainderUnsignedInstruction);
     }
     else if (instruction is CompareEqualInstruction compareEqualInstruction)
     {
         VisitCompareEqualInstruction(compareEqualInstruction);
     }
     else if (instruction is CompareGreaterThanInstruction compareGreaterThanInstruction)
     {
         VisitCompareGreaterThanInstruction(compareGreaterThanInstruction);
     }
     else if (instruction is CompareGreaterThanUnsignedInstruction compareGreaterThanUnsignedInstruction)
     {
         VisitCompareGreaterThanUnsignedInstruction(compareGreaterThanUnsignedInstruction);
     }
     else if (instruction is CompareLessThanInstruction compareLessThanInstruction)
     {
         VisitCompareLessThanInstruction(compareLessThanInstruction);
     }
     else if (instruction is CompareLessThanUnsignedInstruction compareLessThanUnsignedInstruction)
     {
         VisitCompareLessThanUnsignedInstruction(compareLessThanUnsignedInstruction);
     }
     else if (instruction is AndInstruction andInstruction)
     {
         VisitAndInstruction(andInstruction);
     }
     else if (instruction is OrInstruction orInstruction)
     {
         VisitOrInstruction(orInstruction);
     }
     else if (instruction is PopInstruction popInstruction)
     {
         VisitPopInstruction(popInstruction);
     }
     else if (instruction is XorInstruction xorInstruction)
     {
         VisitXorInstruction(xorInstruction);
     }
     else if (instruction is ShiftLeftInstruction shiftLeftInstruction)
     {
         VisitShiftLeftInstruction(shiftLeftInstruction);
     }
     else if (instruction is ShiftRightInstruction shiftRightInstruction)
     {
         VisitShiftRightInstruction(shiftRightInstruction);
     }
     else if (instruction is ShiftRightUnsignedInstruction shiftRightUnsignedInstruction)
     {
         VisitShiftRightUnsignedInstruction(shiftRightUnsignedInstruction);
     }
     else if (instruction is NotInstruction notInstruction)
     {
         VisitNotInstruction(notInstruction);
     }
     else if (instruction is NegateInstruction negateInstruction)
     {
         VisitNegateInstruction(negateInstruction);
     }
     else if (instruction is LoadArrayElementI4Instruction loadArrayElementI4Instruction)
     {
         VisitLoadArrayElementI4Instruction(loadArrayElementI4Instruction);
     }
     else if (instruction is StoreArrayElementI4Instruction storeArrayElementI4Instruction)
     {
         VisitStoreArrayElementI4Instruction(storeArrayElementI4Instruction);
     }
     else if (instruction is LoadArrayElementI1Instruction loadArrayElementI1Instruction)
     {
         VisitLoadArrayElementI1Instruction(loadArrayElementI1Instruction);
     }
     else if (instruction is StoreArrayElementI1Instruction storeArrayElementI1Instruction)
     {
         VisitStoreArrayElementI1Instruction(storeArrayElementI1Instruction);
     }
     else if (instruction is LoadArrayElementU2Instruction loadArrayElementU2Instruction)
     {
         VisitLoadArrayElementU2Instruction(loadArrayElementU2Instruction);
     }
     else if (instruction is LoadArrayElementI8Instruction loadArrayElementI8Instruction)
     {
         VisitLoadArrayElementI8Instruction(loadArrayElementI8Instruction);
     }
     else if (instruction is StoreArrayElementI8Instruction storeArrayElementI8Instruction)
     {
         VisitStoreArrayElementI8Instruction(storeArrayElementI8Instruction);
     }
     else if (instruction is LoadArrayElementU4Instruction loadArrayElementU4Instruction)
     {
         VisitLoadArrayElementU4Instruction(loadArrayElementU4Instruction);
     }
     else if (instruction is StoreArrayElementRefInstruction storeArrayElementRefInstruction)
     {
         VisitStoreArrayElementRefInstruction(storeArrayElementRefInstruction);
     }
     else if (instruction is LoadArrayElementI2Instruction loadArrayElementI2Instruction)
     {
         VisitLoadArrayElementI2Instruction(loadArrayElementI2Instruction);
     }
     else if (instruction is LoadArrayElementR4Instruction loadArrayElementR4Instruction)
     {
         VisitLoadArrayElementR4Instruction(loadArrayElementR4Instruction);
     }
     else if (instruction is StoreArrayElementR4Instruction storeArrayElementR4Instruction)
     {
         VisitStoreArrayElementR4Instruction(storeArrayElementR4Instruction);
     }
     else if (instruction is StoreArrayElementR8Instruction storeArrayElementR8Instruction)
     {
         VisitStoreArrayElementR8Instruction(storeArrayElementR8Instruction);
     }
     else if (instruction is LoadArrayElementR8Instruction loadArrayElementR8Instruction)
     {
         VisitLoadArrayElementR8Instruction(loadArrayElementR8Instruction);
     }
     else if (instruction is LoadArrayElementU1Instruction loadArrayElementU1Instruction)
     {
         VisitLoadArrayElementU1Instruction(loadArrayElementU1Instruction);
     }
     else if (instruction is ConvertUInstruction convertUInstruction)
     {
         VisitConvertUInstruction(convertUInstruction);
     }
     else if (instruction is IndirectLoadI4Instruction indirectLoadI4Instruction)
     {
         VisitIndirectLoadI4Instruction(indirectLoadI4Instruction);
     }
     else if (instruction is LoadArgument0Instruction loadArgument0Instruction)
     {
         VisitLoadArgument0Instruction(loadArgument0Instruction);
     }
     else if (instruction is LoadArgument1Instruction loadArgument1Instruction)
     {
         VisitLoadArgument1Instruction(loadArgument1Instruction);
     }
     else if (instruction is LoadArgument2Instruction loadArgument2Instruction)
     {
         VisitLoadArgument2Instruction(loadArgument2Instruction);
     }
     else if (instruction is LoadArgument3Instruction loadArgument3Instruction)
     {
         VisitLoadArgument3Instruction(loadArgument3Instruction);
     }
     else if (instruction is IndirectStoreI4Instruction indirectStoreI4Instruction)
     {
         VisitIndirectStoreI4Instruction(indirectStoreI4Instruction);
     }
     else if (instruction is ConvertI4Instruction convertI4Instruction)
     {
         VisitConvertI4Instruction(convertI4Instruction);
     }
     else if (instruction is LoadLengthInstruction loadLengthInstruction)
     {
         VisitLoadLengthInstruction(loadLengthInstruction);
     }
     else
     {
         throw new ArgumentException($"CIL instruction none cannot be recognized: '{instruction.ToString()}'.");
     }
 }
Example #2
0
        public override void Init(AstContext context, ParseTreeNode parseNode)
        {
            // ___("ldarg.0")
            var ldarg0Children = AstChildren.Empty()
                                 .Add("ldarg.0");

            if (ldarg0Children.PopulateWith(parseNode))
            {
                Instruction = new LoadArgument0Instruction();

                return;
            }

            // _("ret")
            var retChildren = AstChildren.Empty()
                              .Add("ret");

            if (retChildren.PopulateWith(parseNode))
            {
                Instruction = new ReturnInstruction();

                return;
            }

            // ___("ldc.i4.0")
            var ldci40Children = AstChildren.Empty()
                                 .Add("ldc.i4.0");

            if (ldci40Children.PopulateWith(parseNode))
            {
                Instruction = new LoadConstI40Instruction();

                return;
            }

            // ___("ldc.i4.1")
            var ldci41Children = AstChildren.Empty()
                                 .Add("ldc.i4.1");

            if (ldci41Children.PopulateWith(parseNode))
            {
                Instruction = new LoadConstI41Instruction();

                return;
            }

            // ___("ldc.i4.2")
            var ldci42Children = AstChildren.Empty()
                                 .Add("ldc.i4.2");

            if (ldci42Children.PopulateWith(parseNode))
            {
                Instruction = new LoadConstI42Instruction();

                return;
            }

            // ___("ldc.i4.3")
            var ldci43Children = AstChildren.Empty()
                                 .Add("ldc.i4.3");

            if (ldci43Children.PopulateWith(parseNode))
            {
                Instruction = new LoadConstI43Instruction();

                return;
            }

            // ___("ldc.i4.4")
            var ldci44Children = AstChildren.Empty()
                                 .Add("ldc.i4.4");

            if (ldci44Children.PopulateWith(parseNode))
            {
                Instruction = new LoadConstI44Instruction();

                return;
            }

            // ___("ldc.i4.5")
            var ldci45Children = AstChildren.Empty()
                                 .Add("ldc.i4.5");

            if (ldci45Children.PopulateWith(parseNode))
            {
                Instruction = new LoadConstI45Instruction();

                return;
            }

            // ___("ldc.i4.6")
            var ldci46Children = AstChildren.Empty()
                                 .Add("ldc.i4.6");

            if (ldci46Children.PopulateWith(parseNode))
            {
                Instruction = new LoadConstI46Instruction();

                return;
            }

            // ___("ldc.i4.7")
            var ldci47Children = AstChildren.Empty()
                                 .Add("ldc.i4.7");

            if (ldci47Children.PopulateWith(parseNode))
            {
                Instruction = new LoadConstI47Instruction();

                return;
            }

            // ___("ldc.i4.8")
            var ldci48Children = AstChildren.Empty()
                                 .Add("ldc.i4.8");

            if (ldci48Children.PopulateWith(parseNode))
            {
                Instruction = new LoadConstI48Instruction();

                return;
            }

            // ___("ldc.i4.m1")
            var ldci4m1Children = AstChildren.Empty()
                                  .Add("ldc.i4.m1");

            if (ldci4m1Children.PopulateWith(parseNode))
            {
                Instruction = new LoadConstI4M1Instruction();

                return;
            }

            // ___("ldc.i4.M1")
            var ldci4M1Children = AstChildren.Empty()
                                  .Add("ldc.i4.M1");

            if (ldci4M1Children.PopulateWith(parseNode))
            {
                Instruction = new LoadConstI4M1Instruction();

                return;
            }

            // _("dup")
            var dupChildren = AstChildren.Empty()
                              .Add("dup");

            if (dupChildren.PopulateWith(parseNode))
            {
                Instruction = new DuplicateInstruction();

                return;
            }

            // ___("stelem.i2")
            var stelemi2Children = AstChildren.Empty()
                                   .Add("stelem.i2");

            if (stelemi2Children.PopulateWith(parseNode))
            {
                Instruction = new StoreArrayElementI2Instruction();

                return;
            }

            // ___("ldelem.ref")
            var ldelemrefChildren = AstChildren.Empty()
                                    .Add("ldelem.ref");

            if (ldelemrefChildren.PopulateWith(parseNode))
            {
                Instruction = new LoadArrayElementRefInstruction();

                return;
            }

            // ___("stloc.0")
            var stloc0Children = AstChildren.Empty()
                                 .Add("stloc.0");

            if (stloc0Children.PopulateWith(parseNode))
            {
                Instruction = new StoreLocal0Instruction();

                return;
            }

            // ___("stloc.1")
            var stloc1Children = AstChildren.Empty()
                                 .Add("stloc.1");

            if (stloc1Children.PopulateWith(parseNode))
            {
                Instruction = new StoreLocal1Instruction();

                return;
            }

            // ___("ldloc.0")
            var ldloc0Children = AstChildren.Empty()
                                 .Add("ldloc.0");

            if (ldloc0Children.PopulateWith(parseNode))
            {
                Instruction = new LoadLocal0Instruction();

                return;
            }

            // ___("ldloc.1")
            var ldloc1Children = AstChildren.Empty()
                                 .Add("ldloc.1");

            if (ldloc1Children.PopulateWith(parseNode))
            {
                Instruction = new LoadLocal1Instruction();

                return;
            }

            // _("add")
            var addChildren = AstChildren.Empty()
                              .Add("add");

            if (addChildren.PopulateWith(parseNode))
            {
                Instruction = new AddInstruction();

                return;
            }

            // ___("stloc.2")
            var stloc2Children = AstChildren.Empty()
                                 .Add("stloc.2");

            if (stloc2Children.PopulateWith(parseNode))
            {
                Instruction = new StoreLocal2Instruction();

                return;
            }

            // ___("stloc.3")
            var stloc3Children = AstChildren.Empty()
                                 .Add("stloc.3");

            if (stloc3Children.PopulateWith(parseNode))
            {
                Instruction = new StoreLocal3Instruction();

                return;
            }

            // ___("ldloc.2")
            var ldloc2Children = AstChildren.Empty()
                                 .Add("ldloc.2");

            if (ldloc2Children.PopulateWith(parseNode))
            {
                Instruction = new LoadLocal2Instruction();

                return;
            }

            // ___("conv.i8")
            var convi8Children = AstChildren.Empty()
                                 .Add("conv.i8");

            if (convi8Children.PopulateWith(parseNode))
            {
                Instruction = new ConvertI8Instruction();

                return;
            }

            // ___("ldloc.3")
            var ldloc3Children = AstChildren.Empty()
                                 .Add("ldloc.3");

            if (ldloc3Children.PopulateWith(parseNode))
            {
                Instruction = new LoadLocal3Instruction();

                return;
            }

            // ___("conv.u8")
            var convu8Children = AstChildren.Empty()
                                 .Add("conv.u8");

            if (convu8Children.PopulateWith(parseNode))
            {
                Instruction = new ConvertU8Instruction();

                return;
            }

            // ___("conv.r4")
            var convr4Children = AstChildren.Empty()
                                 .Add("conv.r4");

            if (convr4Children.PopulateWith(parseNode))
            {
                Instruction = new ConvertR4Instruction();

                return;
            }

            // ___("conv.r8")
            var convr8Children = AstChildren.Empty()
                                 .Add("conv.r8");

            if (convr8Children.PopulateWith(parseNode))
            {
                Instruction = new ConvertR8Instruction();

                return;
            }

            // ___("conv.r.un")
            var convrunChildren = AstChildren.Empty()
                                  .Add("conv.r.un");

            if (convrunChildren.PopulateWith(parseNode))
            {
                Instruction = new ConvertRUnsignedInstruction();

                return;
            }

            // _("sub")
            var subChildren = AstChildren.Empty()
                              .Add("sub");

            if (subChildren.PopulateWith(parseNode))
            {
                Instruction = new SubtractInstruction();

                return;
            }

            // ___("conv.i1")
            var convi1Children = AstChildren.Empty()
                                 .Add("conv.i1");

            if (convi1Children.PopulateWith(parseNode))
            {
                Instruction = new ConvertI1Instruction();

                return;
            }

            // ___("conv.i2")
            var convi2Children = AstChildren.Empty()
                                 .Add("conv.i2");

            if (convi2Children.PopulateWith(parseNode))
            {
                Instruction = new ConvertI2Instruction();

                return;
            }

            // ___("conv.u1")
            var convu1Children = AstChildren.Empty()
                                 .Add("conv.u1");

            if (convu1Children.PopulateWith(parseNode))
            {
                Instruction = new ConvertU1Instruction();

                return;
            }

            // ___("conv.u2")
            var convu2Children = AstChildren.Empty()
                                 .Add("conv.u2");

            if (convu2Children.PopulateWith(parseNode))
            {
                Instruction = new ConvertU2Instruction();

                return;
            }

            // _("mul")
            var mulChildren = AstChildren.Empty()
                              .Add("mul");

            if (mulChildren.PopulateWith(parseNode))
            {
                Instruction = new MultiplyInstruction();

                return;
            }

            // _("div")
            var divChildren = AstChildren.Empty()
                              .Add("div");

            if (divChildren.PopulateWith(parseNode))
            {
                Instruction = new DivideInstruction();

                return;
            }

            // ___("div.un")
            var divunChildren = AstChildren.Empty()
                                .Add("div.un");

            if (divunChildren.PopulateWith(parseNode))
            {
                Instruction = new DivideUnsignedInstruction();

                return;
            }

            // _("rem")
            var remChildren = AstChildren.Empty()
                              .Add("rem");

            if (remChildren.PopulateWith(parseNode))
            {
                Instruction = new RemainderInstruction();

                return;
            }

            // ___("rem.un")
            var remunChildren = AstChildren.Empty()
                                .Add("rem.un");

            if (remunChildren.PopulateWith(parseNode))
            {
                Instruction = new RemainderUnsignedInstruction();

                return;
            }

            // _("ceq")
            var ceqChildren = AstChildren.Empty()
                              .Add("ceq");

            if (ceqChildren.PopulateWith(parseNode))
            {
                Instruction = new CompareEqualInstruction();

                return;
            }

            // _("cgt")
            var cgtChildren = AstChildren.Empty()
                              .Add("cgt");

            if (cgtChildren.PopulateWith(parseNode))
            {
                Instruction = new CompareGreaterThanInstruction();

                return;
            }

            // ___("cgt.un")
            var cgtunChildren = AstChildren.Empty()
                                .Add("cgt.un");

            if (cgtunChildren.PopulateWith(parseNode))
            {
                Instruction = new CompareGreaterThanUnsignedInstruction();

                return;
            }

            // _("clt")
            var cltChildren = AstChildren.Empty()
                              .Add("clt");

            if (cltChildren.PopulateWith(parseNode))
            {
                Instruction = new CompareLessThanInstruction();

                return;
            }

            // ___("clt.un")
            var cltunChildren = AstChildren.Empty()
                                .Add("clt.un");

            if (cltunChildren.PopulateWith(parseNode))
            {
                Instruction = new CompareLessThanUnsignedInstruction();

                return;
            }

            // _("and")
            var andChildren = AstChildren.Empty()
                              .Add("and");

            if (andChildren.PopulateWith(parseNode))
            {
                Instruction = new AndInstruction();

                return;
            }

            // _("or")
            var orChildren = AstChildren.Empty()
                             .Add("or");

            if (orChildren.PopulateWith(parseNode))
            {
                Instruction = new OrInstruction();

                return;
            }

            // _("pop")
            var popChildren = AstChildren.Empty()
                              .Add("pop");

            if (popChildren.PopulateWith(parseNode))
            {
                Instruction = new PopInstruction();

                return;
            }

            // _("xor")
            var xorChildren = AstChildren.Empty()
                              .Add("xor");

            if (xorChildren.PopulateWith(parseNode))
            {
                Instruction = new XorInstruction();

                return;
            }

            // _("shl")
            var shlChildren = AstChildren.Empty()
                              .Add("shl");

            if (shlChildren.PopulateWith(parseNode))
            {
                Instruction = new ShiftLeftInstruction();

                return;
            }

            // _("shr")
            var shrChildren = AstChildren.Empty()
                              .Add("shr");

            if (shrChildren.PopulateWith(parseNode))
            {
                Instruction = new ShiftRightInstruction();

                return;
            }

            // ___("shr.un")
            var shrunChildren = AstChildren.Empty()
                                .Add("shr.un");

            if (shrunChildren.PopulateWith(parseNode))
            {
                Instruction = new ShiftRightUnsignedInstruction();

                return;
            }

            // _("not")
            var notChildren = AstChildren.Empty()
                              .Add("not");

            if (notChildren.PopulateWith(parseNode))
            {
                Instruction = new NotInstruction();

                return;
            }

            // _("neg")
            var negChildren = AstChildren.Empty()
                              .Add("neg");

            if (negChildren.PopulateWith(parseNode))
            {
                Instruction = new NegateInstruction();

                return;
            }

            // ___("stelem.i4")
            var stelemi4Children = AstChildren.Empty()
                                   .Add("stelem.i4");

            if (stelemi4Children.PopulateWith(parseNode))
            {
                Instruction = new StoreArrayElementI4Instruction();

                return;
            }

            // ___("ldelem.i4")
            var ldelemi4Children = AstChildren.Empty()
                                   .Add("ldelem.i4");

            if (ldelemi4Children.PopulateWith(parseNode))
            {
                Instruction = new LoadArrayElementI4Instruction();

                return;
            }

            // ___("stelem.i1")
            var stelemi1Children = AstChildren.Empty()
                                   .Add("stelem.i1");

            if (stelemi1Children.PopulateWith(parseNode))
            {
                Instruction = new StoreArrayElementI1Instruction();

                return;
            }

            // ___("ldelem.i1")
            var ldelemi1Children = AstChildren.Empty()
                                   .Add("ldelem.i1");

            if (ldelemi1Children.PopulateWith(parseNode))
            {
                Instruction = new LoadArrayElementI1Instruction();

                return;
            }

            // ___("ldelem.u2")
            var ldelemu2Children = AstChildren.Empty()
                                   .Add("ldelem.u2");

            if (ldelemu2Children.PopulateWith(parseNode))
            {
                Instruction = new LoadArrayElementU2Instruction();

                return;
            }

            // ___("stelem.i8")
            var stelemi8Children = AstChildren.Empty()
                                   .Add("stelem.i8");

            if (stelemi8Children.PopulateWith(parseNode))
            {
                Instruction = new StoreArrayElementI8Instruction();

                return;
            }

            // ___("ldelem.i8")
            var ldelemi8Children = AstChildren.Empty()
                                   .Add("ldelem.i8");

            if (ldelemi8Children.PopulateWith(parseNode))
            {
                Instruction = new LoadArrayElementI8Instruction();

                return;
            }

            // ___("ldelem.u4")
            var ldelemu4Children = AstChildren.Empty()
                                   .Add("ldelem.u4");

            if (ldelemu4Children.PopulateWith(parseNode))
            {
                Instruction = new LoadArrayElementU4Instruction();

                return;
            }

            // ___("stelem.ref")
            var stelemrefChildren = AstChildren.Empty()
                                    .Add("stelem.ref");

            if (stelemrefChildren.PopulateWith(parseNode))
            {
                Instruction = new StoreArrayElementRefInstruction();

                return;
            }

            // ___("ldelem.i2")
            var ldelemi2Children = AstChildren.Empty()
                                   .Add("ldelem.i2");

            if (ldelemi2Children.PopulateWith(parseNode))
            {
                Instruction = new LoadArrayElementI2Instruction();

                return;
            }

            // ___("stelem.r4")
            var stelemr4Children = AstChildren.Empty()
                                   .Add("stelem.r4");

            if (stelemr4Children.PopulateWith(parseNode))
            {
                Instruction = new StoreArrayElementR4Instruction();

                return;
            }

            // ___("ldelem.r4")
            var ldelemr4Children = AstChildren.Empty()
                                   .Add("ldelem.r4");

            if (ldelemr4Children.PopulateWith(parseNode))
            {
                Instruction = new LoadArrayElementR4Instruction();

                return;
            }

            // ___("stelem.r8")
            var stelemr8Children = AstChildren.Empty()
                                   .Add("stelem.r8");

            if (stelemr8Children.PopulateWith(parseNode))
            {
                Instruction = new StoreArrayElementR8Instruction();

                return;
            }

            // ___("ldelem.r8")
            var ldelemr8Children = AstChildren.Empty()
                                   .Add("ldelem.r8");

            if (ldelemr8Children.PopulateWith(parseNode))
            {
                Instruction = new LoadArrayElementR8Instruction();

                return;
            }

            // ___("ldelem.u1")
            var ldelemu1Children = AstChildren.Empty()
                                   .Add("ldelem.u1");

            if (ldelemu1Children.PopulateWith(parseNode))
            {
                Instruction = new LoadArrayElementU1Instruction();

                return;
            }

            // ___("conv.u")
            var convuChildren = AstChildren.Empty()
                                .Add("conv.u");

            if (convuChildren.PopulateWith(parseNode))
            {
                Instruction = new ConvertUInstruction();

                return;
            }

            // ___("ldind.i4")
            var ldindi4Children = AstChildren.Empty()
                                  .Add("ldind.i4");

            if (ldindi4Children.PopulateWith(parseNode))
            {
                Instruction = new IndirectLoadI4Instruction();

                return;
            }

            // ___("ldarg.1")
            var ldarg1Children = AstChildren.Empty()
                                 .Add("ldarg.1");

            if (ldarg1Children.PopulateWith(parseNode))
            {
                Instruction = new LoadArgument1Instruction();

                return;
            }

            // ___("ldarg.2")
            var ldarg2Children = AstChildren.Empty()
                                 .Add("ldarg.2");

            if (ldarg2Children.PopulateWith(parseNode))
            {
                Instruction = new LoadArgument2Instruction();

                return;
            }

            // ___("ldarg.3")
            var ldarg3Children = AstChildren.Empty()
                                 .Add("ldarg.3");

            if (ldarg3Children.PopulateWith(parseNode))
            {
                Instruction = new LoadArgument3Instruction();

                return;
            }

            // ___("stind.i4")
            var stindi4Children = AstChildren.Empty()
                                  .Add("stind.i4");

            if (stindi4Children.PopulateWith(parseNode))
            {
                Instruction = new IndirectStoreI4Instruction();

                return;
            }

            // _("ldlen")
            var ldlenChildren = AstChildren.Empty()
                                .Add("ldlen");

            if (ldlenChildren.PopulateWith(parseNode))
            {
                Instruction = new LoadLengthInstruction();

                return;
            }

            // ___("conv.i4")
            var convi4Children = AstChildren.Empty()
                                 .Add("conv.i4");

            if (convi4Children.PopulateWith(parseNode))
            {
                Instruction = new ConvertI4Instruction();

                return;
            }

            throw new NotImplementedException();
        }