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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? gen.java

?? javac是sun公司開發人員使用java語言編寫的優秀的工業級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;        }    }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产91丝袜在线播放| 久久国产成人午夜av影院| 国产午夜精品一区二区三区四区| 欧美老肥妇做.爰bbww视频| 91久久国产最好的精华液| 在线亚洲精品福利网址导航| 成人av片在线观看| 成人av片在线观看| 在线精品视频免费观看| 色香蕉成人二区免费| 欧美在线观看视频一区二区三区| 91在线精品一区二区三区| 日本韩国精品一区二区在线观看| 色综合色综合色综合色综合色综合| 91色九色蝌蚪| 在线不卡一区二区| 欧美一区二区精美| 中文字幕免费不卡在线| 亚洲日本一区二区| 日日欢夜夜爽一区| 国产精品自拍网站| 色94色欧美sute亚洲线路二 | 激情国产一区二区| 国产一区二区在线影院| 成人黄色综合网站| 在线免费不卡电影| 国产欧美一区二区精品婷婷 | 亚洲免费av高清| 亚洲v日本v欧美v久久精品| 美女视频一区二区| 成人a免费在线看| 777久久久精品| 国产精品第一页第二页第三页| 亚洲国产精品一区二区久久恐怖片| 三级久久三级久久| 99国产精品国产精品毛片| 欧美一级专区免费大片| 中文字幕人成不卡一区| 青青草原综合久久大伊人精品| 国产风韵犹存在线视精品| 欧美日韩中文字幕一区| 精品1区2区在线观看| 亚洲资源在线观看| 成人久久久精品乱码一区二区三区| 欧美在线影院一区二区| 国产三级精品在线| 日本不卡视频一二三区| 色婷婷综合久久久久中文一区二区| 国产精品免费视频网站| 另类小说综合欧美亚洲| 欧洲在线/亚洲| 国产精品国产三级国产普通话三级| 三级一区在线视频先锋| 日本久久一区二区三区| 国产精品系列在线| 激情深爱一区二区| 欧美一区二区播放| 午夜精品免费在线观看| 日本韩国欧美三级| 亚洲男人的天堂网| www.亚洲色图.com| 国产精品免费丝袜| 国产99久久久久久免费看农村| 日韩欧美国产小视频| 丝袜亚洲另类欧美| 欧美性受xxxx黑人xyx性爽| 综合av第一页| 成人动漫精品一区二区| 久久精品视频一区二区| 国内不卡的二区三区中文字幕 | 国产精品18久久久久久vr| 91精品久久久久久久久99蜜臂| 亚洲香肠在线观看| 欧美猛男gaygay网站| 午夜久久电影网| 欧美日韩一区中文字幕| 偷拍亚洲欧洲综合| 91精品国产全国免费观看| 日韩高清在线观看| 欧美伦理视频网站| 日日摸夜夜添夜夜添精品视频 | 91亚洲国产成人精品一区二三| 国产精品久久久久天堂| 成人黄色免费短视频| 亚洲欧洲日产国产综合网| 91小视频在线免费看| 亚洲二区在线视频| 日韩精品一区国产麻豆| 奇米四色…亚洲| 久久久久久亚洲综合影院红桃| 国产69精品久久久久毛片| 亚洲另类在线视频| 91精品在线免费| 激情久久五月天| 亚洲婷婷在线视频| 欧美日韩大陆在线| 91网站黄www| 亚洲国产精品影院| 国产亚洲成年网址在线观看| 丁香啪啪综合成人亚洲小说| 亚洲一区在线观看免费观看电影高清| 91精品国产黑色紧身裤美女| 国产麻豆日韩欧美久久| 亚洲另类色综合网站| 日韩一级片网站| 国产成人免费视频一区| 亚洲一区二区三区精品在线| 日韩欧美色电影| 91在线视频网址| 久久99精品国产.久久久久| 欧美国产亚洲另类动漫| 欧美美女视频在线观看| 成人精品鲁一区一区二区| 午夜久久电影网| 中文字幕一区在线| 日韩一区二区电影在线| 91免费看`日韩一区二区| 男人操女人的视频在线观看欧美 | 亚洲韩国一区二区三区| 国产三级三级三级精品8ⅰ区| 欧美日韩精品久久久| 国产九色精品成人porny| 午夜欧美视频在线观看| 国产精品无遮挡| 精品免费视频.| 欧美日精品一区视频| 99精品久久久久久| 国产真实乱偷精品视频免| 一区二区三区欧美日| 国产欧美日韩卡一| 精品精品欲导航| 欧美精三区欧美精三区| 一本高清dvd不卡在线观看| 国产高清成人在线| 国产资源在线一区| 日韩av在线播放中文字幕| 亚洲在线视频免费观看| 亚洲精品午夜久久久| 亚洲国产成人自拍| 国产清纯在线一区二区www| 久久影院电视剧免费观看| 制服.丝袜.亚洲.另类.中文 | 精品精品国产高清a毛片牛牛 | 国产精品久久影院| 国产欧美一区二区三区在线看蜜臀| 91精品国产入口在线| 91超碰这里只有精品国产| 在线观看av一区| 精品婷婷伊人一区三区三| 欧美在线你懂的| 26uuu亚洲| 精品福利一二区| 精品国精品国产| 久久久久综合网| 国产精品视频九色porn| 国产精品丝袜久久久久久app| 国产欧美日韩在线看| 国产精品网站在线观看| 国产精品天美传媒沈樵| 亚洲欧洲成人自拍| 亚洲欧洲成人精品av97| 亚洲国产日韩在线一区模特| 亚洲国产成人91porn| 视频一区二区不卡| 男女激情视频一区| 国产成人在线视频网址| 成人av网在线| 色婷婷综合中文久久一本| 欧美日韩一卡二卡| 精品国产一区二区三区不卡| 久久久www免费人成精品| 中文字幕精品一区二区精品绿巨人 | 秋霞电影一区二区| 国模无码大尺度一区二区三区| 国产.精品.日韩.另类.中文.在线.播放 | 欧洲视频一区二区| 欧美一级免费大片| 久久精品人人做人人综合| 中文字幕制服丝袜成人av| 亚洲国产另类精品专区| 国产伦精品一区二区三区免费迷| 成人白浆超碰人人人人| 欧美日韩精品一区二区天天拍小说 | 国产蜜臀97一区二区三区| 亚洲色图欧美在线| 美国毛片一区二区| 91麻豆.com| 精品久久人人做人人爱| 亚洲欧美日韩国产综合| 免费在线一区观看| 91蝌蚪porny九色| 欧美tickling网站挠脚心| 亚洲图片激情小说| 国产在线视频一区二区| 欧美性感一区二区三区| 国产亚洲成av人在线观看导航 | 欧美日本一区二区在线观看| 欧美va亚洲va在线观看蝴蝶网| 最新日韩av在线| 精品一区二区三区久久|