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

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

?? decompiler.java

?? 主要的怎么樣結合java 和 javascript!
?? JAVA
?? 第 1 頁 / 共 2 頁
字號:
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- * * 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): * Mike Ang * Igor Bukanov * Mike McCabe * * 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;/** * The following class save decompilation information about the source. * Source information is returned from the parser as a String * associated with function nodes and with the toplevel script.  When * saved in the constant pool of a class, this string will be UTF-8 * encoded, and token values will occupy a single byte. * Source is saved (mostly) as token numbers.  The tokens saved pretty * much correspond to the token stream of a 'canonical' representation * of the input program, as directed by the parser.  (There were a few * cases where tokens could have been left out where decompiler could * easily reconstruct them, but I left them in for clarity).  (I also * looked adding source collection to TokenStream instead, where I * could have limited the changes to a few lines in getToken... but * this wouldn't have saved any space in the resulting source * representation, and would have meant that I'd have to duplicate * parser logic in the decompiler to disambiguate situations where * newlines are important.)  The function decompile expands the * tokens back into their string representations, using simple * lookahead to correct spacing and indentation. * * Assignments are saved as two-token pairs (Token.ASSIGN, op). Number tokens * are stored inline, as a NUMBER token, a character representing the type, and * either 1 or 4 characters representing the bit-encoding of the number.  String * types NAME, STRING and OBJECT are currently stored as a token type, * followed by a character giving the length of the string (assumed to * be less than 2^16), followed by the characters of the string * inlined into the source string.  Changing this to some reference to * to the string in the compiled class' constant pool would probably * save a lot of space... but would require some method of deriving * the final constant pool entry from information available at parse * time. */public class Decompiler{    /**     * Flag to indicate that the decompilation should omit the     * function header and trailing brace.     */    public static final int ONLY_BODY_FLAG = 1 << 0;    /**     * Flag to indicate that the decompilation generates toSource result.     */    public static final int TO_SOURCE_FLAG = 1 << 1;    /**     * Decompilation property to specify initial ident value.     */    public static final int INITIAL_INDENT_PROP = 1;    /**     * Decompilation property to specify default identation offset.     */    public static final int INDENT_GAP_PROP = 2;    /**     * Decompilation property to specify identation offset for case labels.     */    public static final int CASE_GAP_PROP = 3;    // Marker to denote the last RC of function so it can be distinguished from    // the last RC of object literals in case of function expressions    private static final int FUNCTION_END = Token.LAST_TOKEN + 1;    String getEncodedSource()    {        return sourceToString(0);    }    int getCurrentOffset()    {        return sourceTop;    }    int markFunctionStart(int functionType)    {        int savedOffset = getCurrentOffset();        addToken(Token.FUNCTION);        append((char)functionType);        return savedOffset;    }    int markFunctionEnd(int functionStart)    {        int offset = getCurrentOffset();        append((char)FUNCTION_END);        return offset;    }    void addToken(int token)    {        if (!(0 <= token && token <= Token.LAST_TOKEN))            throw new IllegalArgumentException();        append((char)token);    }    void addEOL(int token)    {        if (!(0 <= token && token <= Token.LAST_TOKEN))            throw new IllegalArgumentException();        append((char)token);        append((char)Token.EOL);    }    void addName(String str)    {        addToken(Token.NAME);        appendString(str);    }    void addString(String str)    {        addToken(Token.STRING);        appendString(str);    }    void addRegexp(String regexp, String flags)    {        addToken(Token.REGEXP);        appendString('/' + regexp + '/' + flags);    }    void addNumber(double n)    {        addToken(Token.NUMBER);        /* encode the number in the source stream.         * Save as NUMBER type (char | char char char char)         * where type is         * 'D' - double, 'S' - short, 'J' - long.         * We need to retain float vs. integer type info to keep the         * behavior of liveconnect type-guessing the same after         * decompilation.  (Liveconnect tries to present 1.0 to Java         * as a float/double)         * OPT: This is no longer true. We could compress the format.         * This may not be the most space-efficient encoding;         * the chars created below may take up to 3 bytes in         * constant pool UTF-8 encoding, so a Double could take         * up to 12 bytes.         */        long lbits = (long)n;        if (lbits != n) {            // if it's floating point, save as a Double bit pattern.            // (12/15/97 our scanner only returns Double for f.p.)            lbits = Double.doubleToLongBits(n);            append('D');            append((char)(lbits >> 48));            append((char)(lbits >> 32));            append((char)(lbits >> 16));            append((char)lbits);        }        else {            // we can ignore negative values, bc they're already prefixed            // by NEG               if (lbits < 0) Kit.codeBug();            // will it fit in a char?            // this gives a short encoding for integer values up to 2^16.            if (lbits <= Character.MAX_VALUE) {                append('S');                append((char)lbits);            }            else { // Integral, but won't fit in a char. Store as a long.                append('J');                append((char)(lbits >> 48));                append((char)(lbits >> 32));                append((char)(lbits >> 16));                append((char)lbits);            }        }    }    private void appendString(String str)    {        int L = str.length();        int lengthEncodingSize = 1;        if (L >= 0x8000) {            lengthEncodingSize = 2;        }        int nextTop = sourceTop + lengthEncodingSize + L;        if (nextTop > sourceBuffer.length) {            increaseSourceCapacity(nextTop);        }        if (L >= 0x8000) {            // Use 2 chars to encode strings exceeding 32K, were the highest            // bit in the first char indicates presence of the next byte            sourceBuffer[sourceTop] = (char)(0x8000 | (L >>> 16));            ++sourceTop;        }        sourceBuffer[sourceTop] = (char)L;        ++sourceTop;        str.getChars(0, L, sourceBuffer, sourceTop);        sourceTop = nextTop;    }    private void append(char c)    {        if (sourceTop == sourceBuffer.length) {            increaseSourceCapacity(sourceTop + 1);        }        sourceBuffer[sourceTop] = c;        ++sourceTop;    }    private void increaseSourceCapacity(int minimalCapacity)    {        // Call this only when capacity increase is must        if (minimalCapacity <= sourceBuffer.length) Kit.codeBug();        int newCapacity = sourceBuffer.length * 2;        if (newCapacity < minimalCapacity) {            newCapacity = minimalCapacity;        }        char[] tmp = new char[newCapacity];        System.arraycopy(sourceBuffer, 0, tmp, 0, sourceTop);        sourceBuffer = tmp;    }    private String sourceToString(int offset)    {        if (offset < 0 || sourceTop < offset) Kit.codeBug();        return new String(sourceBuffer, offset, sourceTop - offset);    }    /**     * Decompile the source information associated with this js     * function/script back into a string.  For the most part, this     * just means translating tokens back to their string     * representations; there's a little bit of lookahead logic to     * decide the proper spacing/indentation.  Most of the work in     * mapping the original source to the prettyprinted decompiled     * version is done by the parser.     *     * @param source encoded source tree presentation     *     * @param flags flags to select output format     *     * @param properties indentation properties     *     */    public static String decompile(String source, int flags,                                   UintMap properties)    {        int length = source.length();        if (length == 0) { return ""; }        int indent = properties.getInt(INITIAL_INDENT_PROP, 0);        if (indent < 0) throw new IllegalArgumentException();        int indentGap = properties.getInt(INDENT_GAP_PROP, 4);        if (indentGap < 0) throw new IllegalArgumentException();        int caseGap = properties.getInt(CASE_GAP_PROP, 2);        if (caseGap < 0) throw new IllegalArgumentException();        StringBuffer result = new StringBuffer();        boolean justFunctionBody = (0 != (flags & Decompiler.ONLY_BODY_FLAG));        boolean toSource = (0 != (flags & Decompiler.TO_SOURCE_FLAG));        // Spew tokens in source, for debugging.        // as TYPE number char        if (printSource) {            System.err.println("length:" + length);            for (int i = 0; i < length; ++i) {                // Note that tokenToName will fail unless Context.printTrees                // is true.                String tokenname = null;                if (Token.printNames) {                    tokenname = Token.name(source.charAt(i));                }                if (tokenname == null) {                    tokenname = "---";                }                String pad = tokenname.length() > 7                    ? "\t"                    : "\t\t";                System.err.println                    (tokenname                     + pad + (int)source.charAt(i)                     + "\t'" + ScriptRuntime.escapeString                     (source.substring(i, i+1))                     + "'");            }            System.err.println();        }        int braceNesting = 0;        boolean afterFirstEOL = false;        int i = 0;        int topFunctionType;        if (source.charAt(i) == Token.SCRIPT) {            ++i;            topFunctionType = -1;        } else {            topFunctionType = source.charAt(i + 1);        }        if (!toSource) {            // add an initial newline to exactly match js.            result.append('\n');            for (int j = 0; j < indent; j++)                result.append(' ');        } else {            if (topFunctionType == FunctionNode.FUNCTION_EXPRESSION) {                result.append('(');            }        }        while (i < length) {            switch(source.charAt(i)) {            case Token.NAME:            case Token.REGEXP:  // re-wrapped in '/'s in parser...                i = printSourceString(source, i + 1, false, result);                continue;            case Token.STRING:                i = printSourceString(source, i + 1, true, result);                continue;            case Token.NUMBER:                i = printSourceNumber(source, i + 1, result);                continue;            case Token.TRUE:                result.append("true");                break;            case Token.FALSE:                result.append("false");                break;            case Token.NULL:                result.append("null");                break;            case Token.THIS:                result.append("this");                break;            case Token.FUNCTION:                ++i; // skip function type                result.append("function ");                break;            case FUNCTION_END:                // Do nothing                break;            case Token.COMMA:                result.append(", ");                break;            case Token.LC:                ++braceNesting;                if (Token.EOL == getNext(source, length, i))                    indent += indentGap;                result.append('{');                break;            case Token.RC: {                --braceNesting;                /* don't print the closing RC if it closes the                 * toplevel function and we're called from                 * decompileFunctionBody.                 */                if (justFunctionBody && braceNesting == 0)                    break;                result.append('}');                switch (getNext(source, length, i)) {                    case Token.EOL:                    case FUNCTION_END:                        indent -= indentGap;                        break;                    case Token.WHILE:                    case Token.ELSE:                        indent -= indentGap;                        result.append(' ');                        break;                }                break;            }            case Token.LP:                result.append('(');                break;            case Token.RP:                result.append(')');                if (Token.LC == getNext(source, length, i))                    result.append(' ');                break;            case Token.LB:                result.append('[');                break;            case Token.RB:                result.append(']');                break;            case Token.EOL: {                if (toSource) break;                boolean newLine = true;                if (!afterFirstEOL) {                    afterFirstEOL = true;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
97精品电影院| 色狠狠综合天天综合综合| 亚洲成人午夜电影| 亚洲色图制服诱惑| 欧美精品一区男女天堂| 欧美成人官网二区| 精品国产精品网麻豆系列| 精品电影一区二区| 26uuu国产一区二区三区| 精品国产麻豆免费人成网站| 精品国产电影一区二区| 久久久噜噜噜久久人人看| 欧美国产综合色视频| 国产女同互慰高潮91漫画| 欧美韩国日本综合| 一区二区三区 在线观看视频| 亚洲午夜久久久| 午夜精品久久久久久久久久久| 九一九一国产精品| 国产成人综合亚洲网站| 99精品欧美一区二区三区小说 | 51精品国自产在线| 欧美一区二区三区在线观看视频 | 国产不卡免费视频| 91视频91自| 日韩一区二区在线观看视频| 国产午夜一区二区三区| 一区二区三区欧美久久| 欧美日韩一区二区三区在线| 欧美激情在线看| 成人一区二区三区视频| 久久这里只有精品6| 亚洲第一综合色| 在线观看日韩精品| 中文字幕av一区二区三区免费看 | 久久综合久久综合亚洲| 亚洲一区二区三区小说| 国产盗摄精品一区二区三区在线 | 毛片不卡一区二区| 国产成人丝袜美腿| 欧美美女网站色| 国产日产欧美一区二区三区| 日韩高清电影一区| jizzjizzjizz欧美| 日韩午夜av电影| 一区二区三区日本| 国产91精品露脸国语对白| 欧美精品自拍偷拍动漫精品| 国产精品乱码一区二区三区软件 | 久久精品国产在热久久| 日本高清不卡一区| 欧美精彩视频一区二区三区| 石原莉奈在线亚洲二区| 色婷婷综合久久久久中文| 欧美韩日一区二区三区四区| 另类小说图片综合网| 欧美网站大全在线观看| 国产精品福利电影一区二区三区四区| 三级欧美在线一区| 欧洲人成人精品| 亚洲啪啪综合av一区二区三区| 国产在线播放一区三区四| 91精品国产综合久久福利软件| 亚洲精品欧美激情| 99国产精品视频免费观看| 久久久www成人免费毛片麻豆| 日日夜夜精品视频免费| 精品视频一区三区九区| 亚洲欧洲日产国码二区| 丁香婷婷深情五月亚洲| 国产亚洲精品免费| 精品在线播放免费| 精品久久久久久久久久久久久久久 | 欧美午夜电影网| 国产精品性做久久久久久| 亚洲一区在线观看视频| 一区二区三区在线视频播放| 国产三级精品视频| 欧美大片一区二区| 欧美高清hd18日本| 欧美日韩一区二区在线观看| 欧美在线观看你懂的| 精品一区二区三区免费| 日韩高清不卡一区二区三区| 精品一区二区三区久久| 一区二区三区中文在线| 久久 天天综合| 久久久不卡网国产精品一区| 国产成人鲁色资源国产91色综| 精品av久久707| 国产精选一区二区三区| 国产精品国产三级国产aⅴ原创| 不卡一区二区中文字幕| 亚洲永久免费视频| 91精品啪在线观看国产60岁| 激情五月婷婷综合网| 久久久久9999亚洲精品| 91麻豆.com| 视频一区视频二区在线观看| 337p粉嫩大胆噜噜噜噜噜91av | 亚洲视频在线一区二区| 欧美伊人精品成人久久综合97| 性做久久久久久免费观看欧美| 欧美电视剧免费全集观看| 国精产品一区一区三区mba桃花| 久久久九九九九| 欧美午夜精品电影| 久久99国产乱子伦精品免费| 国产精品人成在线观看免费| 欧美无乱码久久久免费午夜一区| 精品在线免费视频| 亚洲视频 欧洲视频| 91精品欧美久久久久久动漫| 风间由美一区二区av101| 一区二区三区欧美激情| 国产亚洲精久久久久久| 欧美性色黄大片手机版| 黄色日韩网站视频| 亚洲电影视频在线| 欧美国产精品专区| 欧美一区二区三区播放老司机| 成人午夜激情影院| 久久国产精品一区二区| 一区二区三区免费观看| 久久综合久久99| 91精品国产色综合久久久蜜香臀| 99re这里只有精品视频首页| 久久成人免费网| 亚洲国产aⅴ天堂久久| 中文在线免费一区三区高中清不卡| 欧美专区日韩专区| 从欧美一区二区三区| 蜜臂av日日欢夜夜爽一区| 91精品久久久久久久91蜜桃| 国产一区二区成人久久免费影院| 国产精品网站在线播放| 国产精品色哟哟| 久久蜜桃av一区二区天堂| 国产精品动漫网站| 久久99精品国产麻豆不卡| 久国产精品韩国三级视频| 欧美日韩在线不卡| 色噜噜狠狠一区二区三区果冻| 国产精品一区二区久久精品爱涩| 老司机午夜精品| 视频在线观看91| 国产乱子轮精品视频| 国精产品一区一区三区mba视频 | 久久久精品影视| 精品国产伦一区二区三区免费| 欧美激情中文不卡| 亚洲午夜激情网站| 奇米亚洲午夜久久精品| 国产剧情一区二区| 欧美在线999| 日韩欧美在线1卡| 1区2区3区精品视频| 亚洲午夜免费视频| 国产伦精品一区二区三区视频青涩| 色综合色综合色综合色综合色综合| 欧美日韩高清一区二区| 国产女主播一区| 婷婷开心激情综合| 99精品黄色片免费大全| 日韩免费电影一区| 一区二区三区日韩在线观看| 久久成人18免费观看| 97久久精品人人爽人人爽蜜臀| 欧美一级xxx| 中文字幕日韩av资源站| 美国av一区二区| 在线观看成人免费视频| 久久精品一区四区| 爽好多水快深点欧美视频| 一本色道久久综合精品竹菊| 欧美一区二区免费| 亚洲在线中文字幕| 亚洲成人免费视频| 99久久国产综合精品女不卡| 久久中文字幕电影| 免费日韩伦理电影| 欧美日韩精品一区二区三区| 欧美国产在线观看| 国产在线精品一区二区夜色| 欧美影片第一页| 亚洲日本乱码在线观看| 国产成人av一区| 日韩一区和二区| 香蕉成人啪国产精品视频综合网| 国产黄色91视频| 91久久香蕉国产日韩欧美9色| 26uuu色噜噜精品一区| 狠狠狠色丁香婷婷综合激情| 91精品在线观看入口| 偷拍与自拍一区| 欧美视频一区二区三区在线观看| 亚洲男人电影天堂| 成人久久视频在线观看| 久久精品一区二区三区av| 中文字幕亚洲欧美在线不卡|