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

📄 completeclassreader.java

📁 这是实现Javac功能的GJC的最新源码
💻 JAVA
字号:
/** * @(#)CompleteClassReader.java	1.16 03/01/23 * * Copyright 2003 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */package com.sun.tools.javac.v8.code;import com.sun.tools.javac.v8.util.*;import com.sun.tools.javac.v8.code.Type.*;import com.sun.tools.javac.v8.code.Symbol.*;/** * This class contains some minor modifications wrt ClassReader *  which read complete constant pool and code sections with the class that is read in. *  Usually, these sections are omitted when reading class files. */public class CompleteClassReader extends ClassReader {    public CompleteClassReader(Context context) {        super(context, false);    }    /**      * As in ClassReader except that all of constant pool is immediately read in.      */    void indexPool() {        super.indexPool();        for (int i = 1; i < poolObj.length; i++)            readPool(i);    }    /**      * As in ClassReader except that constant pool is stored in class `c'.      */    void readClass(ClassSymbol c) {        c.pool = new Pool(poolObj.length, poolObj);        super.readClass(c);    }    /**      * As in ClassReader except that code is read in and entered      *  into method symbol.      */    void readMemberAttr(Symbol sym, Name attrName, int attrLen) {        if (attrName == names.Code) {            ((MethodSymbol) sym).code = readCode(sym);        } else {            super.readMemberAttr(sym, attrName, attrLen);        }    }    /**      * Read code block.      */    Code readCode(Symbol owner) {        Code code = new Code(false, true, true, null);        code.max_stack = nextChar();        code.max_locals = nextChar();        code.cp = nextInt();        code.code = new byte[code.cp];        System.arraycopy(buf, bp, code.code, 0, code.cp);        bp += code.cp;        char ncatches = nextChar();        for (int i = 0; i < ncatches; i++) {            code.addCatch(nextChar(), nextChar(), nextChar(), nextChar());        }        char ac = nextChar();        for (int i = 0; i < ac; i++) {            Name attrName = readName(nextChar());            int attrLen = nextInt();            if (attrName == names.LineNumberTable) {                char nlines = nextChar();                for (int j = 0; j < nlines; j++) {                    code.addLineNumber(nextChar(), nextChar());                }            } else if (attrName == names.LocalVariableTable) {                int count = nextChar();                for (int j = 0; j < count; j++) {                    char start_pc = nextChar();                    char length = nextChar();                    VarSymbol sym = new VarSymbol(0, readName(nextChar()),                            readType(nextChar()), owner);                    sym.adr = nextChar();                    Code.LocalVar v = new Code.LocalVar(sym);                    v.start_pc = start_pc;                    v.length = length;                    code.putVar(v);                }            } else {                unrecogized(attrName);                bp = bp + attrLen;            }        }        return code;    }}

⌨️ 快捷键说明

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