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

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

?? decompiler.java

?? 主要的怎么樣結(jié)合java 和 javascript!
?? JAVA
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
/* -*- 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;

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
18涩涩午夜精品.www| 精品国产一区二区亚洲人成毛片| 欧美色图天堂网| 欧美一区二区高清| 亚洲精品久久嫩草网站秘色| 毛片不卡一区二区| 久久国产尿小便嘘嘘尿| 日本不卡一二三| 97精品久久久午夜一区二区三区| 欧美一级片免费看| 亚洲一区视频在线| 99久久精品免费看国产 | 不卡视频免费播放| 精品日韩一区二区三区| 亚洲成人动漫在线免费观看| 午夜欧美电影在线观看| 免费观看一级特黄欧美大片| 欧美性做爰猛烈叫床潮| 欧美国产一区二区| 国产精品88888| 精品国产乱码久久久久久图片| 亚洲一区二区三区精品在线| 91色视频在线| 亚洲欧美视频在线观看视频| 成人亚洲一区二区一| 久久婷婷成人综合色| 日韩精品中文字幕一区二区三区| 亚洲柠檬福利资源导航| 成人黄色av电影| 国产精品视频一区二区三区不卡| 蜜桃视频在线观看一区| 制服丝袜亚洲色图| 视频一区视频二区中文字幕| 在线观看av一区二区| 亚洲精品高清视频在线观看| 色综合视频在线观看| 欧美国产禁国产网站cc| 亚洲男同1069视频| 欧美在线免费播放| 亚洲午夜在线视频| 欧美日韩和欧美的一区二区| 亚洲电影中文字幕在线观看| 欧美日韩一区二区三区不卡| 日韩中文字幕不卡| 91精选在线观看| 毛片不卡一区二区| 26uuu亚洲综合色欧美| 成人黄色国产精品网站大全在线免费观看 | 欧美激情在线一区二区| 高清在线观看日韩| 亚洲婷婷国产精品电影人久久| av电影在线观看完整版一区二区| 中文字幕一区二区在线观看| 91视频免费看| 日韩综合在线视频| 久久综合网色—综合色88| 国产a级毛片一区| 亚洲色图20p| 欧美美女直播网站| 欧美三级在线播放| 中文字幕一区二区三区av| 国产成人在线网站| 亚洲免费看黄网站| 欧美日韩免费一区二区三区视频| 久久精品国产免费看久久精品| 日韩三级在线免费观看| 国产高清成人在线| 亚洲欧美一区二区视频| 6080国产精品一区二区| 激情综合网av| 亚洲精品写真福利| 欧美少妇一区二区| 国产.欧美.日韩| 亚洲天堂精品视频| 欧美一区日韩一区| 国产 欧美在线| 亚洲成在线观看| 中文字幕精品—区二区四季| 波波电影院一区二区三区| 日韩精彩视频在线观看| 久久久精品国产99久久精品芒果| 色狠狠综合天天综合综合| 日韩福利视频网| 亚洲人一二三区| 色综合久久99| 国产美女精品人人做人人爽| 久久九九久久九九| 欧美猛男男办公室激情| 国产一区二区三区久久悠悠色av| 最新热久久免费视频| 欧美日韩黄色一区二区| 国产91对白在线观看九色| 久久成人免费日本黄色| 国产精品不卡在线| 久久久青草青青国产亚洲免观| 9l国产精品久久久久麻豆| 狠狠狠色丁香婷婷综合激情| 亚洲乱码中文字幕| 国产精品色哟哟网站| 欧美一区欧美二区| 国产在线精品不卡| 精品免费一区二区三区| 色综合久久久久久久久| 国产精品亚洲一区二区三区妖精| 午夜精品影院在线观看| 91高清视频在线| 日韩国产欧美在线视频| 综合中文字幕亚洲| 国产精品―色哟哟| 日韩无一区二区| 欧美电影在哪看比较好| 成年人午夜久久久| 成人在线综合网| 麻豆极品一区二区三区| 久久精品999| 欧美日韩一区在线观看| 在线观看一区日韩| 成人国产一区二区三区精品| 国产suv精品一区二区6| 日韩高清在线一区| 日韩精品亚洲专区| 一区av在线播放| 亚洲伊人色欲综合网| 亚洲乱码中文字幕| 成人免费视频在线观看| 国产精品热久久久久夜色精品三区 | 免费观看久久久4p| 亚洲一区二区三区四区在线观看| 久久综合久久久久88| 日韩欧美区一区二| xnxx国产精品| 精品福利视频一区二区三区| 欧美中文字幕一区二区三区 | 在线看不卡av| 国产欧美一区二区精品久导航 | 欧美一区二区大片| 欧美日韩一区久久| 欧美性生活影院| 成人免费毛片嘿嘿连载视频| 国产成都精品91一区二区三| 99久久伊人精品| 99re8在线精品视频免费播放| 91成人国产精品| 欧美午夜宅男影院| 精品国产免费人成电影在线观看四季| 欧美精品自拍偷拍动漫精品| 精品女同一区二区| 久久午夜电影网| 亚洲色图一区二区| 中文字幕亚洲区| 午夜a成v人精品| 国产精品一区在线观看你懂的| 国产一区二区三区日韩| 在线一区二区三区| 色噜噜久久综合| 精品久久久久久久久久久久包黑料 | 亚洲国产日韩一区二区| 亚洲二区在线观看| 精品一二三四在线| 粉嫩绯色av一区二区在线观看| 成人av片在线观看| 91精品国产91久久综合桃花 | 亚洲成av人片一区二区| 久久av资源站| 91亚洲午夜精品久久久久久| 五月婷婷激情综合网| 日韩制服丝袜av| 国产成人自拍网| 在线成人av影院| 亚洲黄色片在线观看| 国产精品视频线看| 亚洲免费av网站| 麻豆高清免费国产一区| 色哟哟欧美精品| 欧美精品一区二区三| 午夜精品一区在线观看| 91亚洲精品一区二区乱码| 欧美一区二区三区免费观看视频| 亚洲麻豆国产自偷在线| 九九九精品视频| 欧美福利视频一区| 亚洲国产精品成人综合 | 日韩一区二区三区电影在线观看 | 在线观看视频一区二区欧美日韩| 欧美一区二区视频在线观看2020 | 色婷婷av久久久久久久| 欧美电视剧免费全集观看| 国产午夜精品久久久久久免费视 | 日本色综合中文字幕| 92精品国产成人观看免费| 欧美成人一区二区三区片免费 | 91免费在线视频观看| 国产拍欧美日韩视频二区| 图片区小说区区亚洲影院| 欧美日韩精品二区第二页| 欧美激情在线一区二区| 国产成人精品影院| 国产亚洲综合性久久久影院| 免费成人美女在线观看.| 日韩一级片网站|