亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? gen.java

?? javac是sun公司開發(fā)人員使用java語言編寫的優(yōu)秀的工業(yè)級java編譯器
?? JAVA
?? 第 1 頁 / 共 5 頁
字號:
/** * @(#)Gen.java	1.97 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.comp;import java.io.IOException;import com.sun.tools.javac.v8.util.*;import com.sun.tools.javac.v8.code.*;import com.sun.tools.javac.v8.tree.*;import com.sun.tools.javac.v8.code.Symbol.*;import com.sun.tools.javac.v8.code.Type.*;import com.sun.tools.javac.v8.code.Code.*;import com.sun.tools.javac.v8.tree.Tree.*;import com.sun.tools.javac.v8.comp.Items.*;/** * This pass maps flat Java (i.e. without inner classes) to bytecodes. */public class Gen extends Tree.Visitor implements Flags, Kinds, TypeTags,ByteCodes, CRTFlags {    private static final Context.Key genKey = new Context.Key();    private final Log log;    private final Symtab syms;    private final Check chk;    private final Resolve rs;    private final TreeMaker make;    private final ClassWriter writer;    private final Name.Table names;    private final Target target;    private final boolean generateIproxies;    /**     * A type that serves as the expected type for all method expressions.     */    private final Type methodType;    public static Gen instance(Context context) {        Gen instance = (Gen) context.get(genKey);        if (instance == null)            instance = new Gen(context);        return instance;    }    private Gen(Context context) {        super();        context.put(genKey, this);        names = Name.Table.instance(context);        log = Log.instance(context);        syms = Symtab.instance(context);        chk = Check.instance(context);        rs = Resolve.instance(context);        make = TreeMaker.instance(context);        writer = ClassWriter.instance(context);        target = Target.instance(context);        methodType = new MethodType(null, null, null, syms.methodClass);        Options options = Options.instance(context);        lineDebugInfo = options.get("-g:") == null || options.get("-g:lines") != null;        varDebugInfo = options.get("-g:") == null ? options.get("-g") != null :                options.get("-g:vars") != null;        genCrt = options.get("-Xjcov") != null;        generateIproxies = target.requiresIproxy() || options.get("miranda") != null;        int setjsrlimit = 10;        String jsrlimitString = (String) options.get("jsrlimit");        if (jsrlimitString != null) {            try {                setjsrlimit = Integer.parseInt(jsrlimitString);            } catch (NumberFormatException ex) {            }        }        this.jsrlimit = setjsrlimit;    }    /**      * Switches      */    private final boolean lineDebugInfo;    private final boolean varDebugInfo;    private final boolean genCrt;    /**     * Default limit of (approximate) size of finalizer to inline.     *  Zero means always use jsr.  100 or greater means never use     *  jsr.     */    private final int jsrlimit;    private Pool pool = new Pool();    /**     * Code buffer, set by genMethod.     */    private Code code;    /**     * Items structure, set by genMethod.     */    private Items items;    /**     * Environment for symbol lookup, set by genClass     */    private Env attrEnv;    /**     * The top level tree.     */    private TopLevel toplevel;    /**     * The number of code-gen errors in this class.     */    private int nerrs = 0;    /**     * A hash table mapping syntax trees to their ending source positions.     */    private Hashtable endPositions;    /**     * Generate code to load an integer constant.     *  @param n     The integer to be loaded.     */    void loadIntConst(int n) {        items.makeImmediateItem(syms.intType, new Integer(n)).load();    }    /**      * The opcode that loads a zero constant of a given type code.      *  @param tc   The given type code (@see ByteCode).      */    public static int zero(int tc) {        switch (tc) {        case INTcode:        case BYTEcode:        case SHORTcode:        case CHARcode:            return iconst_0;        case LONGcode:            return lconst_0;        case FLOATcode:            return fconst_0;        case DOUBLEcode:            return dconst_0;        default:            throw new AssertionError("zero");        }    }    /**      * The opcode that loads a one constant of a given type code.      *  @param tc   The given type code (@see ByteCode).      */    public static int one(int tc) {        return zero(tc) + 1;    }    /**      * Generate code to load -1 of the given type code (either int or long).      *  @param tc   The given type code (@see ByteCode).      */    void emitMinusOne(int tc) {        if (tc == LONGcode) {            items.makeImmediateItem(syms.longType, new Long(-1)).load();        } else {            code.emitop(iconst_m1);        }    }    /**      * Construct a symbol to reflect the qualifying type that should      *  appear in the byte code as per JLS 13.1.      *      *  For target >= 1.2: Clone a method with the qualifier as owner (except      *  for those cases where we need to work around VM bugs).      *      *  For target <= 1.1: If qualified variable or method is defined in a      *  non-accessible class, clone it with the qualifier class as owner.      *      *  @param sym    The accessed symbol      *  @param site   The qualifier's type.      */    Symbol binaryQualifier(Symbol sym, Type site) {        if (site.tag == ARRAY) {            if (sym == syms.lengthVar || sym.owner != syms.arrayClass)                return sym;            Symbol qualifier = target.arrayBinaryCompatibility() ?                    new ClassSymbol(Flags.PUBLIC, site.tsym.name, site,                    syms.noSymbol) : syms.objectType.tsym;            return sym.clone(qualifier);        }        if (sym.owner == site.tsym ||                (sym.flags() & (STATIC | SYNTHETIC)) == (STATIC | SYNTHETIC)) {            return sym;        }        if (!target.obeyBinaryCompatibility())            return rs.isAccessible(attrEnv, (TypeSymbol) sym.owner) ? sym :                    sym.clone(site.tsym);        if (!target.interfaceFieldsBinaryCompatibility()) {            if ((sym.owner.flags() & INTERFACE) != 0 && sym.kind == VAR)                return sym;        }        if (sym.owner == syms.objectType.tsym)            return sym;        if (!target.interfaceObjectOverridesBinaryCompatibility()) {            if ((sym.owner.flags() & INTERFACE) != 0 &&                    syms.objectType.tsym.members().lookup(sym.name).scope != null)                return sym;        }        return sym.clone(site.tsym);    }    /**      * Insert a reference to given type in the constant pool,      *  checking for an array with too many dimensions;      *  return the reference's index.      *  @param type   The type for which a reference is inserted.      */    int makeRef(int pos, Type type) {        checkDimension(pos, type);        return pool.put(type.tag == CLASS ? (Object) type.tsym : (Object) type);    }    /**      * Check if the given type is an array with too many dimensions.      */    private void checkDimension(int pos, Type t) {        switch (t.tag) {        case METHOD:            checkDimension(pos, t.restype());            for (List args = t.argtypes(); args.nonEmpty(); args = args.tail)                checkDimension(pos, (Type) args.head);            break;        case ARRAY:            if (t.dimensions() > ClassFile.MAX_DIMENSIONS) {                log.error(pos, "limit.dimensions");                nerrs++;            }            break;        default:            break;        }    }    /**      * Create a tempory variable.      *  @param type   The variable's type.      */    LocalItem makeTemp(Type type) {        return (LocalItem) items.makeLocalItem(type, code.newLocal(type));    }    /**      * Generate code to call a non-private method or constructor.      *  @param pos         Position to be used for error reporting.      *  @param site        The type of which the method is a member.      *  @param name        The method's name.      *  @param argtypes    The method's argument types.      *  @param isStatic    A flag that indicates whether we call a      *                     static or instance method.      */    void callMethod(int pos, Type site, Name name, List argtypes, boolean isStatic) {        Symbol msym = rs.resolveInternalMethod(pos, attrEnv, site, name, argtypes);        if (isStatic)            items.makeStaticItem(msym).invoke();        else            items.makeMemberItem(msym, name == names.init).invoke();    }    /**      * Is the given method definition an access method      *  resulting from a qualified super? This is signified by an odd      *  access code.      */    private boolean isAccessSuper(MethodDef enclMethod) {        return (enclMethod.flags & SYNTHETIC) != 0 &&                isOddAccessName(enclMethod.name);    }    /**      * Does given name start with "access$" and end in an odd digit?      */    private boolean isOddAccessName(Name name) {        return name.startsWith(names.accessDollar) &&                (name.byteAt(name.len - 1) & 1) == 1;    }    /**      * Generate code to invoke the finalizer associated with given      *  environment.      *  Any calls to finalizers are appended to the environments `cont' chain.      *  Mark beginning of gap in catch all range for finalizer.      */    void genFinalizer(Env env) {        if (code.isAlive() && ((Gen.GenContext) env.info).finalize != null)            ((Gen.GenContext) env.info).finalize.gen();    }    /**      * Generate code to call all finalizers of structures aborted by      *  a non-local      *  exit.  Return target environment of the non-local exit.      *  @param target      The tree representing the structure that's aborted      *  @param env         The environment current at the non-local exit.      */    Env unwind(Tree target, Env env) {        Env env1 = env;        while (true) {            genFinalizer(env1);            if (env1.tree == target)                break;            env1 = env1.next;        }        return env1;    }    /**      * Mark end of gap in catch-all range for finalizer.      *  @param env   the environment which might contain the finalizer      *               (if it does, env.info.gaps != null).      */    void endFinalizerGap(Env env) {        if (((Gen.GenContext) env.info).gaps != null &&                ((Gen.GenContext) env.info).gaps.length() % 2 == 1)            ((Gen.GenContext) env.info).gaps.append(new Integer(code.curPc()));    }    /**      * Mark end of all gaps in catch-all ranges for finalizers of environments      *  lying between, and including to two environments.      *  @param from    the most deeply nested environment to mark      *  @param to      the least deeply nested environment to mark      */    void endFinalizerGaps(Env from, Env to) {        Env last = null;        while (last != to) {            endFinalizerGap(from);            last = from;            from = from.next;        }    }

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人精品亚洲777人妖| 色婷婷激情综合| 亚洲精品一二三区| 2欧美一区二区三区在线观看视频| 99久久久久免费精品国产| 另类小说欧美激情| 亚洲一区二区三区四区的| 国产精品视频你懂的| 欧美电视剧在线观看完整版| 91久久国产最好的精华液| 韩国视频一区二区| 日韩av不卡在线观看| 一区二区三区精品久久久| 久久精品网站免费观看| 日韩欧美国产1| 欧美午夜不卡视频| 色悠悠亚洲一区二区| 国产成人午夜视频| 国产一区二区在线观看免费| 午夜精品爽啪视频| 亚洲欧美日韩精品久久久久| 国产精品无圣光一区二区| 精品欧美一区二区久久| 91麻豆精品久久久久蜜臀| 91久久线看在观草草青青| 欧美精品一二三区| a4yy欧美一区二区三区| 国产成人鲁色资源国产91色综| 奇米精品一区二区三区四区 | av亚洲精华国产精华| 精东粉嫩av免费一区二区三区| 日韩电影在线一区| 日韩精品色哟哟| 日欧美一区二区| 日韩激情视频在线观看| 天天综合天天做天天综合| 亚洲午夜久久久久| 亚洲高清一区二区三区| 亚洲3atv精品一区二区三区| 亚洲aaa精品| 日韩电影免费在线看| 麻豆精品在线视频| 狠狠色丁香婷婷综合久久片| 国产乱码精品一区二区三区av| 国产一区二区三区在线观看免费视频| 国产一区福利在线| 盗摄精品av一区二区三区| av男人天堂一区| 91麻豆精品秘密| 欧美中文一区二区三区| 欧美在线观看你懂的| 欧美网站一区二区| 91麻豆精品国产91久久久久久久久| 在线电影国产精品| 日韩精品一区在线观看| 国产亚洲综合性久久久影院| 中文字幕+乱码+中文字幕一区| 国产精品国产三级国产普通话三级| 国产精品高潮久久久久无| 亚洲欧美激情小说另类| 五月婷婷激情综合| 精品一区二区三区香蕉蜜桃| 福利电影一区二区| 日本精品一区二区三区高清| 91精品欧美综合在线观看最新| 日韩一级片网站| 亚洲国产精品精华液ab| 一级做a爱片久久| 免费三级欧美电影| 国产一区二区三区日韩 | 国产激情一区二区三区四区 | 成年人国产精品| 色国产综合视频| 日韩欧美色综合网站| 国产日韩av一区| 亚洲综合视频在线| 国产一区二区三区观看| av在线播放一区二区三区| 欧美久久久一区| 国产欧美1区2区3区| 亚洲国产精品一区二区久久恐怖片| 麻豆国产一区二区| 99久久久国产精品| 日韩一区二区免费高清| 国产精品二区一区二区aⅴ污介绍| 亚洲成av人片在线观看无码| 国产精品一区在线观看乱码| 欧美在线不卡一区| 欧美国产日韩精品免费观看| 日韩国产欧美一区二区三区| 99热精品国产| 日韩免费在线观看| 一区二区三区成人| 国产成人在线视频免费播放| 欧美日韩国产一区二区三区地区| 久久综合九色综合久久久精品综合| 一区二区三区资源| 国产另类ts人妖一区二区| 欧美亚洲国产一区二区三区 | 天天操天天干天天综合网| 国产一区在线视频| 欧美精品亚洲一区二区在线播放| 国产精品久久久久精k8| 韩国视频一区二区| 欧美日韩成人一区| 18欧美亚洲精品| 国产麻豆一精品一av一免费| 制服丝袜亚洲精品中文字幕| 亚洲欧美激情插 | 欧美午夜寂寞影院| 中文字幕亚洲综合久久菠萝蜜| 国产真实乱偷精品视频免| 欧美卡1卡2卡| 亚洲一二三四在线| 91污片在线观看| 国产清纯美女被跳蛋高潮一区二区久久w| 亚洲r级在线视频| 色狠狠一区二区| 亚洲色图欧美偷拍| 不卡视频在线观看| 国产欧美一区二区三区沐欲| 黄网站免费久久| 欧美电影免费观看高清完整版在线| 五月天亚洲婷婷| 欧美色中文字幕| 亚洲自拍偷拍综合| 一本久久a久久免费精品不卡| 国产精品国产三级国产aⅴ无密码| 国产精品一区2区| 久久精品人人做人人综合| 国产乱妇无码大片在线观看| 久久久久青草大香线综合精品| 韩国精品主播一区二区在线观看| 日韩视频免费观看高清在线视频| 日本美女一区二区| 欧美成人一区二区| 精品一区二区免费| 精品免费视频.| 国产麻豆精品在线| 国产亚洲短视频| eeuss鲁一区二区三区| 国产精品国模大尺度视频| 99久久久国产精品| 亚洲精品一二三| 欧美视频一区二区三区四区| 性欧美大战久久久久久久久| 欧美精品成人一区二区三区四区| 亚洲成a人v欧美综合天堂下载| 欧美日韩亚洲综合在线| 日韩电影免费在线观看网站| 日韩亚洲电影在线| 国产麻豆午夜三级精品| 国产精品麻豆视频| 色噜噜久久综合| 五月婷婷综合在线| 久久亚洲欧美国产精品乐播 | 亚洲欧美区自拍先锋| 欧美亚洲图片小说| 免费在线看一区| 国产日韩精品一区二区浪潮av| 99re这里只有精品首页| 一区二区高清在线| 欧美va亚洲va| 成人av网站在线观看| 亚洲第一二三四区| 精品日韩一区二区三区| 成人午夜av电影| 亚洲夂夂婷婷色拍ww47| 欧美电影免费观看高清完整版在线观看 | 成人小视频在线| 亚洲制服欧美中文字幕中文字幕| 日韩一区二区在线播放| zzijzzij亚洲日本少妇熟睡| 午夜欧美视频在线观看 | 天堂在线亚洲视频| xnxx国产精品| 91福利视频在线| 韩国三级在线一区| 一区二区三区视频在线观看| 精品久久久久久久久久久久包黑料| 99视频一区二区| 麻豆91在线看| 亚洲三级视频在线观看| 精品久久一区二区三区| 91免费观看国产| 精一区二区三区| 亚洲欧美一区二区三区极速播放 | 欧美日韩中字一区| 国产成人日日夜夜| 日韩中文字幕不卡| 亚洲欧洲精品天堂一级| 日韩视频一区在线观看| 91麻豆视频网站| 国产福利91精品一区二区三区| 香蕉久久一区二区不卡无毒影院| 欧美国产精品久久| 日韩免费电影一区| 欧美色网一区二区| av欧美精品.com| 国产伦精品一区二区三区免费|