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

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

?? gen.java

?? javac是sun公司開發人員使用java語言編寫的優秀的工業級java編譯器
?? JAVA
?? 第 1 頁 / 共 5 頁
字號:
    /**      * Do any of the structures aborted by a non-local exit have      *  finalizers that require an empty stack?      *  @param target      The tree representing the structure that's aborted      *  @param env         The environment current at the non-local exit.      */    boolean hasFinally(Tree target, Env env) {        while (env.tree != target) {            if (env.tree.tag == Tree.TRY &&                    ((Gen.GenContext) env.info).finalize.hasFinalizer())                return true;            env = env.next;        }        return false;    }    /**      * Distribute member initializer code into constructors and <clinit>      *  method.      *  @param defs         The list of class member declarations.      *  @param c            The enclosing class.      */    List normalizeDefs(List defs, ClassSymbol c) {        ListBuffer initCode = new ListBuffer();        ListBuffer clinitCode = new ListBuffer();        ListBuffer methodDefs = new ListBuffer();        for (List l = defs; l.nonEmpty(); l = l.tail) {            Tree def = (Tree) l.head;            switch (def.tag) {            case Tree.BLOCK:                Block block = (Block) def;                if ((block.flags & STATIC) != 0)                    clinitCode.append(def);                else                    initCode.append(def);                break;            case Tree.METHODDEF:                methodDefs.append(def);                break;            case Tree.VARDEF:                VarDef vdef = (VarDef) def;                VarSymbol sym = vdef.sym;                checkDimension(vdef.pos, sym.type);                if (vdef.init != null) {                    if ((sym.flags() & STATIC) == 0) {                        Tree init = make.at(vdef.pos).Assignment(sym, vdef.init);                        initCode.append(init);                        if (endPositions != null) {                            Integer endPos = (Integer) endPositions.remove(vdef);                            if (endPos != null)                                endPositions.put(init, endPos);                        }                    } else if (sym.constValue == null) {                        Tree init = make.at(vdef.pos).Assignment(sym, vdef.init);                        clinitCode.append(init);                        if (endPositions != null) {                            Integer endPos = (Integer) endPositions.remove(vdef);                            if (endPos != null)                                endPositions.put(init, endPos);                        }                    } else {                        checkStringConstant(vdef.init.pos, sym.constValue);                    }                }                break;            default:                assert false;            }        }        if (initCode.length() != 0) {            List inits = initCode.toList();            for (Enumeration e = methodDefs.elements(); e.hasMoreElements();) {                normalizeMethod((MethodDef) e.nextElement(), inits);            }        }        if (clinitCode.length() != 0) {            MethodSymbol clinit = new MethodSymbol(STATIC, names.clinit,                    new MethodType(Type.emptyList, syms.voidType,                    Type.emptyList, syms.methodClass), c);            c.members().enter(clinit);            List clinitStats = clinitCode.toList();            Block block =                    make.at(((Tree) clinitStats.head).pos).Block(0, clinitStats);            block.endpos = TreeInfo.endPos((Tree) clinitStats.last());            methodDefs.append(make.MethodDef(clinit, block));        }        return methodDefs.toList();    }    /**      * Check a constant value and report if it is a string that is      *  too large.      */    private void checkStringConstant(int pos, Object constValue) {        if (nerrs != 0 || constValue == null || !(constValue instanceof String) ||                ((String) constValue).length() < Pool.MAX_STRING_LENGTH)            return;        log.error(pos, "limit.string");        nerrs++;    }    /**      * Insert instance initializer code into initial constructor.      *  @param md        The tree potentially representing a      *                   constructor's definition.      *  @param initCode  The list of instance initializer statements.      */    void normalizeMethod(MethodDef md, List initCode) {        if (md.name == names.init && TreeInfo.isInitialConstructor(md)) {            List stats = md.body.stats;            ListBuffer newstats = new ListBuffer();            if (stats.nonEmpty()) {                while (TreeInfo.isSyntheticInit((Tree) stats.head)) {                    newstats.append(stats.head);                    stats = stats.tail;                }                newstats.append(stats.head);                stats = stats.tail;                while (stats.nonEmpty() &&                        TreeInfo.isSyntheticInit((Tree) stats.head)) {                    newstats.append(stats.head);                    stats = stats.tail;                }                newstats.appendList(initCode);                while (stats.nonEmpty()) {                    newstats.append(stats.head);                    stats = stats.tail;                }            }            md.body.stats = newstats.toList();            if (md.body.endpos == Position.NOPOS)                md.body.endpos = TreeInfo.endPos((Tree) md.body.stats.last());        }    }    /**      * Add abstract methods for all methods defined in one of      *  the interfaces of a given class,      *  provided they are not already implemented in the class.      *      *  @param c      The class whose interfaces are searched for methods      *                for which Miranda methods should be added.      */    void implementInterfaceMethods(ClassSymbol c) {        implementInterfaceMethods(c, c);    }    /**      * Add abstract methods for all methods defined in one of      *  the interfaces of a given class,      *  provided they are not already implemented in the class.      *      *  @param c      The class whose interfaces are searched for methods      *                for which Miranda methods should be added.      *  @param site   The class in which a definition may be needed.      */    void implementInterfaceMethods(ClassSymbol c, ClassSymbol site) {        for (List l = c.type.interfaces(); l.nonEmpty(); l = l.tail) {            ClassSymbol i = (ClassSymbol)((Type) l.head).tsym;            for (Scope.Entry e = i.members().elems; e != null; e = e.sibling) {                if (e.sym.kind == MTH && (e.sym.flags() & STATIC) == 0) {                    MethodSymbol absMeth = (MethodSymbol) e.sym;                    MethodSymbol implMeth = absMeth.binaryImplementation(site);                    if (implMeth == null)                        addAbstractMethod(site, absMeth);                    else if ((implMeth.flags() & IPROXY) != 0)                        adjustAbstractMethod(site, implMeth, absMeth);                }            }            implementInterfaceMethods(i, site);        }    }    /**      * Add an abstract methods to a class      *  which implicitly implements a method defined in some interface      *  implemented by the class. These methods are called "Miranda methods".      *  Enter the newly created method into its enclosing class scope.      *  Note that it is not entered into the class tree, as the emitter      *  doesn't need to see it there to emit an abstract method.      *      *  @param c      The class to which the Miranda method is added.      *  @param m      The interface method symbol for which a Miranda method      *                is added.      */    private void addAbstractMethod(ClassSymbol c, MethodSymbol m) {        MethodSymbol absMeth =                new MethodSymbol(m.flags() | IPROXY | SYNTHETIC, m.name, m.type, c);        c.members().enter(absMeth);    }    private void adjustAbstractMethod(ClassSymbol c, MethodSymbol pm,            MethodSymbol im) {        MethodType pmt = (MethodType) pm.type;        Type imt = c.type.memberType(im);        pmt.thrown = Check.intersect(pmt.thrown(), imt.thrown());    }    /**      * Visitor argument: The current environment.      */    Env env;    /**     * Visitor argument: The expected type (prototype).     */    Type pt;    /**     * Visitor result: The item representing the computed value.     */    Item result;    /**     * Visitor method: generate code for a definition, catching and reporting     *  any completion failures.     *  @param tree    The definition to be visited.     *  @param env     The environment current at the definition.     */    public void genDef(Tree tree, Env env) {        Env prevEnv = this.env;        try {            this.env = env;            tree.accept(this);        } catch (CompletionFailure ex) {            chk.completionError(tree.pos, ex);        }        finally { this.env = prevEnv;                } }    /**      * Derived visitor method: check whether CharacterRangeTable      *  should be emitted, if so, put a new entry into CRTable      *  and call method to generate bytecode.      *  If not, just call method to generate bytecode.      *  @see    #genStat(Tree, Env<GenContext>)      *      *  @param  tree     The tree to be visited.      *  @param  env      The environment to use.      *  @param  crtFlags The CharacterRangeTable flags      *                   indicating type of the entry.      */    public void genStat(Tree tree, Env env, int crtFlags) {        if (!genCrt) {            genStat(tree, env);            return;        }        int startpc = code.curPc();        genStat(tree, env);        if (tree.tag == Tree.BLOCK)            crtFlags |= CRT_BLOCK;        code.crt.put(tree, crtFlags, startpc, code.curPc());    }    /**      * Derived visitor method: generate code for a statement.      */    public void genStat(Tree tree, Env env) {        if (code.isAlive()) {            code.statBegin(tree.pos);            genDef(tree, env);        } else if (((Gen.GenContext) env.info).isSwitch && tree.tag == Tree.VARDEF) {            code.newLocal(((VarDef) tree).sym);        }    }    /**      * Derived visitor method: check whether CharacterRangeTable      *  should be emitted, if so, put a new entry into CRTable      *  and call method to generate bytecode.      *  If not, just call method to generate bytecode.      *  @see    #genStats(List<Trees>, Env<GenContext>)      *      *  @param  trees    The list of trees to be visited.      *  @param  env      The environment to use.      *  @param  crtFlags The CharacterRangeTable flags      *                   indicating type of the entry.      */    public void genStats(List trees, Env env, int crtFlags) {        if (!genCrt) {            genStats(trees, env);            return;        }        if (trees.length() == 1) {            genStat((Tree) trees.head, env, crtFlags | CRT_STATEMENT);        } else {            int startpc = code.curPc();            genStats(trees, env);            code.crt.put(trees, crtFlags, startpc, code.curPc());        }    }    /**      * Derived visitor method: generate code for a list of statements.      */    public void genStats(List trees, Env env) {        for (List l = trees; l.nonEmpty(); l = l.tail)            genStat((Tree) l.head, env, CRT_STATEMENT);    }    /**      * Derived visitor method: check whether CharacterRangeTable      *  should be emitted, if so, put a new entry into CRTable      *  and call method to generate bytecode.      *  If not, just call method to generate bytecode.      *  @see    #genCond(Tree)      *      *  @param  tree     The tree to be visited.      *  @param  crtFlags The CharacterRangeTable flags      *                   indicating type of the entry.      */    public CondItem genCond(Tree tree, int crtFlags) {        if (!genCrt)            return genCond(tree, false);        int startpc = code.curPc();        CondItem item = genCond(tree, (crtFlags & CRT_FLOW_CONTROLLER) != 0);        code.crt.put(tree, crtFlags, startpc, code.curPc());        return item;    }    /**      * Derived visitor method: generate code for a boolean      *  expression in a control-flow context.      *  @param tree         The expression to be visited.      *  @param markBranches The flag to indicate that the condition is      *                      a flow controller so produced conditions      *                      should contain a proper tree to generate      *                      CharacterRangeTable branches for them.      */    public CondItem genCond(Tree _tree, boolean markBranches) {        Tree inner_tree = TreeInfo.skipParens(_tree);        if (inner_tree.tag == Tree.CONDEXPR) {            Conditional tree = (Conditional) inner_tree;            CondItem cond = genCond(tree.cond, CRT_FLOW_CONTROLLER);            if (cond.isTrue()) {                code.resolve(cond.trueJumps);                CondItem result = genCond(tree.truepart, CRT_FLOW_TARGET);                if (markBranches)                    result.tree = tree.truepart;                return result;            }            if (cond.isFalse()) {                code.resolve(cond.falseJumps);                CondItem result = genCond(tree.falsepart, CRT_FLOW_TARGET);                if (markBranches)                    result.tree = tree.falsepart;                return result;            }            Chain secondJumps = cond.jumpFalse();            code.resolve(cond.trueJumps);            CondItem first = genCond(tree.truepart, CRT_FLOW_TARGET);            if (markBranches)                first.tree = tree.truepart;            Chain falseJumps = first.jumpFalse();            code.resolve(first.trueJumps);            Chain trueJumps = code.branch(goto_);            code.resolve(secondJumps);            CondItem second = genCond(tree.falsepart, CRT_FLOW_TARGET);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美另类一区二区三区| 粉嫩蜜臀av国产精品网站| 在线免费观看成人短视频| ...中文天堂在线一区| 97精品久久久久中文字幕 | 91看片淫黄大片一级在线观看| 欧美激情综合网| 成人午夜短视频| 国产精品美日韩| 91网站在线播放| 亚洲成av人片在www色猫咪| 欧美日韩亚洲高清一区二区| 日本免费新一区视频| 久久婷婷一区二区三区| 成人丝袜18视频在线观看| 亚洲视频1区2区| 91精品一区二区三区久久久久久| 麻豆91精品视频| 国产视频一区二区三区在线观看| 成人免费观看视频| 国产一区二区三区四| 国产嫩草影院久久久久| 一本久久精品一区二区| 石原莉奈在线亚洲二区| 欧美精品一区二区三区一线天视频| 国产91精品在线观看| 自拍偷拍欧美激情| 91麻豆精品国产自产在线观看一区| 黑人巨大精品欧美一区| 亚洲欧美日韩小说| 精品成a人在线观看| 色哟哟国产精品免费观看| 日韩高清在线观看| 亚洲欧洲美洲综合色网| 制服丝袜中文字幕一区| aaa国产一区| 免费观看成人鲁鲁鲁鲁鲁视频| 中文字幕欧美日韩一区| 欧美一区二区三区免费观看视频| 福利一区在线观看| 日韩在线卡一卡二| 亚洲免费av观看| 精品av综合导航| 欧美综合亚洲图片综合区| 国产美女久久久久| 日韩黄色一级片| 亚洲欧美电影一区二区| 欧美成人a∨高清免费观看| 91女神在线视频| 国产一区日韩二区欧美三区| 一区二区免费在线| 国产欧美久久久精品影院| 9191成人精品久久| 欧洲人成人精品| 99国产精品久久| 国产真实乱子伦精品视频| 亚洲国产色一区| 一区二区中文字幕在线| 久久色.com| 日韩欧美一区电影| 欧美美女网站色| 色综合网色综合| 成人免费毛片片v| 国产精品亚洲第一区在线暖暖韩国 | 678五月天丁香亚洲综合网| 99re热这里只有精品视频| 国产成人在线免费观看| 精品一区精品二区高清| 男女男精品视频网| 日韩不卡一区二区| 日本中文字幕一区| 香蕉久久夜色精品国产使用方法| 亚洲精品视频在线看| 国产精品传媒在线| 国产精品不卡一区| 国产精品天干天干在观线| 国产网站一区二区| 日本一区二区三区视频视频| 久久久.com| 久久免费电影网| 久久久久国产精品麻豆| 久久精品视频一区二区| 国产亲近乱来精品视频 | 欧美午夜在线一二页| 色综合天天综合色综合av| 99精品久久久久久| 日本久久精品电影| 精品视频一区二区不卡| 欧美三级蜜桃2在线观看| 欧美亚一区二区| 91麻豆精品国产91久久久使用方法| 欧美精品日韩一区| 欧美一级欧美三级| 精品国产不卡一区二区三区| 久久久精品综合| 欧美国产亚洲另类动漫| 亚洲视频一区二区在线| 伊人性伊人情综合网| 天天色综合成人网| 七七婷婷婷婷精品国产| 国内精品不卡在线| 丁香另类激情小说| 日本精品一区二区三区高清 | 亚洲电影激情视频网站| 日本不卡1234视频| 国产精品一区二区男女羞羞无遮挡| 国产成人在线免费观看| 972aa.com艺术欧美| 欧美日韩国产综合久久 | 国内精品伊人久久久久av影院| 国产电影一区在线| 91国偷自产一区二区开放时间| 欧美日韩和欧美的一区二区| 精品少妇一区二区三区| 国产精品网曝门| 调教+趴+乳夹+国产+精品| 激情文学综合丁香| 91美女在线看| 欧美电视剧在线观看完整版| 国产精品视频一二三| 成人免费电影视频| 欧美日韩免费视频| 中文字幕久久午夜不卡| 五月综合激情日本mⅴ| 国产乱子伦一区二区三区国色天香| 91亚洲精品久久久蜜桃网站 | 日本亚洲最大的色成网站www| 国产在线精品一区二区| 在线观看成人免费视频| 久久女同互慰一区二区三区| 亚洲最新视频在线播放| 精品一二线国产| 欧美最猛黑人xxxxx猛交| 久久久综合精品| 婷婷久久综合九色综合伊人色| 国产福利一区二区三区视频| 欧美日韩激情一区二区三区| 国产亚洲欧美日韩在线一区| 午夜电影网一区| av一区二区三区| 精品99999| 视频一区二区中文字幕| 日本精品视频一区二区三区| 国产欧美一区二区精品忘忧草| 视频一区视频二区中文字幕| 91丝袜呻吟高潮美腿白嫩在线观看| 91麻豆精品久久久久蜜臀| 亚洲另类在线一区| 从欧美一区二区三区| 欧美一区二区三区婷婷月色| 亚洲精品高清在线观看| 成人毛片视频在线观看| 精品久久久久久久久久久久久久久久久| 亚洲主播在线播放| 成人听书哪个软件好| 久久久国产一区二区三区四区小说| 日本成人在线网站| 欧美日韩综合不卡| 亚洲最大色网站| 色综合久久久久综合| 日韩和的一区二区| 欧美精品aⅴ在线视频| 亚洲动漫第一页| 色综合久久久久综合99| 亚洲男人都懂的| 91一区二区三区在线观看| 亚洲视频每日更新| 97久久人人超碰| 亚洲色欲色欲www在线观看| 99国产精品视频免费观看| 亚洲欧美在线视频| 91蜜桃免费观看视频| 亚洲精品久久7777| 欧美怡红院视频| 天堂蜜桃一区二区三区| 91麻豆精品国产91久久久久| 日本亚洲电影天堂| 精品国产乱码91久久久久久网站| 老司机精品视频线观看86| 欧美sm极限捆绑bd| 国产精品一卡二卡在线观看| 久久视频一区二区| 懂色av一区二区三区免费观看| 中文字幕在线一区二区三区| 色婷婷激情综合| 亚洲综合久久av| 欧美久久一二三四区| 麻豆精品久久久| 久久精品一区二区三区四区| 高清免费成人av| 亚洲欧美一区二区三区孕妇| 欧美色图天堂网| 秋霞电影一区二区| 国产欧美精品日韩区二区麻豆天美| av在线一区二区三区| 一区二区不卡在线播放| 欧美一区二区精品在线| 国产精品一线二线三线精华| 中文字幕中文字幕一区| 欧美日韩免费高清一区色橹橹 |