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

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

?? block.java

?? 主要的怎么樣結合java 和 javascript!
?? JAVA
?? 第 1 頁 / 共 2 頁
字號:
/* * The contents of this file are subject to the Netscape Public * License Version 1.1 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of * the License at http://www.mozilla.org/NPL/ * * Software distributed under the License is distributed on an "AS * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing * rights and limitations under the License. * * The Original Code is Rhino code, released * May 6, 1999. * * The Initial Developer of the Original Code is Netscape * Communications Corporation.  Portions created by Netscape are * Copyright (C) 1997-1999 Netscape Communications Corporation. All * Rights Reserved. * * Contributor(s): * Norris Boyd * Igor Bukanov * Roger Lawrence * * Alternatively, the contents of this file may be used under the * terms of the GNU Public License (the "GPL"), in which case the * provisions of the GPL are applicable instead of those above. * If you wish to allow use of your version of this file only * under the terms of the GPL and not to allow others to use your * version of this file under the NPL, indicate your decision by * deleting the provisions above and replace them with the notice * and other provisions required by the GPL.  If you do not delete * the provisions above, a recipient may use your version of this * file under either the NPL or the GPL. */package org.mozilla.javascript.optimizer;import org.mozilla.javascript.*;import java.util.Hashtable;import java.io.PrintWriter;import java.io.StringWriter;class Block{    private static class FatBlock    {        private static Block[] reduceToArray(ObjToIntMap map)        {            Block[] result = null;            if (!map.isEmpty()) {                result = new Block[map.size()];                int i = 0;                ObjToIntMap.Iterator iter = map.newIterator();                for (iter.start(); !iter.done(); iter.next()) {                    FatBlock fb = (FatBlock)(iter.getKey());                    result[i++] = fb.realBlock;                }            }            return result;        }        void addSuccessor(FatBlock b)  { successors.put(b, 0); }        void addPredecessor(FatBlock b)  { predecessors.put(b, 0); }        Block[] getSuccessors() { return reduceToArray(successors); }        Block[] getPredecessors() { return reduceToArray(predecessors); }            // all the Blocks that come immediately after this        private ObjToIntMap successors = new ObjToIntMap();            // all the Blocks that come immediately before this        private ObjToIntMap predecessors = new ObjToIntMap();        Block realBlock;    }    Block(int startNodeIndex, int endNodeIndex)    {        itsStartNodeIndex = startNodeIndex;        itsEndNodeIndex = endNodeIndex;    }    static void runFlowAnalyzes(OptFunctionNode fn, Node[] statementNodes)    {        int paramCount = fn.fnode.getParamCount();        int varCount = fn.fnode.getParamAndVarCount();        int[] varTypes = new int[varCount];        // If the variable is a parameter, it could have any type.        for (int i = 0; i != paramCount; ++i) {            varTypes[i] = Optimizer.AnyType;        }        // If the variable is from a "var" statement, its typeEvent will be set        // when we see the setVar node.        for (int i = paramCount; i != varCount; ++i) {            varTypes[i] = Optimizer.NoType;        }        Block[] theBlocks = buildBlocks(statementNodes);        if (DEBUG) {            ++debug_blockCount;            System.out.println("-------------------"+fn.fnode.getFunctionName()+"  "+debug_blockCount+"--------");            System.out.println(toString(theBlocks, statementNodes));        }        reachingDefDataFlow(fn, statementNodes, theBlocks, varTypes);        typeFlow(fn, statementNodes, theBlocks, varTypes);        if (DEBUG) {            for (int i = 0; i < theBlocks.length; i++) {                System.out.println("For block " + theBlocks[i].itsBlockID);                theBlocks[i].printLiveOnEntrySet(fn);            }            System.out.println("Variable Table, size = " + varCount);            for (int i = 0; i != varCount; i++) {                System.out.println("["+i+"] type: "+varTypes[i]);            }        }        for (int i = paramCount; i != varCount; i++) {            if (varTypes[i] == Optimizer.NumberType) {                fn.setIsNumberVar(i);            }        }    }    private static Block[] buildBlocks(Node[] statementNodes)    {            // a mapping from each target node to the block it begins        Hashtable theTargetBlocks = new Hashtable();        ObjArray theBlocks = new ObjArray();            // there's a block that starts at index 0        int beginNodeIndex = 0;        for (int i = 0; i < statementNodes.length; i++) {            switch (statementNodes[i].getType()) {                case Token.TARGET :                    {                        if (i != beginNodeIndex) {                            FatBlock fb = newFatBlock(beginNodeIndex, i - 1);                            if (statementNodes[beginNodeIndex].getType()                                                        == Token.TARGET)                                theTargetBlocks.put(statementNodes[beginNodeIndex], fb);                            theBlocks.add(fb);                             // start the next block at this node                            beginNodeIndex = i;                        }                    }                    break;                case Token.IFNE :                case Token.IFEQ :                case Token.GOTO :                    {                        FatBlock fb = newFatBlock(beginNodeIndex, i);                        if (statementNodes[beginNodeIndex].getType()                                                       == Token.TARGET)                            theTargetBlocks.put(statementNodes[beginNodeIndex], fb);                        theBlocks.add(fb);                            // start the next block at the next node                        beginNodeIndex = i + 1;                    }                    break;            }        }        if (beginNodeIndex != statementNodes.length) {            FatBlock fb = newFatBlock(beginNodeIndex, statementNodes.length - 1);            if (statementNodes[beginNodeIndex].getType() == Token.TARGET)                theTargetBlocks.put(statementNodes[beginNodeIndex], fb);            theBlocks.add(fb);        }        // build successor and predecessor links        for (int i = 0; i < theBlocks.size(); i++) {            FatBlock fb = (FatBlock)(theBlocks.get(i));            Node blockEndNode = statementNodes[fb.realBlock.itsEndNodeIndex];            int blockEndNodeType = blockEndNode.getType();            if ((blockEndNodeType != Token.GOTO)                                         && (i < (theBlocks.size() - 1))) {                FatBlock fallThruTarget = (FatBlock)(theBlocks.get(i + 1));                fb.addSuccessor(fallThruTarget);                fallThruTarget.addPredecessor(fb);            }            if ( (blockEndNodeType == Token.IFNE)                        || (blockEndNodeType == Token.IFEQ)                                || (blockEndNodeType == Token.GOTO) ) {                Node target = ((Node.Jump)blockEndNode).target;                FatBlock branchTargetBlock                                    = (FatBlock)(theTargetBlocks.get(target));                target.putProp(Node.TARGETBLOCK_PROP,                                           branchTargetBlock.realBlock);                fb.addSuccessor(branchTargetBlock);                branchTargetBlock.addPredecessor(fb);            }        }        Block[] result = new Block[theBlocks.size()];        for (int i = 0; i < theBlocks.size(); i++) {            FatBlock fb = (FatBlock)(theBlocks.get(i));            Block b = fb.realBlock;            b.itsSuccessors = fb.getSuccessors();            b.itsPredecessors = fb.getPredecessors();            b.itsBlockID = i;            result[i] = b;        }        return result;    }    private static FatBlock newFatBlock(int startNodeIndex, int endNodeIndex)    {        FatBlock fb = new FatBlock();        fb.realBlock = new Block(startNodeIndex, endNodeIndex);        return fb;    }    private static String toString(Block[] blockList, Node[] statementNodes)    {        if (!DEBUG) return null;        StringWriter sw = new StringWriter();        PrintWriter pw = new PrintWriter(sw);        pw.println(blockList.length + " Blocks");        for (int i = 0; i < blockList.length; i++) {            Block b = blockList[i];            pw.println("#" + b.itsBlockID);            pw.println("from " + b.itsStartNodeIndex                            + " "                            + statementNodes[b.itsStartNodeIndex].toString());            pw.println("thru " + b.itsEndNodeIndex                            + " "                            + statementNodes[b.itsEndNodeIndex].toString());            pw.print("Predecessors ");            if (b.itsPredecessors != null) {                for (int j = 0; j < b.itsPredecessors.length; j++)                    pw.print(b.itsPredecessors[j].itsBlockID + " ");                pw.println();            }            else                pw.println("none");            pw.print("Successors ");            if (b.itsSuccessors != null) {                for (int j = 0; j < b.itsSuccessors.length; j++)                    pw.print(b.itsSuccessors[j].itsBlockID + " ");                pw.println();            }            else                pw.println("none");        }        return sw.toString();    }    private static void reachingDefDataFlow(OptFunctionNode fn, Node[] statementNodes, Block theBlocks[], int[] varTypes)    {/*    initialize the liveOnEntry and liveOnExit sets, then discover the variables    that are def'd by each function, and those that are used before being def'd    (hence liveOnEntry)*/        for (int i = 0; i < theBlocks.length; i++) {            theBlocks[i].initLiveOnEntrySets(fn, statementNodes);        }/*    this visits every block starting at the last, re-adding the predecessors of    any block whose inputs change as a result of the dataflow.    REMIND, better would be to visit in CFG postorder*/        boolean visit[] = new boolean[theBlocks.length];        boolean doneOnce[] = new boolean[theBlocks.length];        int vIndex = theBlocks.length - 1;        boolean needRescan = false;        visit[vIndex] = true;        while (true) {            if (visit[vIndex] || !doneOnce[vIndex]) {                doneOnce[vIndex] = true;                visit[vIndex] = false;                if (theBlocks[vIndex].doReachedUseDataFlow()) {                    Block pred[] = theBlocks[vIndex].itsPredecessors;                    if (pred != null) {                        for (int i = 0; i < pred.length; i++) {                            int index = pred[i].itsBlockID;                            visit[index] = true;                            needRescan |= (index > vIndex);                        }                    }                }            }            if (vIndex == 0) {                if (needRescan) {                    vIndex = theBlocks.length - 1;                    needRescan = false;                }                else                    break;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲大片精品永久免费| 精品伦理精品一区| 亚洲午夜国产一区99re久久| 国产精品免费av| 国产精品久久久久9999吃药| 久久久亚洲高清| 欧美国产精品v| 欧美国产精品一区二区| 国产精品美女一区二区| 欧美国产日韩一二三区| 亚洲欧美在线高清| 亚洲午夜在线视频| 奇米一区二区三区| 老司机午夜精品| 91在线码无精品| 国产成人午夜精品影院观看视频| 波多野结衣一区二区三区 | 老司机精品视频在线| 国产伦精一区二区三区| 不卡欧美aaaaa| 欧美夫妻性生活| 国产精品久久一级| 奇米精品一区二区三区四区| 成人免费电影视频| 色综合视频在线观看| 欧美日韩高清一区二区三区| 欧美一区二区三区免费视频 | 久久99国产精品久久| 国产精品一二三区| 欧美亚洲高清一区| 2024国产精品| 一区二区三区在线观看动漫| 日韩精品欧美成人高清一区二区| 麻豆91精品91久久久的内涵| 成人激情电影免费在线观看| 欧美人成免费网站| 欧美不卡视频一区| 久久综合久久99| 国模大尺度一区二区三区| 精品国产乱码久久久久久免费| 全国精品久久少妇| 欧美乱妇15p| 国产a精品视频| 亚洲国产成人porn| 国产亲近乱来精品视频| 国产一区二区三区免费播放| 亚洲另类在线一区| 精品国产一区二区三区不卡| 99国产欧美久久久精品| 久久国产精品区| 亚洲欧美一区二区三区久本道91| 欧美久久一区二区| 91视频在线观看| 激情av综合网| 日本欧美一区二区三区乱码| 中文字幕高清不卡| 精品国产乱码久久久久久蜜臀| 91成人免费在线| 91同城在线观看| av在线综合网| 国产大陆亚洲精品国产| 蜜臂av日日欢夜夜爽一区| 一区二区三区日韩欧美| 亚洲少妇中出一区| 久久中文娱乐网| 久久网站热最新地址| 日韩三级伦理片妻子的秘密按摩| 91国产丝袜在线播放| 国产电影一区二区三区| 国产成人aaa| 欧美老女人在线| 久久99国产精品免费网站| 午夜a成v人精品| 亚洲宅男天堂在线观看无病毒| 日韩理论电影院| 亚洲婷婷综合久久一本伊一区 | 亚洲欧美一区二区在线观看| 国产欧美日韩亚州综合| 国产精品久久久久久久久图文区 | 亚洲午夜激情网站| 视频一区在线播放| 黄色日韩网站视频| 国产成人精品一区二区三区网站观看| 日韩黄色小视频| 国产在线视频一区二区| 粉嫩aⅴ一区二区三区四区五区| 成人av电影免费在线播放| 在线免费观看一区| 精品裸体舞一区二区三区| 国产欧美一区二区精品婷婷| 亚洲三级免费观看| 日本午夜精品视频在线观看| 日本麻豆一区二区三区视频| 国产成人aaaa| 精品国产一区二区三区忘忧草| 国产精品久久精品日日| 夜夜夜精品看看| 国产麻豆一精品一av一免费 | 日韩一区二区三区av| 国产精品免费视频网站| 蜜桃一区二区三区在线| av一区二区三区黑人| 日韩欧美一区二区在线视频| 国产精品传媒入口麻豆| 国产在线播精品第三| 欧美精品在线观看播放| 一区二区三区中文在线| 久久se精品一区精品二区| 欧美高清hd18日本| 一区二区激情视频| 久久66热偷产精品| 91精品婷婷国产综合久久竹菊| 一区二区三区中文字幕在线观看| 国产中文字幕精品| 精品少妇一区二区三区| 日韩高清一区二区| 宅男噜噜噜66一区二区66| 亚洲欧美在线视频观看| 成人免费毛片片v| 国产精品女主播av| 91麻豆精品一区二区三区| 国产精品人人做人人爽人人添 | 成人美女视频在线观看18| 久久久99精品免费观看不卡| 国产白丝精品91爽爽久久| 国产色婷婷亚洲99精品小说| av在线不卡网| 洋洋成人永久网站入口| 欧美一级搡bbbb搡bbbb| 日韩国产一区二| 精品久久久影院| 成人小视频在线| 久久精品视频一区二区三区| 成人综合在线观看| 亚洲男同性恋视频| 欧美一区二区在线免费播放| 高清av一区二区| 亚洲欧美另类综合偷拍| 精品国产一区二区亚洲人成毛片| 高清不卡一区二区在线| 婷婷开心激情综合| 亚洲免费观看高清完整版在线观看| 日韩一区二区三区四区| 欧美日韩国产一级| 成人精品免费看| 精品一区二区在线看| 天天综合色天天综合色h| 亚洲色图视频免费播放| 日本一区二区视频在线| 日本一区二区三区四区在线视频 | 国产69精品久久久久毛片 | 午夜精品一区在线观看| 亚洲视频综合在线| 一区免费观看视频| 国产精品电影院| 亚洲欧美一区二区不卡| 国产欧美日韩精品a在线观看| 日韩美一区二区三区| 欧美大肚乱孕交hd孕妇| 精品久久久影院| 国产精品丝袜在线| 国产精品沙发午睡系列990531| 欧美国产日韩一二三区| 亚洲欧洲精品天堂一级| 亚洲国产毛片aaaaa无费看| 性感美女久久精品| 国产精品一区三区| 99re热视频这里只精品| 欧美电影在哪看比较好| 精品欧美乱码久久久久久1区2区| 久久久综合精品| 一区二区三区在线视频播放| 麻豆成人av在线| 91网站最新地址| 日韩一级大片在线| 国产精品理论在线观看| 日韩高清一级片| av激情亚洲男人天堂| 欧美欧美午夜aⅴ在线观看| 久久久久久亚洲综合影院红桃| 自拍偷拍欧美精品| 国产一区二区三区高清播放| 97aⅴ精品视频一二三区| 67194成人在线观看| 国产精品久久99| 久久激五月天综合精品| 97精品国产97久久久久久久久久久久| 欧美精品丝袜中出| 亚洲欧洲国产日韩| 国产乱色国产精品免费视频| 欧美在线播放高清精品| 国产精品欧美精品| 久久国产成人午夜av影院| 在线观看免费亚洲| 欧美国产禁国产网站cc| 国产精品996| 久久伊人蜜桃av一区二区| 久久丁香综合五月国产三级网站| 精品视频在线免费| 性久久久久久久久|