⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 code.java

📁 这是实现Javac功能的GJC的最新源码
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
      */    public void endScopes(int first) {        if (varDebugInfo)            for (int i = first; i < nextreg; i++)                endScope(i);        nextreg = first;    }    /**      * How opcodes affect the stack size.      *  Opcodes with stackdiff value -999 need to be teated specially.      *  Opcodes with stackdiff value < -1000 are jumps after which code is dead.      */    public static final int[] stackdiff = new int[ByteCodeCount];    static {        stackdiff[nop] = 0;        stackdiff[aconst_null] = 1;        stackdiff[iconst_m1] = 1;        stackdiff[iconst_0] = 1;        stackdiff[iconst_1] = 1;        stackdiff[iconst_2] = 1;        stackdiff[iconst_3] = 1;        stackdiff[iconst_4] = 1;        stackdiff[iconst_5] = 1;        stackdiff[lconst_0] = 2;        stackdiff[lconst_1] = 2;        stackdiff[fconst_0] = 1;        stackdiff[fconst_1] = 1;        stackdiff[fconst_2] = 1;        stackdiff[dconst_0] = 2;        stackdiff[dconst_1] = 2;        stackdiff[bipush] = 1;        stackdiff[sipush] = 1;        stackdiff[ldc1] = -999;        stackdiff[ldc2] = -999;        stackdiff[ldc2w] = -999;        stackdiff[iload] = 1;        stackdiff[lload] = 2;        stackdiff[fload] = 1;        stackdiff[dload] = 2;        stackdiff[aload] = 1;        stackdiff[iload_0] = 1;        stackdiff[lload_0] = 2;        stackdiff[fload_0] = 1;        stackdiff[dload_0] = 2;        stackdiff[aload_0] = 1;        stackdiff[iload_1] = 1;        stackdiff[lload_1] = 2;        stackdiff[fload_1] = 1;        stackdiff[dload_1] = 2;        stackdiff[aload_1] = 1;        stackdiff[iload_2] = 1;        stackdiff[lload_2] = 2;        stackdiff[fload_2] = 1;        stackdiff[dload_2] = 2;        stackdiff[aload_2] = 1;        stackdiff[iload_3] = 1;        stackdiff[lload_3] = 2;        stackdiff[fload_3] = 1;        stackdiff[dload_3] = 2;        stackdiff[aload_3] = 1;        stackdiff[iaload] = -1;        stackdiff[laload] = 0;        stackdiff[faload] = -1;        stackdiff[daload] = 0;        stackdiff[aaload] = -1;        stackdiff[baload] = -1;        stackdiff[caload] = -1;        stackdiff[saload] = -1;        stackdiff[istore] = -1;        stackdiff[lstore] = -2;        stackdiff[fstore] = -1;        stackdiff[dstore] = -2;        stackdiff[astore] = -1;        stackdiff[istore_0] = -1;        stackdiff[lstore_0] = -2;        stackdiff[fstore_0] = -1;        stackdiff[dstore_0] = -2;        stackdiff[astore_0] = -1;        stackdiff[istore_1] = -1;        stackdiff[lstore_1] = -2;        stackdiff[fstore_1] = -1;        stackdiff[dstore_1] = -2;        stackdiff[astore_1] = -1;        stackdiff[istore_2] = -1;        stackdiff[lstore_2] = -2;        stackdiff[fstore_2] = -1;        stackdiff[dstore_2] = -2;        stackdiff[astore_2] = -1;        stackdiff[istore_3] = -1;        stackdiff[lstore_3] = -2;        stackdiff[fstore_3] = -1;        stackdiff[dstore_3] = -2;        stackdiff[astore_3] = -1;        stackdiff[iastore] = -3;        stackdiff[lastore] = -4;        stackdiff[fastore] = -3;        stackdiff[dastore] = -4;        stackdiff[aastore] = -3;        stackdiff[bastore] = -3;        stackdiff[castore] = -3;        stackdiff[sastore] = -3;        stackdiff[pop] = -1;        stackdiff[pop2] = -2;        stackdiff[dup] = 1;        stackdiff[dup_x1] = 1;        stackdiff[dup_x2] = 1;        stackdiff[dup2] = 2;        stackdiff[dup2_x1] = 2;        stackdiff[dup2_x2] = 2;        stackdiff[swap] = 0;        stackdiff[iadd] = -1;        stackdiff[ladd] = -2;        stackdiff[fadd] = -1;        stackdiff[dadd] = -2;        stackdiff[isub] = -1;        stackdiff[lsub] = -2;        stackdiff[fsub] = -1;        stackdiff[dsub] = -2;        stackdiff[imul] = -1;        stackdiff[lmul] = -2;        stackdiff[fmul] = -1;        stackdiff[dmul] = -2;        stackdiff[idiv] = -1;        stackdiff[ldiv] = -2;        stackdiff[fdiv] = -1;        stackdiff[ddiv] = -2;        stackdiff[imod] = -1;        stackdiff[lmod] = -2;        stackdiff[fmod] = -1;        stackdiff[dmod] = -2;        stackdiff[ineg] = 0;        stackdiff[lneg] = 0;        stackdiff[fneg] = 0;        stackdiff[dneg] = 0;        stackdiff[ishl] = -1;        stackdiff[lshl] = -1;        stackdiff[ishr] = -1;        stackdiff[lshr] = -1;        stackdiff[iushr] = -1;        stackdiff[lushr] = -1;        stackdiff[iand] = -1;        stackdiff[land] = -2;        stackdiff[ior] = -1;        stackdiff[lor] = -2;        stackdiff[ixor] = -1;        stackdiff[lxor] = -2;        stackdiff[iinc] = 0;        stackdiff[i2l] = 1;        stackdiff[i2f] = 0;        stackdiff[i2d] = 1;        stackdiff[l2i] = -1;        stackdiff[l2f] = -1;        stackdiff[l2d] = 0;        stackdiff[f2i] = 0;        stackdiff[f2l] = 1;        stackdiff[f2d] = 1;        stackdiff[d2i] = -1;        stackdiff[d2l] = 0;        stackdiff[d2f] = -1;        stackdiff[int2byte] = 0;        stackdiff[int2char] = 0;        stackdiff[int2short] = 0;        stackdiff[lcmp] = -3;        stackdiff[fcmpl] = -1;        stackdiff[fcmpg] = -1;        stackdiff[dcmpl] = -3;        stackdiff[dcmpg] = -3;        stackdiff[ifeq] = -1;        stackdiff[ifne] = -1;        stackdiff[iflt] = -1;        stackdiff[ifge] = -1;        stackdiff[ifgt] = -1;        stackdiff[ifle] = -1;        stackdiff[if_icmpeq] = -2;        stackdiff[if_icmpne] = -2;        stackdiff[if_icmplt] = -2;        stackdiff[if_icmpge] = -2;        stackdiff[if_icmpgt] = -2;        stackdiff[if_icmple] = -2;        stackdiff[if_acmpeq] = -2;        stackdiff[if_acmpne] = -2;        stackdiff[goto_] = 0;        stackdiff[jsr] = 0;        stackdiff[ret] = 0;        stackdiff[tableswitch] = -1;        stackdiff[lookupswitch] = -1;        stackdiff[ireturn] = -1001;        stackdiff[lreturn] = -1002;        stackdiff[freturn] = -1001;        stackdiff[dreturn] = -1002;        stackdiff[areturn] = -1001;        stackdiff[return_] = -1000;        stackdiff[getstatic] = -999;        stackdiff[putstatic] = -999;        stackdiff[getfield] = -999;        stackdiff[putfield] = -999;        stackdiff[invokevirtual] = -999;        stackdiff[invokespecial] = -999;        stackdiff[invokestatic] = -999;        stackdiff[invokeinterface] = -999;        stackdiff[newfromname] = 0;        stackdiff[new_] = 1;        stackdiff[newarray] = 0;        stackdiff[anewarray] = 0;        stackdiff[arraylength] = 0;        stackdiff[athrow] = -1001;        stackdiff[checkcast] = 0;        stackdiff[instanceof_] = 0;        stackdiff[monitorenter] = -1;        stackdiff[monitorexit] = -1;        stackdiff[wide] = 0;        stackdiff[multianewarray] = -999;        stackdiff[if_acmp_null] = -1;        stackdiff[if_acmp_nonnull] = -1;        stackdiff[goto_w] = 0;        stackdiff[jsr_w] = 0;        stackdiff[breakpoint] = 0;    }    public static String mnem(int opcode) {        return Mneumonics.mnem[opcode];    }    private static class Mneumonics {        private Mneumonics() {            super();        }        private static final String[] mnem = new String[ByteCodeCount];        static {            mnem[nop] = "nop";            mnem[aconst_null] = "aconst_null";            mnem[iconst_m1] = "iconst_m1";            mnem[iconst_0] = "iconst_0";            mnem[iconst_1] = "iconst_1";            mnem[iconst_2] = "iconst_2";            mnem[iconst_3] = "iconst_3";            mnem[iconst_4] = "iconst_4";            mnem[iconst_5] = "iconst_5";            mnem[lconst_0] = "lconst_0";            mnem[lconst_1] = "lconst_1";            mnem[fconst_0] = "fconst_0";            mnem[fconst_1] = "fconst_1";            mnem[fconst_2] = "fconst_2";            mnem[dconst_0] = "dconst_0";            mnem[dconst_1] = "dconst_1";            mnem[bipush] = "bipush";            mnem[sipush] = "sipush";            mnem[ldc1] = "ldc1";            mnem[ldc2] = "ldc2";            mnem[ldc2w] = "ldc2w";            mnem[iload] = "iload";            mnem[lload] = "lload";            mnem[fload] = "fload";            mnem[dload] = "dload";            mnem[aload] = "aload";            mnem[iload_0] = "iload_0";            mnem[lload_0] = "lload_0";            mnem[fload_0] = "fload_0";            mnem[dload_0] = "dload_0";            mnem[aload_0] = "aload_0";            mnem[iload_1] = "iload_1";            mnem[lload_1] = "lload_1";            mnem[fload_1] = "fload_1";            mnem[dload_1] = "dload_1";            mnem[aload_1] = "aload_1";            mnem[iload_2] = "iload_2";            mnem[lload_2] = "lload_2";            mnem[fload_2] = "fload_2";            mnem[dload_2] = "dload_2";            mnem[aload_2] = "aload_2";            mnem[iload_3] = "iload_3";            mnem[lload_3] = "lload_3";            mnem[fload_3] = "fload_3";            mnem[dload_3] = "dload_3";            mnem[aload_3] = "aload_3";            mnem[iaload] = "iaload";            mnem[laload] = "laload";            mnem[faload] = "faload";            mnem[daload] = "daload";            mnem[aaload] = "aaload";            mnem[baload] = "baload";            mnem[caload] = "caload";            mnem[saload] = "saload";            mnem[istore] = "istore";            mnem[lstore] = "lstore";            mnem[fstore] = "fstore";            mnem[dstore] = "dstore";            mnem[astore] = "astore";            mnem[istore_0] = "istore_0";            mnem[lstore_0] = "lstore_0";            mnem[fstore_0] = "fstore_0";            mnem[dstore_0] = "dstore_0";            mnem[astore_0] = "astore_0";            mnem[istore_1] = "istore_1";            mnem[lstore_1] = "lstore_1";            mnem[fstore_1] = "fstore_1";            mnem[dstore_1] = "dstore_1";            mnem[astore_1] = "astore_1";            mnem[istore_2] = "istore_2";            mnem[lstore_2] = "lstore_2";            mnem[fstore_2] = "fstore_2";            mnem[dstore_2] = "dstore_2";            mnem[astore_2] = "astore_2";            mnem[istore_3] = "istore_3";            mnem[lstore_3] = "lstore_3";            mnem[fstore_3] = "fstore_3";            mnem[dstore_3] = "dstore_3";            mnem[astore_3] = "astore_3";            mnem[iastore] = "iastore";            mnem[lastore] = "lastore";            mnem[fastore] = "fastore";            mnem[dastore] = "dastore";            mnem[aastore] = "aastore";            mnem[bastore] = "bastore";            mnem[castore] = "castore";            mnem[sastore] = "sastore";            mnem[pop] = "pop";            mnem[pop2] = "pop2";            mnem[dup] = "dup";            mnem[dup_x1] = "dup_x1";            mnem[dup_x2] = "dup_x2";            mnem[dup2] = "dup2";            mnem[dup2_x1] = "dup2_x1";            mnem[dup2_x2] = "dup2_x2";            mnem[swap] = "swap";            mnem[iadd] = "iadd";            mnem[ladd] = "ladd";            mnem[fadd] = "fadd";            mnem[dadd] = "dadd";            mnem[isub] = "isub";            mnem[lsub] = "lsub";            mnem[fsub] = "fsub";            mnem[dsub] = "dsub";            mnem[imul] = "imul";            mnem[lmul] = "lmul";            mnem[fmul] = "fmul";            mnem[dmul] = "dmul";            mnem[idiv] = "idiv";            mnem[ldiv] = "ldiv";            mnem[fdiv] = "fdiv";            mnem[ddiv] = "ddiv";            mnem[imod] = "imod";            mnem[lmod] = "lmod";            mnem[fmod] = "fmod";            mnem[dmod] = "dmod";            mnem[ineg] = "ineg";            mnem[lneg] = "lneg";            mnem[fneg] = "fneg";            mnem[dneg] = "dneg";            mnem[ishl] = "ishl";            mnem[lshl] = "lshl";            mnem[ishr] = "ishr";            mnem[lshr] = "lshr";            mnem[iushr] = "iushr";            mnem[lushr] = "lushr";            mnem[iand] = "iand";            mnem[land] = "land";            mnem[ior] = "ior";            mnem[lor] = "lor";            mnem[ixor] = "ixor";            mnem[lxor] = "lxor";            mnem[iinc] = "iinc";            mnem[i2l] = "i2l";            mnem[i2f] = "i2f";            mnem[i2d] = "i2d";            mnem[l2i] = "l2i";            mnem[l2f] = "l2f";            mnem[l2d] = "l2d";            mnem[f2i] = "f2i";            mnem[f2l] = "f2l";            mnem[f2d] = "f2d";            mnem[d2i] = "d2i";            mnem[d2l] = "d2l";            mnem[d2f] = "d2f";            mnem[int2byte] = "int2byte";            mnem[int2char] = "int2char";            mnem[int2short] = "int2short";            mnem[lcmp] = "lcmp";            mnem[fcmpl] = "fcmpl";            mnem[fcmpg] = "fcmpg";            mnem[dcmpl] = "dcmpl";            mnem[dcmpg] = "dcmpg";            mnem[ifeq] = "ifeq";            mnem[ifne] = "ifne";            mnem[iflt] = "iflt";            mnem[ifge] = "ifge";            mnem[ifgt] = "ifgt";            mnem[ifle] = "ifle";            mnem[if_icmpeq] = "if_icmpeq";            mnem[if_icmpne] = "if_icmpne";            mnem[if_icmplt] = "if_icmplt";            mnem[if_icmpge] = "if_icmpge";            mnem[if_icmpgt] = "if_icmpgt";            mnem[if_icmple] = "if_icmple";            mnem[if_acmpeq] = "if_acmpeq";            mnem[if_acmpne] = "if_acmpne";            mnem[goto_] = "goto_";            mnem[jsr] = "jsr";            mnem[ret] = "ret";            mnem[tableswitch] = "tableswitch";            mnem[lookupswitch] = "lookupswitch";            mnem[ireturn] = "ireturn";            mnem[lreturn] = "lreturn";            mnem[freturn] = "freturn";            mnem[dreturn] = "dreturn";            mnem[areturn] = "areturn";            mnem[return_] = "return_";            mnem[getstatic] = "getstatic";            mnem[putstatic] = "putstatic";            mnem[getfield] = "getfield";            mnem[putfield] = "putfield";            mnem[invokevirtual] = "invokevirtual";            mnem[invokespecial] = "invokespecial";            mnem[invokestatic] = "invokestatic";            mnem[invokeinterface] = "invokeinterface";            mnem[newfromname] = "newfromname";            mnem[new_] = "new_";            mnem[newarray] = "newarray";            mnem[anewarray] = "anewarray";            mnem[arraylength] = "arraylength";            mnem[athrow] = "athrow";            mnem[checkcast] = "checkcast";            mnem[instanceof_] = "instanceof_";            mnem[monitorenter] = "monitorenter";            mnem[monitorexit] = "monitorexit";            mnem[wide] = "wide";            mnem[multianewarray] = "multianewarray";            mnem[if_acmp_null] = "if_acmp_null";            mnem[if_acmp_nonnull] = "if_acmp_nonnull";            mnem[goto_w] = "goto_w";            mnem[jsr_w] = "jsr_w";            mnem[breakpoint] = "breakpoint";        }    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -