⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 context.java

📁 這是一個javascript 的 interpreter是了解 web browser的好材料
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- * * ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0 * * The contents of this file are subject to the Mozilla 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/MPL/ * * 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 the Initial Developer are Copyright (C) 1997-2000 * the Initial Developer. All Rights Reserved. * * Contributor(s): *    Bob Jervis * * Alternatively, the contents of this file may be used under the terms of * the GNU General Public License Version 2 or later (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 * MPL, indicate your decision by deleting the provisions above and replacing * 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 MPL or the GPL. * * ***** END LICENSE BLOCK ***** */// API classpackage org.mozilla.javascript;import java.beans.PropertyChangeEvent;import java.beans.PropertyChangeListener;import java.io.CharArrayWriter;import java.io.IOException;import java.io.PrintWriter;import java.io.Reader;import java.io.StringWriter;import java.io.Writer;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.util.Hashtable;import java.util.Locale;import org.mozilla.javascript.debug.DebuggableScript;import org.mozilla.javascript.debug.Debugger;import org.mozilla.javascript.xml.XMLLib;/** * This class represents the runtime context of an executing script. * * Before executing a script, an instance of Context must be created * and associated with the thread that will be executing the script. * The Context will be used to store information about the executing * of the script such as the call stack. Contexts are associated with * the current thread  using the {@link #call(ContextAction)} * or {@link #enter()} methods.<p> * * Different forms of script execution are supported. Scripts may be * evaluated from the source directly, or first compiled and then later * executed. Interactive execution is also supported.<p> * * Some aspects of script execution, such as type conversions and * object creation, may be accessed directly through methods of * Context. * * @see Scriptable * @author Norris Boyd * @author Brendan Eich */public class Context{    /**     * Language versions.     *     * All integral values are reserved for future version numbers.     */    /**     * The unknown version.     */    public static final int VERSION_UNKNOWN =   -1;    /**     * The default version.     */    public static final int VERSION_DEFAULT =    0;    /**     * JavaScript 1.0     */    public static final int VERSION_1_0 =      100;    /**     * JavaScript 1.1     */    public static final int VERSION_1_1 =      110;    /**     * JavaScript 1.2     */    public static final int VERSION_1_2 =      120;    /**     * JavaScript 1.3     */    public static final int VERSION_1_3 =      130;    /**     * JavaScript 1.4     */    public static final int VERSION_1_4 =      140;    /**     * JavaScript 1.5     */    public static final int VERSION_1_5 =      150;    /**     * JavaScript 1.6     */    public static final int VERSION_1_6 =      160;    /**     * JavaScript 1.7     */    public static final int VERSION_1_7 =      170;    /**     * Controls behaviour of <tt>Date.prototype.getYear()</tt>.     * If <tt>hasFeature(FEATURE_NON_ECMA_GET_YEAR)</tt> returns true,     * Date.prototype.getYear subtructs 1900 only if 1900 <= date < 2000.     * The default behavior of {@link #hasFeature(int)} is always to subtruct     * 1900 as rquired by ECMAScript B.2.4.     */    public static final int FEATURE_NON_ECMA_GET_YEAR = 1;    /**     * Control if member expression as function name extension is available.     * If <tt>hasFeature(FEATURE_MEMBER_EXPR_AS_FUNCTION_NAME)</tt> returns     * true, allow <tt>function memberExpression(args) { body }</tt> to be     * syntax sugar for <tt>memberExpression = function(args) { body }</tt>,     * when memberExpression is not a simple identifier.     * See ECMAScript-262, section 11.2 for definition of memberExpression.     * By default {@link #hasFeature(int)} returns false.     */    public static final int FEATURE_MEMBER_EXPR_AS_FUNCTION_NAME = 2;    /**     * Control if reserved keywords are treated as identifiers.     * If <tt>hasFeature(RESERVED_KEYWORD_AS_IDENTIFIER)</tt> returns true,     * treat future reserved keyword (see  Ecma-262, section 7.5.3) as ordinary     * identifiers but warn about this usage.     *     * By default {@link #hasFeature(int)} returns false.     */    public static final int FEATURE_RESERVED_KEYWORD_AS_IDENTIFIER = 3;    /**     * Control if <tt>toString()</tt> should returns the same result     * as  <tt>toSource()</tt> when applied to objects and arrays.     * If <tt>hasFeature(FEATURE_TO_STRING_AS_SOURCE)</tt> returns true,     * calling <tt>toString()</tt> on JS objects gives the same result as     * calling <tt>toSource()</tt>. That is it returns JS source with code     * to create an object with all enumeratable fields of the original object     * instead of printing <tt>[object <i>result of     * {@link Scriptable#getClassName()}</i>]</tt>.     * <p>     * By default {@link #hasFeature(int)} returns true only if     * the current JS version is set to {@link #VERSION_1_2}.     */    public static final int FEATURE_TO_STRING_AS_SOURCE = 4;    /**     * Control if properties <tt>__proto__</tt> and <tt>__parent__</tt>     * are treated specially.     * If <tt>hasFeature(FEATURE_PARENT_PROTO_PROPERTIES)</tt> returns true,     * treat <tt>__parent__</tt> and <tt>__proto__</tt> as special properties.     * <p>     * The properties allow to query and set scope and prototype chains for the     * objects. The special meaning of the properties is available     * only when they are used as the right hand side of the dot operator.     * For example, while <tt>x.__proto__ = y</tt> changes the prototype     * chain of the object <tt>x</tt> to point to <tt>y</tt>,     * <tt>x["__proto__"] = y</tt> simply assigns a new value to the property     * <tt>__proto__</tt> in <tt>x</tt> even when the feature is on.     *     * By default {@link #hasFeature(int)} returns true.     */    public static final int FEATURE_PARENT_PROTO_PROPERTIES = 5;	/**	 * @deprecated In previous releases, this name was given to	 * FEATURE_PARENT_PROTO_PROPERTIES.	 */    public static final int FEATURE_PARENT_PROTO_PROPRTIES = 5;	    /**     * Control if support for E4X(ECMAScript for XML) extension is available.     * If hasFeature(FEATURE_E4X) returns true, the XML syntax is available.     * <p>     * By default {@link #hasFeature(int)} returns true if     * the current JS version is set to {@link #VERSION_DEFAULT}     * or is at least {@link #VERSION_1_6}.     * @since 1.6 Release 1     */    public static final int FEATURE_E4X = 6;    /**     * Control if dynamic scope should be used for name access.     * If hasFeature(FEATURE_DYNAMIC_SCOPE) returns true, then the name lookup     * during name resolution will use the top scope of the script or function     * which is at the top of JS execution stack instead of the top scope of the     * script or function from the current stack frame if the top scope of     * the top stack frame contains the top scope of the current stack frame     * on its prototype chain.     * <p>     * This is useful to define shared scope containing functions that can     * be called from scripts and functions using private scopes.     * <p>     * By default {@link #hasFeature(int)} returns false.     * @since 1.6 Release 1     */    public static final int FEATURE_DYNAMIC_SCOPE = 7;    /**     * Control if strict variable mode is enabled.     * When the feature is on Rhino reports runtime errors if assignment     * to a global variable that does not exist is executed. When the feature     * is off such assignments creates new variable in the global scope  as     * required by ECMA 262.     * <p>     * By default {@link #hasFeature(int)} returns false.     * @since 1.6 Release 1     */    public static final int FEATURE_STRICT_VARS = 8;    /**     * Control if strict eval mode is enabled.     * When the feature is on Rhino reports runtime errors if non-string     * argument is passed to the eval function. When the feature is off     * eval simply return non-string argument as is without performing any     * evaluation as required by ECMA 262.     * <p>     * By default {@link #hasFeature(int)} returns false.     * @since 1.6 Release 1     */    public static final int FEATURE_STRICT_EVAL = 9;    /**     * When the feature is on Rhino will add a "fileName" and "lineNumber"     * properties to Error objects automatically. When the feature is off, you     * have to explicitly pass them as the second and third argument to the     * Error constructor. Note that neither behaviour is fully ECMA 262      * compliant (as 262 doesn't specify a three-arg constructor), but keeping      * the feature off results in Error objects that don't have     * additional non-ECMA properties when constructed using the ECMA-defined     * single-arg constructor and is thus desirable if a stricter ECMA      * compliance is desired, specifically adherence to the point 15.11.5. of     * the standard.     * <p>     * By default {@link #hasFeature(int)} returns false.     * @since 1.6 Release 6     */    public static final int FEATURE_LOCATION_INFORMATION_IN_ERROR = 10;    /**     * Controls whether JS 1.5 'strict mode' is enabled.     * When the feature is on, Rhino reports more than a dozen different     * warnings.  When the feature is off, these warnings are not generated.     * FEATURE_STRICT_MODE implies FEATURE_STRICT_VARS and FEATURE_STRICT_EVAL.     * <p>     * By default {@link #hasFeature(int)} returns false.     * @since 1.6 Release 6     */    public static final int FEATURE_STRICT_MODE = 11;    /**     * Controls whether a warning should be treated as an error.     * @since 1.6 Release 6     */    public static final int FEATURE_WARNING_AS_ERROR = 12;    /**     * Enables enhanced access to Java.      * Specifically, controls whether private and protected members can be     * accessed, and whether scripts can catch all Java exceptions.     * <p>     * Note that this feature should only be enabled for trusted scripts.     * <p>     * By default {@link #hasFeature(int)} returns false.     * @since 1.7 Release 1     */    public static final int FEATURE_ENHANCED_JAVA_ACCESS = 13;    public static final String languageVersionProperty = "language version";    public static final String errorReporterProperty   = "error reporter";    /**     * Convenient value to use as zero-length array of objects.     */    public static final Object[] emptyArgs = ScriptRuntime.emptyArgs;    /**     * Create a new Context.     *     * Note that the Context must be associated with a thread before     * it can be used to execute a script.     * @deprecated use {@link ContextFactory#enter()} or      * {@link ContextFactory#call(ContextAction)} instead.     */    public Context()    {        this(ContextFactory.getGlobal());    }        Context(ContextFactory factory)    {        assert factory != null;        this.factory = factory;        setLanguageVersion(VERSION_DEFAULT);        optimizationLevel = codegenClass != null ? 0 : -1;        maximumInterpreterStackDepth = Integer.MAX_VALUE;    }    /**     * Get the current Context.     *     * The current Context is per-thread; this method looks up     * the Context associated with the current thread. <p>     *     * @return the Context associated with the current thread, or     *         null if no context is associated with the current     *         thread.     * @see ContextFactory#enterContext()     * @see ContextFactory#call(ContextAction)     */    public static Context getCurrentContext()    {        Object helper = VMBridge.instance.getThreadContextHelper();        return VMBridge.instance.getContext(helper);    }    /**     * Same as calling {@link ContextFactory#enterContext()} on the global

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -