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

📄 gnubytecodejavap.java

📁 linux下建立JAVA虚拟机的源码KAFFE
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
        if ((flags & Access.PROTECTED) != 0)          {            buf.append("protected ");            if (!isShowProtected())              {                field = field.getNext();                continue;              }          }        if ((flags & Access.STATIC) != 0)          buf.append("static ");        if ((flags & Access.FINAL) != 0)          buf.append("final ");        if ((flags & Access.SYNCHRONIZED) != 0)          buf.append("synchronized ");        if ((flags & Access.VOLATILE) != 0)          buf.append("volatile ");        if ((flags & Access.TRANSIENT) != 0)          buf.append("transient ");        if ((flags & Access.NATIVE) != 0)          buf.append("native ");        if ((flags & Access.ABSTRACT) != 0)          buf.append("abstract ");        if ((flags & Access.INTERFACE) != 0)          buf.append("interface ");        String fieldtypename = field.getType().getName();        fieldtypename = escapeInnerClass(fieldtypename);        buf.append(fieldtypename);        buf.append(" ");        buf.append(field.getSourceName());        buf.append(";");        out.println(buf.toString());        if (isPrintSignatures())          {            buf = new StringBuffer();            buf.append(TABBING);            buf.append(TAB);            buf.append(COMMENT_START);            buf.append(field.getSignature());            buf.append(COMMENT_END);            out.println(buf.toString());          }        field = field.getNext();      }    // output methods    buf = null;    Method method = classType.getMethods();    while (method != null)      {        buf = new StringBuffer();        buf.append(TABBING);        flags = 1;        flags |= MODIFIERS | EXCEPTIONS | WITHSEMICOLON;        String methodStr = getMethod(classType, method, flags);        if (methodStr == null)          {            method = method.getNext();            continue;          }        buf.append(getMethod(classType, method, flags));        out.println(buf.toString());        buf = null;        if (isPrintSignatures())          {            buf = new StringBuffer();            buf.append(TABBING);            buf.append(TAB);            buf.append(COMMENT_START);            buf.append(method.getSignature());            buf.append(COMMENT_END);            out.println(buf.toString());            buf = null;          }        if (isPrintStackSize() || isPrintNumberLocals() || isPrintMethodArgs())          {            CodeAttr code = method.getCode();            if (code != null)              {                buf = new StringBuffer();                buf.append(TABBING);                buf.append(TAB);                buf.append(COMMENT_START);                if (isPrintStackSize())                  {                    buf.append("Stack=");                    buf.append(code.getMaxStack());                  }                if (isPrintNumberLocals())                  {                    if (isPrintStackSize())                      buf.append(", ");                    buf.append("Locals=");                    buf.append(code.getMaxLocals());                  }                if (isPrintMethodArgs())                  {                    if (isPrintStackSize() || isPrintNumberLocals())                      buf.append(", ");                    buf.append("Args_size=");                    Type[] paramTypes = method.getParameterTypes();                    String methodName = method.getName();                    int add = 1;                    if (methodName.equals("<clinit>"))                      add = 0;                    int args = paramTypes.length + add;                    buf.append(args);                  }                buf.append(COMMENT_END);                out.println(buf.toString());                buf = null;              }          }        method = method.getNext();      }    InnerClassesAttr innerClassAttr = (InnerClassesAttr) Attribute      .get(classType, "InnerClasses");    if (innerClassAttr != null)      {        //        String[][] innerClassNames = innerClassAttr.getClassNames();        String[][] innerClassNames = new String[0][0];        //    System.out.println (TABBING + "DBG: " + classType.getName () + "        // THIS");        //    for (int i = 0; i < innerClassNames.length; i++)        //      {        //        System.out.println (TABBING + "DBG: " + innerClassNames[i][0]);        //      }        TABBING = TABBING + TAB;        CLASS_TABBING = CLASS_TABBING + TAB;        for (int i = 0; i < innerClassNames.length; i++)          {            String tclassName = innerClassNames[i][0];            tclassName = tclassName.replace('/', '.');            if (tclassName.indexOf(classType.getName()) == -1)              continue;            if (tclassName.length() <= classType.getName().length())              continue;            String test = escapeInnerClass(tclassName);            if (test.indexOf('$') != -1)              continue;            InputStream is = null;            try              {                is = findClass(innerClassNames[i][0]);              }            catch (ClassNotFoundException e)              {                System.err.println("Class '" + innerClassNames[i][0]                                   + "' not found");                continue;              }            try              {                ClassType innerclassType = ClassFileInput.readClassType(is);                flags = innerclassType.getModifiers();                StringTokenizer st = new StringTokenizer(innerClassNames[i][1]);                while (st.hasMoreTokens())                  {                    String token = st.nextToken();                    if (token.equals("public"))                      flags |= Access.PUBLIC;                    else if (token.equals("private"))                      flags |= Access.PRIVATE;                    else if (token.equals("protected"))                      flags |= Access.PROTECTED;                    else if (token.equals("static"))                      flags |= Access.STATIC;                    else if (token.equals("final"))                      flags |= Access.FINAL;                    else if (token.equals("abstract"))                      flags |= Access.ABSTRACT;                    else if (token.equals("interface"))                      flags |= Access.INTERFACE;                  }                innerclassType.setModifiers(flags);                //            generateOutput(innerclassType, out);              }            catch (ClassFormatError cfe)              {                System.err.println("Error: " + innerClassNames[i][0] + ": "                                   + cfe.getMessage());              }            catch (IOException ioe)              {                System.err.println("Error: " + innerClassNames[i][0] + ": "                                   + ioe.getMessage());              }          }        TABBING = TABBING.substring(0, TABBING.length() - TAB.length());        CLASS_TABBING = CLASS_TABBING.substring(0, CLASS_TABBING.length()                                                   - TAB.length());      }    // end of class    out.println(CLASS_TABBING + "}");    method = classType.getMethods();    while (method != null)      {        if (isDisassemble() || isPrintLineNumbers() || isPrintLocalVariables())          {            try              {                CodeAttr code = (CodeAttr) Attribute.get(method, "Code");                if (code != null)                  {                    if (isDisassemble())                      {                        buf = new StringBuffer();                        String methodStr = getMethod(classType, method, 0);                        if (methodStr != null)                          {                            buf.append("Method ");                            buf.append(methodStr);                            out.println("");                            out.println(buf.toString());                          }                        int offset = 0;                        int length = code.getCodeLength();                        buf = new StringBuffer();                        ClassTypeWriter writer = getClassTypeWriter(buf,                                                                    classType);                        code.disAssemble(writer, offset, length);                        writer.flush();                        writer.close();                        // swriter is set in getClasTypeWriter                        if (swriter != null)                          out.print(swriter.toString());                      }                    if (isPrintLineNumbers())                      {                        LineNumbersAttr lineNumbers = (LineNumbersAttr) Attribute                          .get(code, "LineNumberTable");                        if (lineNumbers != null)                          {                            buf = new StringBuffer();                            String methodStr = getMethod(classType, method, 0);                            if (methodStr != null)                              {                                buf.append("Line numbers for method ");                                buf.append(methodStr);                                out.println("");                                out.println(buf.toString());                                int linenumber_count = lineNumbers                                  .getLineCount();                                short[] linenumber_table = lineNumbers                                  .getLineNumberTable();                                for (int i = 0; i < linenumber_count; i++)                                  {                                    out.print("   line ");                                    out                                      .print(linenumber_table[2 * i + 1] & 0xFFFF);                                    out.print(": ");                                    out                                      .println(linenumber_table[2 * i] & 0xFFFF);                                  }                              }                          }                      }                    if (isPrintLocalVariables())                      {                        try                          {                            LocalVarsAttr vars = (LocalVarsAttr) Attribute                              .get(code, "LocalVariableTable");                            if (vars != null)                              {                                buf = new StringBuffer();                                String methodStr = getMethod(classType, method,                                                             0);                                if (methodStr != null)                                  {                                    buf.append("Local variables for method ");                                    buf.append(methodStr);                                    out.println("");                                    out.println(buf.toString());                                    VarEnumerator varEnum = vars.allVars();                                    Variable var = varEnum.nextVar();                                    while (var != null)                                      {                                        buf = new StringBuffer();                                        buf.append("   ");                                        buf.append(var.getType().getName());                                        buf.append(" ");                                        buf.append(var.getName());                                        buf.append("  pc=");                                        //                        buf.append(var.getStartPC());                                        buf.append(", length=");                                        //                        buf.append(var.getEndPC() -                                        // var.getStartPC());                                        buf.append(", slot=");                                        //                        buf.append(var.getOffset());                                        out.println(buf.toString());                                        var = varEnum.nextVar();                                      }                                  }                              }                          }                        catch (ClassCastException cce)                          {                          }                      }                  } // if (code != null)              }            catch (ClassCastException cce)              {              }          }        method = method.getNext();      }  }}

⌨️ 快捷键说明

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