Ejemplo n.º 1
0
 /// <summary>
 /// </summary>
 /// <param name="reader"></param>
 public ILTokenizer (StreamReader reader)
 {
         this.reader = new ILReader (reader);
         strBuilder = new StringHelper (this);
         numBuilder = new NumberHelper (this);
         lastToken = ILToken.Invalid.Clone () as ILToken;
 }
Ejemplo n.º 2
0
 private void OnNewToken(ILToken token)
 {
     if (NewTokenEvent != null)
     {
         NewTokenEvent(this, new NewTokenEventArgs(token));
     }
 }
Ejemplo n.º 3
0
 /// <summary>
 /// </summary>
 /// <param name="reader"></param>
 public ILTokenizer(StreamReader reader)
 {
     this.reader = new ILReader(reader);
     strBuilder  = new StringHelper(this);
     numBuilder  = new NumberHelper(this);
     lastToken   = ILToken.Invalid.Clone() as ILToken;
 }
Ejemplo n.º 4
0
        /// <summary>
        /// </summary>
        /// <param name="ch"></param>
        /// <returns></returns>
        public static ILToken GetPunctuation(int ch)
        {
            int     id  = "{}[](),:;=*&+/!<>".IndexOf((char)ch);
            ILToken res = null;

            if (id != -1)
            {
                res = punctuations [id];
            }

            return(res);
        }
Ejemplo n.º 5
0
        private static bool EqImpl(ILToken t1, ILToken t2)
        {
            bool res = false;

            if ((t1 as object) != null)
            {
                res = t1.Equals(t2);
            }
            else
            {
                res = ((t2 as object) == null);
            }

            return(res);
        }
Ejemplo n.º 6
0
        /// <summary>
        /// </summary>
        /// <param name="o"></param>
        /// <returns></returns>
        public override bool Equals(object o)
        {
            bool res = (o != null);

            if (res)
            {
                res = Object.ReferenceEquals(this, o);
                if (!res)
                {
                    res = o is ILToken;
                    if (res)
                    {
                        ILToken that = o as ILToken;
                        res = (this.token == that.token) && (this.val.Equals(that.val));
                    }
                }
            }

            return(res);
        }
Ejemplo n.º 7
0
                /// <summary>
                /// </summary>
                static ILToken ()
                {
                        Invalid = new ILToken (-1, "invalid");
                        EOF = new ILToken (Token.EOF, "eof");

                        Dot = new ILToken (Token.DOT, ".");
                        OpenBrace = new ILToken (Token.OPEN_BRACE, "{");
                        CloseBrace = new ILToken (Token.CLOSE_BRACE, "}");
                        OpenBracket = new ILToken (Token.OPEN_BRACKET, "[");
                        CloseBracket = new ILToken (Token.CLOSE_BRACKET, "]");
                        OpenParens = new ILToken (Token.OPEN_PARENS, "(");
                        CloseParens = new ILToken (Token.CLOSE_PARENS, ")");
                        Comma = new ILToken (Token.COMMA, ",");
                        Colon = new ILToken (Token.COLON, ":");
                        DoubleColon = new ILToken (Token.DOUBLE_COLON, "::");
                        Semicolon = new ILToken (Token.SEMICOLON, ";");
                        Assign = new ILToken (Token.ASSIGN, "=");
                        Star = new ILToken (Token.STAR, "*");
                        Ampersand = new ILToken (Token.AMPERSAND, "&");
                        Plus = new ILToken (Token.PLUS, "+");
                        Slash = new ILToken (Token.SLASH, "/");
                        Bang = new ILToken (Token.BANG, "!");
                        Ellipsis = new ILToken (Token.ELLIPSIS, "...");
                        Dash = new ILToken (Token.DASH, "-");
                        OpenAngleBracket = new ILToken (Token.OPEN_ANGLE_BRACKET, "<");
                        CloseAngleBracket = new ILToken (Token.CLOSE_ANGLE_BRACKET, ">");

                        punctuations = new ILToken [] {
                                OpenBrace, CloseBrace,
                                OpenBracket, CloseBracket,
                                OpenParens, CloseParens,
                                Comma, Colon, Semicolon,
                                Assign, Star, Ampersand,
                                Plus, Slash, Bang,
                                OpenAngleBracket, CloseAngleBracket
                        };
                }
Ejemplo n.º 8
0
        /// <summary>
        /// </summary>
        static ILToken()
        {
            Invalid = new ILToken(-1, "invalid");
            EOF     = new ILToken(Token.EOF, "eof");

            Dot               = new ILToken(Token.DOT, ".");
            OpenBrace         = new ILToken(Token.OPEN_BRACE, "{");
            CloseBrace        = new ILToken(Token.CLOSE_BRACE, "}");
            OpenBracket       = new ILToken(Token.OPEN_BRACKET, "[");
            CloseBracket      = new ILToken(Token.CLOSE_BRACKET, "]");
            OpenParens        = new ILToken(Token.OPEN_PARENS, "(");
            CloseParens       = new ILToken(Token.CLOSE_PARENS, ")");
            Comma             = new ILToken(Token.COMMA, ",");
            Colon             = new ILToken(Token.COLON, ":");
            DoubleColon       = new ILToken(Token.DOUBLE_COLON, "::");
            Semicolon         = new ILToken(Token.SEMICOLON, ";");
            Assign            = new ILToken(Token.ASSIGN, "=");
            Star              = new ILToken(Token.STAR, "*");
            Ampersand         = new ILToken(Token.AMPERSAND, "&");
            Plus              = new ILToken(Token.PLUS, "+");
            Slash             = new ILToken(Token.SLASH, "/");
            Bang              = new ILToken(Token.BANG, "!");
            Ellipsis          = new ILToken(Token.ELLIPSIS, "...");
            Dash              = new ILToken(Token.DASH, "-");
            OpenAngleBracket  = new ILToken(Token.OPEN_ANGLE_BRACKET, "<");
            CloseAngleBracket = new ILToken(Token.CLOSE_ANGLE_BRACKET, ">");

            punctuations = new ILToken [] {
                OpenBrace, CloseBrace,
                OpenBracket, CloseBracket,
                OpenParens, CloseParens,
                Comma, Colon, Semicolon,
                Assign, Star, Ampersand,
                Plus, Slash, Bang,
                OpenAngleBracket, CloseAngleBracket
            };
        }
 private void Reset()
 {
     result = ILToken.Invalid.Clone() as ILToken;
 }
Ejemplo n.º 10
0
        private static void CreateInstTable()
        {
            inst_table = new Hashtable();

            inst_table["nop"]            = new ILToken(Token.INSTR_NONE, Op.nop);
            inst_table["break"]          = new ILToken(Token.INSTR_NONE, Op.breakOp);
            inst_table["ldarg.0"]        = new ILToken(Token.INSTR_NONE, Op.ldarg_0);
            inst_table["ldarg.1"]        = new ILToken(Token.INSTR_NONE, Op.ldarg_1);
            inst_table["ldarg.2"]        = new ILToken(Token.INSTR_NONE, Op.ldarg_2);
            inst_table["ldarg.3"]        = new ILToken(Token.INSTR_NONE, Op.ldarg_3);
            inst_table["ldloc.0"]        = new ILToken(Token.INSTR_NONE, Op.ldloc_0);
            inst_table["ldloc.1"]        = new ILToken(Token.INSTR_NONE, Op.ldloc_1);
            inst_table["ldloc.2"]        = new ILToken(Token.INSTR_NONE, Op.ldloc_2);
            inst_table["ldloc.3"]        = new ILToken(Token.INSTR_NONE, Op.ldloc_3);
            inst_table["stloc.0"]        = new ILToken(Token.INSTR_NONE, Op.stloc_0);
            inst_table["stloc.1"]        = new ILToken(Token.INSTR_NONE, Op.stloc_1);
            inst_table["stloc.2"]        = new ILToken(Token.INSTR_NONE, Op.stloc_2);
            inst_table["stloc.3"]        = new ILToken(Token.INSTR_NONE, Op.stloc_3);
            inst_table["ldnull"]         = new ILToken(Token.INSTR_NONE, Op.ldnull);
            inst_table["ldc.i4.m1"]      = new ILToken(Token.INSTR_NONE, Op.ldc_i4_m1);
            inst_table["ldc.i4.M1"]      = new ILToken(Token.INSTR_NONE, Op.ldc_i4_m1);
            inst_table["ldc.i4.0"]       = new ILToken(Token.INSTR_NONE, Op.ldc_i4_0);
            inst_table["ldc.i4.1"]       = new ILToken(Token.INSTR_NONE, Op.ldc_i4_1);
            inst_table["ldc.i4.2"]       = new ILToken(Token.INSTR_NONE, Op.ldc_i4_2);
            inst_table["ldc.i4.3"]       = new ILToken(Token.INSTR_NONE, Op.ldc_i4_3);
            inst_table["ldc.i4.4"]       = new ILToken(Token.INSTR_NONE, Op.ldc_i4_4);
            inst_table["ldc.i4.5"]       = new ILToken(Token.INSTR_NONE, Op.ldc_i4_5);
            inst_table["ldc.i4.6"]       = new ILToken(Token.INSTR_NONE, Op.ldc_i4_6);
            inst_table["ldc.i4.7"]       = new ILToken(Token.INSTR_NONE, Op.ldc_i4_7);
            inst_table["ldc.i4.8"]       = new ILToken(Token.INSTR_NONE, Op.ldc_i4_8);
            inst_table["dup"]            = new ILToken(Token.INSTR_NONE, Op.dup);
            inst_table["pop"]            = new ILToken(Token.INSTR_NONE, Op.pop);
            inst_table["ret"]            = new ILToken(Token.INSTR_NONE, Op.ret);
            inst_table["ldind.i1"]       = new ILToken(Token.INSTR_NONE, Op.ldind_i1);
            inst_table["ldind.u1"]       = new ILToken(Token.INSTR_NONE, Op.ldind_u1);
            inst_table["ldind.i2"]       = new ILToken(Token.INSTR_NONE, Op.ldind_i2);
            inst_table["ldind.u2"]       = new ILToken(Token.INSTR_NONE, Op.ldind_u2);
            inst_table["ldind.i4"]       = new ILToken(Token.INSTR_NONE, Op.ldind_i4);
            inst_table["ldind.u4"]       = new ILToken(Token.INSTR_NONE, Op.ldind_u4);
            inst_table["ldind.i8"]       = new ILToken(Token.INSTR_NONE, Op.ldind_i8);
            inst_table["ldind.u8"]       = new ILToken(Token.INSTR_NONE, Op.ldind_i8);
            inst_table["ldind.i"]        = new ILToken(Token.INSTR_NONE, Op.ldind_i);
            inst_table["ldind.r4"]       = new ILToken(Token.INSTR_NONE, Op.ldind_r4);
            inst_table["ldind.r8"]       = new ILToken(Token.INSTR_NONE, Op.ldind_r8);
            inst_table["ldind.ref"]      = new ILToken(Token.INSTR_NONE, Op.ldind_ref);
            inst_table["stind.ref"]      = new ILToken(Token.INSTR_NONE, Op.stind_ref);
            inst_table["stind.i1"]       = new ILToken(Token.INSTR_NONE, Op.stind_i1);
            inst_table["stind.i2"]       = new ILToken(Token.INSTR_NONE, Op.stind_i2);
            inst_table["stind.i4"]       = new ILToken(Token.INSTR_NONE, Op.stind_i4);
            inst_table["stind.i8"]       = new ILToken(Token.INSTR_NONE, Op.stind_i8);
            inst_table["stind.r4"]       = new ILToken(Token.INSTR_NONE, Op.stind_r4);
            inst_table["stind.r8"]       = new ILToken(Token.INSTR_NONE, Op.stind_r8);
            inst_table["add"]            = new ILToken(Token.INSTR_NONE, Op.add);
            inst_table["sub"]            = new ILToken(Token.INSTR_NONE, Op.sub);
            inst_table["mul"]            = new ILToken(Token.INSTR_NONE, Op.mul);
            inst_table["div"]            = new ILToken(Token.INSTR_NONE, Op.div);
            inst_table["div.un"]         = new ILToken(Token.INSTR_NONE, Op.div_un);
            inst_table["rem"]            = new ILToken(Token.INSTR_NONE, Op.rem);
            inst_table["rem.un"]         = new ILToken(Token.INSTR_NONE, Op.rem_un);
            inst_table["and"]            = new ILToken(Token.INSTR_NONE, Op.and);
            inst_table["or"]             = new ILToken(Token.INSTR_NONE, Op.or);
            inst_table["xor"]            = new ILToken(Token.INSTR_NONE, Op.xor);
            inst_table["shl"]            = new ILToken(Token.INSTR_NONE, Op.shl);
            inst_table["shr"]            = new ILToken(Token.INSTR_NONE, Op.shr);
            inst_table["shr.un"]         = new ILToken(Token.INSTR_NONE, Op.shr_un);
            inst_table["neg"]            = new ILToken(Token.INSTR_NONE, Op.neg);
            inst_table["not"]            = new ILToken(Token.INSTR_NONE, Op.not);
            inst_table["conv.i1"]        = new ILToken(Token.INSTR_NONE, Op.conv_i1);
            inst_table["conv.i2"]        = new ILToken(Token.INSTR_NONE, Op.conv_i2);
            inst_table["conv.i4"]        = new ILToken(Token.INSTR_NONE, Op.conv_i4);
            inst_table["conv.i8"]        = new ILToken(Token.INSTR_NONE, Op.conv_i8);
            inst_table["conv.r4"]        = new ILToken(Token.INSTR_NONE, Op.conv_r4);
            inst_table["conv.r8"]        = new ILToken(Token.INSTR_NONE, Op.conv_r8);
            inst_table["conv.u4"]        = new ILToken(Token.INSTR_NONE, Op.conv_u4);
            inst_table["conv.u8"]        = new ILToken(Token.INSTR_NONE, Op.conv_u8);
            inst_table["conv.r.un"]      = new ILToken(Token.INSTR_NONE, Op.conv_r_un);
            inst_table["throw"]          = new ILToken(Token.INSTR_NONE, Op.throwOp);
            inst_table["conv.ovf.i1.un"] = new ILToken(Token.INSTR_NONE, Op.conv_ovf_i1_un);
            inst_table["conv.ovf.i2.un"] = new ILToken(Token.INSTR_NONE, Op.conv_ovf_i2_un);
            inst_table["conv.ovf.i4.un"] = new ILToken(Token.INSTR_NONE, Op.conv_ovf_i4_un);
            inst_table["conv.ovf.i8.un"] = new ILToken(Token.INSTR_NONE, Op.conv_ovf_i8_un);
            inst_table["conf.ovf.u1.un"] = new ILToken(Token.INSTR_NONE, Op.conf_ovf_u1_un);
            inst_table["conv.ovf.u2.un"] = new ILToken(Token.INSTR_NONE, Op.conv_ovf_u2_un);
            inst_table["conv.ovf.u4.un"] = new ILToken(Token.INSTR_NONE, Op.conv_ovf_u4_un);
            inst_table["conv.ovf.u8.un"] = new ILToken(Token.INSTR_NONE, Op.conv_ovf_u8_un);
            inst_table["conv.ovf.i.un"]  = new ILToken(Token.INSTR_NONE, Op.conv_ovf_i_un);
            inst_table["conv.ovf.u.un"]  = new ILToken(Token.INSTR_NONE, Op.conv_ovf_u_un);
            inst_table["ldlen"]          = new ILToken(Token.INSTR_NONE, Op.ldlen);
            inst_table["ldelem.i1"]      = new ILToken(Token.INSTR_NONE, Op.ldelem_i1);
            inst_table["ldelem.u1"]      = new ILToken(Token.INSTR_NONE, Op.ldelem_u1);
            inst_table["ldelem.i2"]      = new ILToken(Token.INSTR_NONE, Op.ldelem_i2);
            inst_table["ldelem.u2"]      = new ILToken(Token.INSTR_NONE, Op.ldelem_u2);
            inst_table["ldelem.i4"]      = new ILToken(Token.INSTR_NONE, Op.ldelem_i4);
            inst_table["ldelem.u4"]      = new ILToken(Token.INSTR_NONE, Op.ldelem_u4);
            inst_table["ldelem.i8"]      = new ILToken(Token.INSTR_NONE, Op.ldelem_i8);
            inst_table["ldelem.u8"]      = new ILToken(Token.INSTR_NONE, Op.ldelem_i8);
            inst_table["ldelem.i"]       = new ILToken(Token.INSTR_NONE, Op.ldelem_i);
            inst_table["ldelem.r4"]      = new ILToken(Token.INSTR_NONE, Op.ldelem_r4);
            inst_table["ldelem.r8"]      = new ILToken(Token.INSTR_NONE, Op.ldelem_r8);
            inst_table["ldelem.ref"]     = new ILToken(Token.INSTR_NONE, Op.ldelem_ref);
            inst_table["stelem.i"]       = new ILToken(Token.INSTR_NONE, Op.stelem_i);
            inst_table["stelem.i1"]      = new ILToken(Token.INSTR_NONE, Op.stelem_i1);
            inst_table["stelem.i2"]      = new ILToken(Token.INSTR_NONE, Op.stelem_i2);
            inst_table["stelem.i4"]      = new ILToken(Token.INSTR_NONE, Op.stelem_i4);
            inst_table["stelem.i8"]      = new ILToken(Token.INSTR_NONE, Op.stelem_i8);
            inst_table["stelem.r4"]      = new ILToken(Token.INSTR_NONE, Op.stelem_r4);
            inst_table["stelem.r8"]      = new ILToken(Token.INSTR_NONE, Op.stelem_r8);
            inst_table["stelem.ref"]     = new ILToken(Token.INSTR_NONE, Op.stelem_ref);
            inst_table["conv.ovf.i1"]    = new ILToken(Token.INSTR_NONE, Op.conv_ovf_i1);
            inst_table["conv.ovf.u1"]    = new ILToken(Token.INSTR_NONE, Op.conv_ovf_u1);
            inst_table["conv.ovf.i2"]    = new ILToken(Token.INSTR_NONE, Op.conv_ovf_i2);
            inst_table["conv.ovf.u2"]    = new ILToken(Token.INSTR_NONE, Op.conv_ovf_u2);
            inst_table["conv.ovf.i4"]    = new ILToken(Token.INSTR_NONE, Op.conv_ovf_i4);
            inst_table["conv.ovf.u4"]    = new ILToken(Token.INSTR_NONE, Op.conv_ovf_u4);
            inst_table["conv.ovf.i8"]    = new ILToken(Token.INSTR_NONE, Op.conv_ovf_i8);
            inst_table["conv.ovf.u8"]    = new ILToken(Token.INSTR_NONE, Op.conv_ovf_u8);
            inst_table["conv.ovf.u1.un"] = new ILToken(Token.INSTR_NONE, Op.conf_ovf_u1_un);
            inst_table["conv.ovf.u2.un"] = new ILToken(Token.INSTR_NONE, Op.conv_ovf_u2_un);
            inst_table["conv.ovf.u4.un"] = new ILToken(Token.INSTR_NONE, Op.conv_ovf_u4_un);
            inst_table["conv.ovf.u8.un"] = new ILToken(Token.INSTR_NONE, Op.conv_ovf_u8_un);
            inst_table["conv.ovf.i1.un"] = new ILToken(Token.INSTR_NONE, Op.conv_ovf_i1_un);
            inst_table["conv.ovf.i2.un"] = new ILToken(Token.INSTR_NONE, Op.conv_ovf_i2_un);
            inst_table["conv.ovf.i4.un"] = new ILToken(Token.INSTR_NONE, Op.conv_ovf_i4_un);
            inst_table["conv.ovf.i8.un"] = new ILToken(Token.INSTR_NONE, Op.conv_ovf_i8_un);
            inst_table["ckfinite"]       = new ILToken(Token.INSTR_NONE, Op.ckfinite);
            inst_table["conv.u2"]        = new ILToken(Token.INSTR_NONE, Op.conv_u2);
            inst_table["conv.u1"]        = new ILToken(Token.INSTR_NONE, Op.conv_u1);
            inst_table["conv.i"]         = new ILToken(Token.INSTR_NONE, Op.conv_i);
            inst_table["conv.ovf.i"]     = new ILToken(Token.INSTR_NONE, Op.conv_ovf_i);
            inst_table["conv.ovf.u"]     = new ILToken(Token.INSTR_NONE, Op.conv_ovf_u);
            inst_table["add.ovf"]        = new ILToken(Token.INSTR_NONE, Op.add_ovf);
            inst_table["add.ovf.un"]     = new ILToken(Token.INSTR_NONE, Op.add_ovf_un);
            inst_table["mul.ovf"]        = new ILToken(Token.INSTR_NONE, Op.mul_ovf);
            inst_table["mul.ovf.un"]     = new ILToken(Token.INSTR_NONE, Op.mul_ovf_un);
            inst_table["sub.ovf"]        = new ILToken(Token.INSTR_NONE, Op.sub_ovf);
            inst_table["sub.ovf.un"]     = new ILToken(Token.INSTR_NONE, Op.sub_ovf_un);
            inst_table["endfinally"]     = new ILToken(Token.INSTR_NONE, Op.endfinally);
            // endfault is really just an alias for endfinally
            inst_table["endfault"]   = new ILToken(Token.INSTR_NONE, Op.endfinally);
            inst_table["stind.i"]    = new ILToken(Token.INSTR_NONE, Op.stind_i);
            inst_table["conv.u"]     = new ILToken(Token.INSTR_NONE, Op.conv_u);
            inst_table["arglist"]    = new ILToken(Token.INSTR_NONE, Op.arglist);
            inst_table["ceq"]        = new ILToken(Token.INSTR_NONE, Op.ceq);
            inst_table["cgt"]        = new ILToken(Token.INSTR_NONE, Op.cgt);
            inst_table["cgt.un"]     = new ILToken(Token.INSTR_NONE, Op.cgt_un);
            inst_table["clt"]        = new ILToken(Token.INSTR_NONE, Op.clt);
            inst_table["clt.un"]     = new ILToken(Token.INSTR_NONE, Op.clt_un);
            inst_table["localloc"]   = new ILToken(Token.INSTR_NONE, Op.localloc);
            inst_table["endfilter"]  = new ILToken(Token.INSTR_NONE, Op.endfilter);
            inst_table["volatile."]  = new ILToken(Token.INSTR_NONE, Op.volatile_);
            inst_table["tail."]      = new ILToken(Token.INSTR_NONE, Op.tail_);
            inst_table["cpblk"]      = new ILToken(Token.INSTR_NONE, Op.cpblk);
            inst_table["initblk"]    = new ILToken(Token.INSTR_NONE, Op.initblk);
            inst_table["rethrow"]    = new ILToken(Token.INSTR_NONE, Op.rethrow);
            inst_table["refanytype"] = new ILToken(Token.INSTR_NONE, Op.refanytype);
            inst_table["readonly."]  = new ILToken(Token.INSTR_NONE, Op.readonly_);

            //
            // Int operations
            //

            // param
            inst_table["ldarg"]    = new ILToken(Token.INSTR_PARAM, IntOp.ldarg);
            inst_table["ldarga"]   = new ILToken(Token.INSTR_PARAM, IntOp.ldarga);
            inst_table["starg"]    = new ILToken(Token.INSTR_PARAM, IntOp.starg);
            inst_table["ldarg.s"]  = new ILToken(Token.INSTR_PARAM, IntOp.ldarg_s);
            inst_table["ldarga.s"] = new ILToken(Token.INSTR_PARAM, IntOp.ldarga_s);
            inst_table["starg.s"]  = new ILToken(Token.INSTR_PARAM, IntOp.starg_s);

            // local
            inst_table["ldloc"]    = new ILToken(Token.INSTR_LOCAL, IntOp.ldloc);
            inst_table["ldloca"]   = new ILToken(Token.INSTR_LOCAL, IntOp.ldloca);
            inst_table["stloc"]    = new ILToken(Token.INSTR_LOCAL, IntOp.stloc);
            inst_table["ldloc.s"]  = new ILToken(Token.INSTR_LOCAL, IntOp.ldloc_s);
            inst_table["ldloca.s"] = new ILToken(Token.INSTR_LOCAL, IntOp.ldloca_s);
            inst_table["stloc.s"]  = new ILToken(Token.INSTR_LOCAL, IntOp.stloc_s);

            inst_table["ldc.i4.s"]   = new ILToken(Token.INSTR_I, IntOp.ldc_i4_s);
            inst_table["ldc.i4"]     = new ILToken(Token.INSTR_I, IntOp.ldc_i4);
            inst_table["unaligned."] = new ILToken(Token.INSTR_I, IntOp.unaligned);

            //
            // Type operations
            //

            inst_table["cpobj"]        = new ILToken(Token.INSTR_TYPE, TypeOp.cpobj);
            inst_table["ldobj"]        = new ILToken(Token.INSTR_TYPE, TypeOp.ldobj);
            inst_table["castclass"]    = new ILToken(Token.INSTR_TYPE, TypeOp.castclass);
            inst_table["isinst"]       = new ILToken(Token.INSTR_TYPE, TypeOp.isinst);
            inst_table["unbox"]        = new ILToken(Token.INSTR_TYPE, TypeOp.unbox);
            inst_table["unbox.any"]    = new ILToken(Token.INSTR_TYPE, TypeOp.unbox_any);
            inst_table["stobj"]        = new ILToken(Token.INSTR_TYPE, TypeOp.stobj);
            inst_table["box"]          = new ILToken(Token.INSTR_TYPE, TypeOp.box);
            inst_table["newarr"]       = new ILToken(Token.INSTR_TYPE, TypeOp.newarr);
            inst_table["ldelema"]      = new ILToken(Token.INSTR_TYPE, TypeOp.ldelema);
            inst_table["refanyval"]    = new ILToken(Token.INSTR_TYPE, TypeOp.refanyval);
            inst_table["mkrefany"]     = new ILToken(Token.INSTR_TYPE, TypeOp.mkrefany);
            inst_table["initobj"]      = new ILToken(Token.INSTR_TYPE, TypeOp.initobj);
            inst_table["sizeof"]       = new ILToken(Token.INSTR_TYPE, TypeOp.sizeOf);
            inst_table["stelem"]       = new ILToken(Token.INSTR_TYPE, TypeOp.stelem);
            inst_table["ldelem"]       = new ILToken(Token.INSTR_TYPE, TypeOp.ldelem);
            inst_table["stelem.any"]   = new ILToken(Token.INSTR_TYPE, TypeOp.stelem);
            inst_table["ldelem.any"]   = new ILToken(Token.INSTR_TYPE, TypeOp.ldelem);
            inst_table["constrained."] = new ILToken(Token.INSTR_TYPE, TypeOp.constrained);

            //
            // MethodRef operations
            //

            inst_table["jmp"]       = new ILToken(Token.INSTR_METHOD, MethodOp.jmp);
            inst_table["call"]      = new ILToken(Token.INSTR_METHOD, MethodOp.call);
            inst_table["callvirt"]  = new ILToken(Token.INSTR_METHOD, MethodOp.callvirt);
            inst_table["newobj"]    = new ILToken(Token.INSTR_METHOD, MethodOp.newobj);
            inst_table["ldftn"]     = new ILToken(Token.INSTR_METHOD, MethodOp.ldftn);
            inst_table["ldvirtftn"] = new ILToken(Token.INSTR_METHOD, MethodOp.ldvirtfn);

            //
            // FieldRef instructions
            //

            inst_table["ldfld"]   = new ILToken(Token.INSTR_FIELD, FieldOp.ldfld);
            inst_table["ldflda"]  = new ILToken(Token.INSTR_FIELD, FieldOp.ldflda);
            inst_table["stfld"]   = new ILToken(Token.INSTR_FIELD, FieldOp.stfld);
            inst_table["ldsfld"]  = new ILToken(Token.INSTR_FIELD, FieldOp.ldsfld);
            inst_table["ldsflda"] = new ILToken(Token.INSTR_FIELD, FieldOp.ldsflda);
            inst_table["stsfld"]  = new ILToken(Token.INSTR_FIELD, FieldOp.stsfld);

            //
            // Branch Instructions
            //

            inst_table["br"]      = new ILToken(Token.INSTR_BRTARGET, BranchOp.br);
            inst_table["brfalse"] = new ILToken(Token.INSTR_BRTARGET, BranchOp.brfalse);
            inst_table["brzero"]  = new ILToken(Token.INSTR_BRTARGET, BranchOp.brfalse);
            inst_table["brnull"]  = new ILToken(Token.INSTR_BRTARGET, BranchOp.brfalse);
            inst_table["brtrue"]  = new ILToken(Token.INSTR_BRTARGET, BranchOp.brtrue);
            inst_table["beq"]     = new ILToken(Token.INSTR_BRTARGET, BranchOp.beq);
            inst_table["bge"]     = new ILToken(Token.INSTR_BRTARGET, BranchOp.bge);
            inst_table["bgt"]     = new ILToken(Token.INSTR_BRTARGET, BranchOp.bgt);
            inst_table["ble"]     = new ILToken(Token.INSTR_BRTARGET, BranchOp.ble);
            inst_table["blt"]     = new ILToken(Token.INSTR_BRTARGET, BranchOp.blt);
            inst_table["bne.un"]  = new ILToken(Token.INSTR_BRTARGET, BranchOp.bne_un);
            inst_table["bge.un"]  = new ILToken(Token.INSTR_BRTARGET, BranchOp.bge_un);
            inst_table["bgt.un"]  = new ILToken(Token.INSTR_BRTARGET, BranchOp.bgt_un);
            inst_table["ble.un"]  = new ILToken(Token.INSTR_BRTARGET, BranchOp.ble_un);
            inst_table["blt.un"]  = new ILToken(Token.INSTR_BRTARGET, BranchOp.blt_un);
            inst_table["leave"]   = new ILToken(Token.INSTR_BRTARGET, BranchOp.leave);

            inst_table["br.s"]      = new ILToken(Token.INSTR_BRTARGET, BranchOp.br_s);
            inst_table["brfalse.s"] = new ILToken(Token.INSTR_BRTARGET, BranchOp.brfalse_s);
            inst_table["brtrue.s"]  = new ILToken(Token.INSTR_BRTARGET, BranchOp.brtrue_s);
            inst_table["beq.s"]     = new ILToken(Token.INSTR_BRTARGET, BranchOp.beq_s);
            inst_table["bge.s"]     = new ILToken(Token.INSTR_BRTARGET, BranchOp.bge_s);
            inst_table["bgt.s"]     = new ILToken(Token.INSTR_BRTARGET, BranchOp.bgt_s);
            inst_table["ble.s"]     = new ILToken(Token.INSTR_BRTARGET, BranchOp.ble_s);
            inst_table["blt.s"]     = new ILToken(Token.INSTR_BRTARGET, BranchOp.blt_s);
            inst_table["bne.un.s"]  = new ILToken(Token.INSTR_BRTARGET, BranchOp.bne_un_s);
            inst_table["bge.un.s"]  = new ILToken(Token.INSTR_BRTARGET, BranchOp.bge_un_s);
            inst_table["bgt.un.s"]  = new ILToken(Token.INSTR_BRTARGET, BranchOp.bgt_un_s);
            inst_table["ble.un.s"]  = new ILToken(Token.INSTR_BRTARGET, BranchOp.ble_un_s);
            inst_table["blt.un.s"]  = new ILToken(Token.INSTR_BRTARGET, BranchOp.blt_un_s);
            inst_table["leave.s"]   = new ILToken(Token.INSTR_BRTARGET, BranchOp.leave_s);

            //
            // Misc other instructions
            //

            inst_table["ldstr"]   = new ILToken(Token.INSTR_STRING, MiscInstr.ldstr);
            inst_table["ldc.r4"]  = new ILToken(Token.INSTR_R, MiscInstr.ldc_r4);
            inst_table["ldc.r8"]  = new ILToken(Token.INSTR_R, MiscInstr.ldc_r8);
            inst_table["ldc.i8"]  = new ILToken(Token.INSTR_I8, MiscInstr.ldc_i8);
            inst_table["switch"]  = new ILToken(Token.INSTR_SWITCH, MiscInstr._switch);
            inst_table["calli"]   = new ILToken(Token.INSTR_SIG, MiscInstr.calli);
            inst_table["ldtoken"] = new ILToken(Token.INSTR_TOK, MiscInstr.ldtoken);
        }
Ejemplo n.º 11
0
                private static bool EqImpl (ILToken t1, ILToken t2)
                {
                        bool res = false;
                        if ((t1 as object) != null) {
                                res = t1.Equals (t2);
                        } else {
                                res = ((t2 as object) == null);
                        }

                        return res;
                }
Ejemplo n.º 12
0
        public ILToken GetNextToken()
        {
            if (lastToken == ILToken.EOF)
            {
                return(ILToken.EOF);
            }

            int     ch;
            int     next;
            ILToken res = ILToken.EOF.Clone() as ILToken;


            while ((ch = reader.Read()) != -1)
            {
                // Comments
                if (ch == '/')
                {
                    next = reader.Peek();
                    if (next == '/')
                    {
                        // double-slash comment, skip to the end of the line.
                        for (reader.Read();
                             next != -1 && next != '\n';
                             next = reader.Read())
                        {
                            ;
                        }
                        continue;
                    }
                    else if (next == '*')
                    {
                        reader.Read();
                        for (next = reader.Read(); next != -1; next = reader.Read())
                        {
                            if (next == '*' && reader.Peek() == '/')
                            {
                                reader.Read();
                                goto end;
                            }
                        }
end:
                        continue;
                    }
                }

                // HEXBYTES are flagged by the parser otherwise it is
                // impossible to figure them out
                if (in_byte_array)
                {
                    string hx = String.Empty;

                    if (Char.IsWhiteSpace((char)ch))
                    {
                        continue;
                    }

                    if (ch == ')')
                    {
                        res = ILToken.CloseParens;
                        break;
                    }

                    if (!is_hex(ch))
                    {
                        throw new ILTokenizingException(reader.Location, ((char)ch).ToString());
                    }
                    hx += (char)ch;
                    if (is_hex(reader.Peek()))
                    {
                        hx += (char)reader.Read();
                    }
                    else if (!Char.IsWhiteSpace((char)reader.Peek()) && reader.Peek() != ')')
                    {
                        throw new ILTokenizingException(reader.Location,
                                                        ((char)reader.Peek()).ToString());
                    }
                    res.token = Token.HEXBYTE;
                    res.val   = Byte.Parse(hx, NumberStyles.HexNumber);

                    while (Char.IsWhiteSpace((char)reader.Peek()))
                    {
                        reader.Read();
                    }
                    break;
                }

                // Ellipsis
                if (ch == '.' && reader.Peek() == '.')
                {
                    reader.MarkLocation();
                    int ch2 = reader.Read();
                    if (reader.Peek() == '.')
                    {
                        res = ILToken.Ellipsis;
                        reader.Read();
                        break;
                    }
                    reader.Unread(ch2);
                    reader.RestoreLocation();
                }

                if (ch == '.' || ch == '#')
                {
                    next = reader.Peek();
                    if (ch == '.' && Char.IsDigit((char)next))
                    {
                        numBuilder.Start(ch);
                        reader.Unread(ch);
                        numBuilder.Build();
                        if (numBuilder.ResultToken != ILToken.Invalid)
                        {
                            res.CopyFrom(numBuilder.ResultToken);
                            break;
                        }
                    }
                    else
                    {
                        if (strBuilder.Start(next) && strBuilder.TokenId == Token.ID)
                        {
                            reader.MarkLocation();
                            string dirBody = strBuilder.Build();
                            string dir     = new string ((char)ch, 1) + dirBody;
                            if (IsDirective(dir))
                            {
                                res = ILTables.Directives [dir] as ILToken;
                            }
                            else
                            {
                                reader.Unread(dirBody.ToCharArray());
                                reader.RestoreLocation();
                                res = ILToken.Dot;
                            }
                        }
                        else
                        {
                            res = ILToken.Dot;
                        }
                        break;
                    }
                }

                // Numbers && Hexbytes
                if (numBuilder.Start(ch))
                {
                    if ((ch == '-') && !(Char.IsDigit((char)reader.Peek())))
                    {
                        res = ILToken.Dash;
                        break;
                    }
                    else
                    {
                        reader.Unread(ch);
                        numBuilder.Build();
                        if (numBuilder.ResultToken != ILToken.Invalid)
                        {
                            res.CopyFrom(numBuilder.ResultToken);
                            break;
                        }
                    }
                }

                // Punctuation
                ILToken punct = ILToken.GetPunctuation(ch);
                if (punct != null)
                {
                    if (punct == ILToken.Colon && reader.Peek() == ':')
                    {
                        reader.Read();
                        res = ILToken.DoubleColon;
                    }
                    else
                    {
                        res = punct;
                    }
                    break;
                }

                // ID | QSTRING | SQSTRING | INSTR_* | KEYWORD
                if (strBuilder.Start(ch))
                {
                    reader.Unread(ch);
                    string val = strBuilder.Build();
                    if (strBuilder.TokenId == Token.ID)
                    {
                        ILToken opcode;
                        next = reader.Peek();
                        if (next == '.')
                        {
                            reader.MarkLocation();
                            reader.Read();
                            next = reader.Peek();
                            if (IsIdChar((char)next))
                            {
                                string opTail   = BuildId();
                                string full_str = String.Format("{0}.{1}", val, opTail);
                                opcode = InstrTable.GetToken(full_str);

                                if (opcode == null)
                                {
                                    if (strBuilder.TokenId != Token.ID)
                                    {
                                        reader.Unread(opTail.ToCharArray());
                                        reader.Unread('.');
                                        reader.RestoreLocation();
                                        res.val = val;
                                    }
                                    else
                                    {
                                        res.token = Token.COMP_NAME;
                                        res.val   = full_str;
                                    }
                                    break;
                                }
                                else
                                {
                                    res = opcode;
                                    break;
                                }
                            }
                            else if (Char.IsWhiteSpace((char)next))
                            {
                                // Handle 'tail.' and 'unaligned.'
                                opcode = InstrTable.GetToken(val + ".");
                                if (opcode != null)
                                {
                                    res = opcode;
                                    break;
                                }
                                // Let the parser handle the dot
                                reader.Unread('.');
                            }
                        }
                        opcode = InstrTable.GetToken(val);
                        if (opcode != null)
                        {
                            res = opcode;
                            break;
                        }
                        if (IsKeyword(val))
                        {
                            res = ILTables.Keywords [val] as ILToken;
                            break;
                        }
                    }

                    res.token = strBuilder.TokenId;
                    res.val   = val;
                    break;
                }
            }

            OnNewToken(res);
            lastToken.CopyFrom(res);
            return(res);
        }
Ejemplo n.º 13
0
 private void Reset ()
 {
         result = ILToken.Invalid.Clone() as ILToken;
 }
Ejemplo n.º 14
0
 public NewTokenEventArgs(ILToken token)
 {
     Token = token;
 }
Ejemplo n.º 15
0
 /// <summary>
 /// </summary>
 /// <param name="that"></param>
 public virtual void CopyFrom (ILToken that)
 {
         this.token = that.token;
         this.val = that.val;
 }
Ejemplo n.º 16
0
 /// <summary>
 /// </summary>
 /// <param name="that"></param>
 public virtual void CopyFrom(ILToken that)
 {
     this.token = that.token;
     this.val   = that.val;
 }
Ejemplo n.º 17
0
 public NewTokenEventArgs (ILToken token)
 {
         Token = token;
 }
Ejemplo n.º 18
0
 private void OnNewToken (ILToken token)
 {
         if (NewTokenEvent != null)
                 NewTokenEvent (this, new NewTokenEventArgs (token));
 }
Ejemplo n.º 19
0
 /// <summary>
 /// </summary>
 /// <param name="that"></param>
 public ILToken(ILToken that)
 {
     this.token = that.token;
     this.val   = that.val;
 }
Ejemplo n.º 20
0
                private static void CreateInstTable ()
                {
                        inst_table = new Hashtable ();

                        inst_table["nop"] = new ILToken (Token.INSTR_NONE, Op.nop);
                        inst_table["break"] = new ILToken (Token.INSTR_NONE, Op.breakOp);
                        inst_table["ldarg.0"] = new ILToken (Token.INSTR_NONE, Op.ldarg_0);
                        inst_table["ldarg.1"] = new ILToken (Token.INSTR_NONE, Op.ldarg_1);
                        inst_table["ldarg.2"] = new ILToken (Token.INSTR_NONE, Op.ldarg_2);
                        inst_table["ldarg.3"] = new ILToken (Token.INSTR_NONE, Op.ldarg_3);
                        inst_table["ldloc.0"] = new ILToken (Token.INSTR_NONE, Op.ldloc_0);
                        inst_table["ldloc.1"] = new ILToken (Token.INSTR_NONE, Op.ldloc_1);
                        inst_table["ldloc.2"] = new ILToken (Token.INSTR_NONE, Op.ldloc_2);
                        inst_table["ldloc.3"] = new ILToken (Token.INSTR_NONE, Op.ldloc_3);
                        inst_table["stloc.0"] = new ILToken (Token.INSTR_NONE, Op.stloc_0);
                        inst_table["stloc.1"] = new ILToken (Token.INSTR_NONE, Op.stloc_1);
                        inst_table["stloc.2"] = new ILToken (Token.INSTR_NONE, Op.stloc_2);
                        inst_table["stloc.3"] = new ILToken (Token.INSTR_NONE, Op.stloc_3);
                        inst_table["ldnull"] = new ILToken (Token.INSTR_NONE, Op.ldnull);
                        inst_table["ldc.i4.m1"] = new ILToken (Token.INSTR_NONE, Op.ldc_i4_m1);
                        inst_table["ldc.i4.M1"] = new ILToken (Token.INSTR_NONE, Op.ldc_i4_m1);
                        inst_table["ldc.i4.0"] = new ILToken (Token.INSTR_NONE, Op.ldc_i4_0);
                        inst_table["ldc.i4.1"] = new ILToken (Token.INSTR_NONE, Op.ldc_i4_1);
                        inst_table["ldc.i4.2"] = new ILToken (Token.INSTR_NONE, Op.ldc_i4_2);
                        inst_table["ldc.i4.3"] = new ILToken (Token.INSTR_NONE, Op.ldc_i4_3);
                        inst_table["ldc.i4.4"] = new ILToken (Token.INSTR_NONE, Op.ldc_i4_4);
                        inst_table["ldc.i4.5"] = new ILToken (Token.INSTR_NONE, Op.ldc_i4_5);
                        inst_table["ldc.i4.6"] = new ILToken (Token.INSTR_NONE, Op.ldc_i4_6);
                        inst_table["ldc.i4.7"] = new ILToken (Token.INSTR_NONE, Op.ldc_i4_7);
                        inst_table["ldc.i4.8"] = new ILToken (Token.INSTR_NONE, Op.ldc_i4_8);
                        inst_table["dup"] = new ILToken (Token.INSTR_NONE, Op.dup);
                        inst_table["pop"] = new ILToken (Token.INSTR_NONE, Op.pop);
                        inst_table["ret"] = new ILToken (Token.INSTR_NONE, Op.ret);
                        inst_table["ldind.i1"] = new ILToken (Token.INSTR_NONE, Op.ldind_i1);
                        inst_table["ldind.u1"] = new ILToken (Token.INSTR_NONE, Op.ldind_u1);
                        inst_table["ldind.i2"] = new ILToken (Token.INSTR_NONE, Op.ldind_i2);
                        inst_table["ldind.u2"] = new ILToken (Token.INSTR_NONE, Op.ldind_u2);
                        inst_table["ldind.i4"] = new ILToken (Token.INSTR_NONE, Op.ldind_i4);
                        inst_table["ldind.u4"] = new ILToken (Token.INSTR_NONE, Op.ldind_u4);
                        inst_table["ldind.i8"] = new ILToken (Token.INSTR_NONE, Op.ldind_i8);
                        inst_table["ldind.u8"] = new ILToken (Token.INSTR_NONE, Op.ldind_i8);
                        inst_table["ldind.i"] = new ILToken (Token.INSTR_NONE, Op.ldind_i);
                        inst_table["ldind.r4"] = new ILToken (Token.INSTR_NONE, Op.ldind_r4);
                        inst_table["ldind.r8"] = new ILToken (Token.INSTR_NONE, Op.ldind_r8);
                        inst_table["ldind.ref"] = new ILToken (Token.INSTR_NONE, Op.ldind_ref);
                        inst_table["stind.ref"] = new ILToken (Token.INSTR_NONE, Op.stind_ref);
                        inst_table["stind.i1"] = new ILToken (Token.INSTR_NONE, Op.stind_i1);
                        inst_table["stind.i2"] = new ILToken (Token.INSTR_NONE, Op.stind_i2);
                        inst_table["stind.i4"] = new ILToken (Token.INSTR_NONE, Op.stind_i4);
                        inst_table["stind.i8"] = new ILToken (Token.INSTR_NONE, Op.stind_i8);
                        inst_table["stind.r4"] = new ILToken (Token.INSTR_NONE, Op.stind_r4);
                        inst_table["stind.r8"] = new ILToken (Token.INSTR_NONE, Op.stind_r8);
                        inst_table["add"] = new ILToken (Token.INSTR_NONE, Op.add);
                        inst_table["sub"] = new ILToken (Token.INSTR_NONE, Op.sub);
                        inst_table["mul"] = new ILToken (Token.INSTR_NONE, Op.mul);
                        inst_table["div"] = new ILToken (Token.INSTR_NONE, Op.div);
                        inst_table["div.un"] = new ILToken (Token.INSTR_NONE, Op.div_un);
                        inst_table["rem"] = new ILToken (Token.INSTR_NONE, Op.rem);
                        inst_table["rem.un"] = new ILToken (Token.INSTR_NONE, Op.rem_un);
                        inst_table["and"] = new ILToken (Token.INSTR_NONE, Op.and);
                        inst_table["or"] = new ILToken (Token.INSTR_NONE, Op.or);
                        inst_table["xor"] = new ILToken (Token.INSTR_NONE, Op.xor);
                        inst_table["shl"] = new ILToken (Token.INSTR_NONE, Op.shl);
                        inst_table["shr"] = new ILToken (Token.INSTR_NONE, Op.shr);
                        inst_table["shr.un"] = new ILToken (Token.INSTR_NONE, Op.shr_un);
                        inst_table["neg"] = new ILToken (Token.INSTR_NONE, Op.neg);
                        inst_table["not"] = new ILToken (Token.INSTR_NONE, Op.not);
                        inst_table["conv.i1"] = new ILToken (Token.INSTR_NONE, Op.conv_i1);
                        inst_table["conv.i2"] = new ILToken (Token.INSTR_NONE, Op.conv_i2);
                        inst_table["conv.i4"] = new ILToken (Token.INSTR_NONE, Op.conv_i4);
                        inst_table["conv.i8"] = new ILToken (Token.INSTR_NONE, Op.conv_i8);
                        inst_table["conv.r4"] = new ILToken (Token.INSTR_NONE, Op.conv_r4);
                        inst_table["conv.r8"] = new ILToken (Token.INSTR_NONE, Op.conv_r8);
                        inst_table["conv.u4"] = new ILToken (Token.INSTR_NONE, Op.conv_u4);
                        inst_table["conv.u8"] = new ILToken (Token.INSTR_NONE, Op.conv_u8);
                        inst_table["conv.r.un"] = new ILToken (Token.INSTR_NONE, Op.conv_r_un);
                        inst_table["throw"] = new ILToken (Token.INSTR_NONE, Op.throwOp);
                        inst_table["conv.ovf.i1.un"] = new ILToken (Token.INSTR_NONE, Op.conv_ovf_i1_un);
                        inst_table["conv.ovf.i2.un"] = new ILToken (Token.INSTR_NONE, Op.conv_ovf_i2_un);
                        inst_table["conv.ovf.i4.un"] = new ILToken (Token.INSTR_NONE, Op.conv_ovf_i4_un);
                        inst_table["conv.ovf.i8.un"] = new ILToken (Token.INSTR_NONE, Op.conv_ovf_i8_un);
                        inst_table["conf.ovf.u1.un"] = new ILToken (Token.INSTR_NONE, Op.conf_ovf_u1_un);
                        inst_table["conv.ovf.u2.un"] = new ILToken (Token.INSTR_NONE, Op.conv_ovf_u2_un);
                        inst_table["conv.ovf.u4.un"] = new ILToken (Token.INSTR_NONE, Op.conv_ovf_u4_un);
                        inst_table["conv.ovf.u8.un"] = new ILToken (Token.INSTR_NONE, Op.conv_ovf_u8_un);
                        inst_table["conv.ovf.i.un"] = new ILToken (Token.INSTR_NONE, Op.conv_ovf_i_un);
                        inst_table["conv.ovf.u.un"] = new ILToken (Token.INSTR_NONE, Op.conv_ovf_u_un);
                        inst_table["ldlen"] = new ILToken (Token.INSTR_NONE, Op.ldlen);
                        inst_table["ldelem.i1"] = new ILToken (Token.INSTR_NONE, Op.ldelem_i1);
                        inst_table["ldelem.u1"] = new ILToken (Token.INSTR_NONE, Op.ldelem_u1);
                        inst_table["ldelem.i2"] = new ILToken (Token.INSTR_NONE, Op.ldelem_i2);
                        inst_table["ldelem.u2"] = new ILToken (Token.INSTR_NONE, Op.ldelem_u2);
                        inst_table["ldelem.i4"] = new ILToken (Token.INSTR_NONE, Op.ldelem_i4);
                        inst_table["ldelem.u4"] = new ILToken (Token.INSTR_NONE, Op.ldelem_u4);
                        inst_table["ldelem.i8"] = new ILToken (Token.INSTR_NONE, Op.ldelem_i8);
                        inst_table["ldelem.u8"] = new ILToken (Token.INSTR_NONE, Op.ldelem_i8);
                        inst_table["ldelem.i"] = new ILToken (Token.INSTR_NONE, Op.ldelem_i);
                        inst_table["ldelem.r4"] = new ILToken (Token.INSTR_NONE, Op.ldelem_r4);
                        inst_table["ldelem.r8"] = new ILToken (Token.INSTR_NONE, Op.ldelem_r8);
                        inst_table["ldelem.ref"] = new ILToken (Token.INSTR_NONE, Op.ldelem_ref);
                        inst_table["stelem.i"] = new ILToken (Token.INSTR_NONE, Op.stelem_i);
                        inst_table["stelem.i1"] = new ILToken (Token.INSTR_NONE, Op.stelem_i1);
                        inst_table["stelem.i2"] = new ILToken (Token.INSTR_NONE, Op.stelem_i2);
                        inst_table["stelem.i4"] = new ILToken (Token.INSTR_NONE, Op.stelem_i4);
                        inst_table["stelem.i8"] = new ILToken (Token.INSTR_NONE, Op.stelem_i8);
                        inst_table["stelem.r4"] = new ILToken (Token.INSTR_NONE, Op.stelem_r4);
                        inst_table["stelem.r8"] = new ILToken (Token.INSTR_NONE, Op.stelem_r8);
                        inst_table["stelem.ref"] = new ILToken (Token.INSTR_NONE, Op.stelem_ref);
                        inst_table["conv.ovf.i1"] = new ILToken (Token.INSTR_NONE, Op.conv_ovf_i1);
                        inst_table["conv.ovf.u1"] = new ILToken (Token.INSTR_NONE, Op.conv_ovf_u1);
                        inst_table["conv.ovf.i2"] = new ILToken (Token.INSTR_NONE, Op.conv_ovf_i2);
                        inst_table["conv.ovf.u2"] = new ILToken (Token.INSTR_NONE, Op.conv_ovf_u2);
                        inst_table["conv.ovf.i4"] = new ILToken (Token.INSTR_NONE, Op.conv_ovf_i4);
                        inst_table["conv.ovf.u4"] = new ILToken (Token.INSTR_NONE, Op.conv_ovf_u4);
                        inst_table["conv.ovf.i8"] = new ILToken (Token.INSTR_NONE, Op.conv_ovf_i8);
                        inst_table["conv.ovf.u8"] = new ILToken (Token.INSTR_NONE, Op.conv_ovf_u8);
                        inst_table["conv.ovf.u1.un"] = new ILToken (Token.INSTR_NONE, Op.conf_ovf_u1_un);
                        inst_table["conv.ovf.u2.un"] = new ILToken (Token.INSTR_NONE, Op.conv_ovf_u2_un);
                        inst_table["conv.ovf.u4.un"] = new ILToken (Token.INSTR_NONE, Op.conv_ovf_u4_un);
                        inst_table["conv.ovf.u8.un"] = new ILToken (Token.INSTR_NONE, Op.conv_ovf_u8_un);
                        inst_table["conv.ovf.i1.un"] = new ILToken (Token.INSTR_NONE, Op.conv_ovf_i1_un);
                        inst_table["conv.ovf.i2.un"] = new ILToken (Token.INSTR_NONE, Op.conv_ovf_i2_un);
                        inst_table["conv.ovf.i4.un"] = new ILToken (Token.INSTR_NONE, Op.conv_ovf_i4_un);
                        inst_table["conv.ovf.i8.un"] = new ILToken (Token.INSTR_NONE, Op.conv_ovf_i8_un);
                        inst_table["ckfinite"] = new ILToken (Token.INSTR_NONE, Op.ckfinite);
                        inst_table["conv.u2"] = new ILToken (Token.INSTR_NONE, Op.conv_u2);
                        inst_table["conv.u1"] = new ILToken (Token.INSTR_NONE, Op.conv_u1);
                        inst_table["conv.i"] = new ILToken (Token.INSTR_NONE, Op.conv_i);
                        inst_table["conv.ovf.i"] = new ILToken (Token.INSTR_NONE, Op.conv_ovf_i);
                        inst_table["conv.ovf.u"] = new ILToken (Token.INSTR_NONE, Op.conv_ovf_u);
                        inst_table["add.ovf"] = new ILToken (Token.INSTR_NONE, Op.add_ovf);
                        inst_table["add.ovf.un"] = new ILToken (Token.INSTR_NONE, Op.add_ovf_un);
                        inst_table["mul.ovf"] = new ILToken (Token.INSTR_NONE, Op.mul_ovf);
                        inst_table["mul.ovf.un"] = new ILToken (Token.INSTR_NONE, Op.mul_ovf_un);
                        inst_table["sub.ovf"] = new ILToken (Token.INSTR_NONE, Op.sub_ovf);
                        inst_table["sub.ovf.un"] = new ILToken (Token.INSTR_NONE, Op.sub_ovf_un);
                        inst_table["endfinally"] = new ILToken (Token.INSTR_NONE, Op.endfinally);
                        // endfault is really just an alias for endfinally
                        inst_table["endfault"] = new ILToken (Token.INSTR_NONE, Op.endfinally);
                        inst_table["stind.i"] = new ILToken (Token.INSTR_NONE, Op.stind_i);
                        inst_table["conv.u"] = new ILToken (Token.INSTR_NONE, Op.conv_u);
                        inst_table["arglist"] = new ILToken (Token.INSTR_NONE, Op.arglist);
                        inst_table["ceq"] = new ILToken (Token.INSTR_NONE, Op.ceq);
                        inst_table["cgt"] = new ILToken (Token.INSTR_NONE, Op.cgt);
                        inst_table["cgt.un"] = new ILToken (Token.INSTR_NONE, Op.cgt_un);
                        inst_table["clt"] = new ILToken (Token.INSTR_NONE, Op.clt);
                        inst_table["clt.un"] = new ILToken (Token.INSTR_NONE, Op.clt_un);
                        inst_table["localloc"] = new ILToken (Token.INSTR_NONE, Op.localloc);
                        inst_table["endfilter"] = new ILToken (Token.INSTR_NONE, Op.endfilter);
                        inst_table["volatile."] = new ILToken (Token.INSTR_NONE, Op.volatile_);
                        inst_table["tail."] = new ILToken (Token.INSTR_NONE, Op.tail_);
                        inst_table["cpblk"] = new ILToken (Token.INSTR_NONE, Op.cpblk);
                        inst_table["initblk"] = new ILToken (Token.INSTR_NONE, Op.initblk);
                        inst_table["rethrow"] = new ILToken (Token.INSTR_NONE, Op.rethrow);
                        inst_table["refanytype"] = new ILToken (Token.INSTR_NONE, Op.refanytype);
                        inst_table["readonly."] = new ILToken (Token.INSTR_NONE, Op.readonly_);

                        //
                        // Int operations
                        //

                        // param
                        inst_table["ldarg"] = new ILToken (Token.INSTR_PARAM, IntOp.ldarg);
                        inst_table["ldarga"] = new ILToken (Token.INSTR_PARAM, IntOp.ldarga);
                        inst_table["starg"] = new ILToken (Token.INSTR_PARAM, IntOp.starg);
                        inst_table["ldarg.s"] = new ILToken (Token.INSTR_PARAM, IntOp.ldarg_s);
                        inst_table["ldarga.s"] = new ILToken (Token.INSTR_PARAM, IntOp.ldarga_s);
                        inst_table["starg.s"] = new ILToken (Token.INSTR_PARAM, IntOp.starg_s);

                        // local
                        inst_table["ldloc"] = new ILToken (Token.INSTR_LOCAL, IntOp.ldloc);
                        inst_table["ldloca"] = new ILToken (Token.INSTR_LOCAL, IntOp.ldloca);
                        inst_table["stloc"] = new ILToken (Token.INSTR_LOCAL, IntOp.stloc);
                        inst_table["ldloc.s"] = new ILToken (Token.INSTR_LOCAL, IntOp.ldloc_s);
                        inst_table["ldloca.s"] = new ILToken (Token.INSTR_LOCAL, IntOp.ldloca_s);
                        inst_table["stloc.s"] = new ILToken (Token.INSTR_LOCAL, IntOp.stloc_s);

                        inst_table["ldc.i4.s"] = new ILToken (Token.INSTR_I, IntOp.ldc_i4_s);
                        inst_table["ldc.i4"] = new ILToken (Token.INSTR_I, IntOp.ldc_i4);
                        inst_table["unaligned."] =  new ILToken (Token.INSTR_I, IntOp.unaligned);

                        //
                        // Type operations
                        //

                        inst_table["cpobj"] = new ILToken (Token.INSTR_TYPE, TypeOp.cpobj);
                        inst_table["ldobj"] = new ILToken (Token.INSTR_TYPE, TypeOp.ldobj);
                        inst_table["castclass"] = new ILToken (Token.INSTR_TYPE, TypeOp.castclass);
                        inst_table["isinst"] = new ILToken (Token.INSTR_TYPE, TypeOp.isinst);
                        inst_table["unbox"] = new ILToken (Token.INSTR_TYPE, TypeOp.unbox);
                        inst_table["unbox.any"] = new ILToken (Token.INSTR_TYPE, TypeOp.unbox_any);
                        inst_table["stobj"] = new ILToken (Token.INSTR_TYPE, TypeOp.stobj);
                        inst_table["box"] = new ILToken (Token.INSTR_TYPE, TypeOp.box);
                        inst_table["newarr"] = new ILToken (Token.INSTR_TYPE, TypeOp.newarr);
                        inst_table["ldelema"] = new ILToken (Token.INSTR_TYPE, TypeOp.ldelema);
                        inst_table["refanyval"] = new ILToken (Token.INSTR_TYPE, TypeOp.refanyval);
                        inst_table["mkrefany"] = new ILToken (Token.INSTR_TYPE, TypeOp.mkrefany);
                        inst_table["initobj"] = new ILToken (Token.INSTR_TYPE, TypeOp.initobj);
                        inst_table["sizeof"] = new ILToken (Token.INSTR_TYPE, TypeOp.sizeOf);
                        inst_table["stelem"] = new ILToken (Token.INSTR_TYPE, TypeOp.stelem);
                        inst_table["ldelem"] = new ILToken (Token.INSTR_TYPE, TypeOp.ldelem);
                        inst_table["stelem.any"] = new ILToken (Token.INSTR_TYPE, TypeOp.stelem);
                        inst_table["ldelem.any"] = new ILToken (Token.INSTR_TYPE, TypeOp.ldelem);
                        inst_table["constrained."] = new ILToken (Token.INSTR_TYPE, TypeOp.constrained);

                        //
                        // MethodRef operations
                        //

                        inst_table["jmp"] = new ILToken (Token.INSTR_METHOD, MethodOp.jmp);
                        inst_table["call"] = new ILToken (Token.INSTR_METHOD, MethodOp.call);
                        inst_table["callvirt"] = new ILToken (Token.INSTR_METHOD, MethodOp.callvirt);
                        inst_table["newobj"] = new ILToken (Token.INSTR_METHOD, MethodOp.newobj);
                        inst_table["ldftn"] = new ILToken (Token.INSTR_METHOD, MethodOp.ldftn);
                        inst_table["ldvirtftn"] = new ILToken (Token.INSTR_METHOD, MethodOp.ldvirtfn);

                        //
                        // FieldRef instructions
                        //

                        inst_table["ldfld"] = new ILToken (Token.INSTR_FIELD, FieldOp.ldfld);
                        inst_table["ldflda"] = new ILToken (Token.INSTR_FIELD, FieldOp.ldflda);
                        inst_table["stfld"] = new ILToken (Token.INSTR_FIELD, FieldOp.stfld);
                        inst_table["ldsfld"] = new ILToken (Token.INSTR_FIELD, FieldOp.ldsfld);
                        inst_table["ldsflda"] = new ILToken (Token.INSTR_FIELD, FieldOp.ldsflda);
                        inst_table["stsfld"] = new ILToken (Token.INSTR_FIELD, FieldOp.stsfld);

                        //
                        // Branch Instructions
                        //

                        inst_table["br"] = new ILToken (Token.INSTR_BRTARGET, BranchOp.br);
                        inst_table["brfalse"] = new ILToken (Token.INSTR_BRTARGET, BranchOp.brfalse);
                        inst_table["brzero"] = new ILToken (Token.INSTR_BRTARGET, BranchOp.brfalse);
                        inst_table["brnull"] = new ILToken (Token.INSTR_BRTARGET, BranchOp.brfalse);
                        inst_table["brtrue"] = new ILToken (Token.INSTR_BRTARGET, BranchOp.brtrue);
                        inst_table["beq"] = new ILToken (Token.INSTR_BRTARGET, BranchOp.beq);
                        inst_table["bge"] = new ILToken (Token.INSTR_BRTARGET, BranchOp.bge);
                        inst_table["bgt"] = new ILToken (Token.INSTR_BRTARGET, BranchOp.bgt);
                        inst_table["ble"] = new ILToken (Token.INSTR_BRTARGET, BranchOp.ble);
                        inst_table["blt"] = new ILToken (Token.INSTR_BRTARGET, BranchOp.blt);
                        inst_table["bne.un"] = new ILToken (Token.INSTR_BRTARGET, BranchOp.bne_un);
                        inst_table["bge.un"] = new ILToken (Token.INSTR_BRTARGET, BranchOp.bge_un);
                        inst_table["bgt.un"] = new ILToken (Token.INSTR_BRTARGET, BranchOp.bgt_un);
                        inst_table["ble.un"] = new ILToken (Token.INSTR_BRTARGET, BranchOp.ble_un);
                        inst_table["blt.un"] = new ILToken (Token.INSTR_BRTARGET, BranchOp.blt_un);
                        inst_table["leave"] = new ILToken (Token.INSTR_BRTARGET, BranchOp.leave);

                        inst_table["br.s"] = new ILToken (Token.INSTR_BRTARGET, BranchOp.br_s);
                        inst_table["brfalse.s"] = new ILToken (Token.INSTR_BRTARGET, BranchOp.brfalse_s);
                        inst_table["brtrue.s"] = new ILToken (Token.INSTR_BRTARGET, BranchOp.brtrue_s);
                        inst_table["beq.s"] = new ILToken (Token.INSTR_BRTARGET, BranchOp.beq_s);
                        inst_table["bge.s"] = new ILToken (Token.INSTR_BRTARGET, BranchOp.bge_s);
                        inst_table["bgt.s"] = new ILToken (Token.INSTR_BRTARGET, BranchOp.bgt_s);
                        inst_table["ble.s"] = new ILToken (Token.INSTR_BRTARGET, BranchOp.ble_s);
                        inst_table["blt.s"] = new ILToken (Token.INSTR_BRTARGET, BranchOp.blt_s);
                        inst_table["bne.un.s"] = new ILToken (Token.INSTR_BRTARGET, BranchOp.bne_un_s);
                        inst_table["bge.un.s"] = new ILToken (Token.INSTR_BRTARGET, BranchOp.bge_un_s);
                        inst_table["bgt.un.s"] = new ILToken (Token.INSTR_BRTARGET, BranchOp.bgt_un_s);
                        inst_table["ble.un.s"] = new ILToken (Token.INSTR_BRTARGET, BranchOp.ble_un_s);
                        inst_table["blt.un.s"] = new ILToken (Token.INSTR_BRTARGET, BranchOp.blt_un_s);
                        inst_table["leave.s"] = new ILToken (Token.INSTR_BRTARGET, BranchOp.leave_s);

                        //
                        // Misc other instructions
                        //

                        inst_table["ldstr"] = new ILToken (Token.INSTR_STRING, MiscInstr.ldstr);
                        inst_table["ldc.r4"] = new ILToken (Token.INSTR_R, MiscInstr.ldc_r4);
                        inst_table["ldc.r8"] = new ILToken (Token.INSTR_R, MiscInstr.ldc_r8);
                        inst_table["ldc.i8"] = new ILToken (Token.INSTR_I8, MiscInstr.ldc_i8);
                        inst_table["switch"] = new ILToken (Token.INSTR_SWITCH, MiscInstr._switch);
                        inst_table["calli"] = new ILToken (Token.INSTR_SIG, MiscInstr.calli);
                        inst_table["ldtoken"] = new ILToken (Token.INSTR_TOK, MiscInstr.ldtoken);
                }
Ejemplo n.º 21
0
 /// <summary>
 /// </summary>
 /// <param name="that"></param>
 public ILToken (ILToken that)
 {
         this.token = that.token;
         this.val = that.val;
 }