--- old/src/jdk/nashorn/internal/objects/Global.java 2014-03-14 20:34:08.086878535 +0530 +++ new/src/jdk/nashorn/internal/objects/Global.java 2014-03-14 20:34:07.954877878 +0530 @@ -48,7 +48,6 @@ import jdk.nashorn.internal.runtime.ConsString; import jdk.nashorn.internal.runtime.Context; import jdk.nashorn.internal.runtime.GlobalFunctions; -import jdk.nashorn.internal.runtime.GlobalObject; import jdk.nashorn.internal.runtime.JSType; import jdk.nashorn.internal.runtime.NativeJavaPackage; import jdk.nashorn.internal.runtime.PropertyDescriptor; @@ -70,7 +69,7 @@ * Representation of global scope. */ @ScriptClass("Global") -public final class Global extends ScriptObject implements GlobalObject, Scope { +public final class Global extends ScriptObject implements Scope { private final InvokeByName TO_STRING = new InvokeByName("toString", ScriptObject.class); private final InvokeByName VALUE_OF = new InvokeByName("valueOf", ScriptObject.class); @@ -433,11 +432,9 @@ * @return the global singleton */ public static Global instance() { - ScriptObject global = Context.getGlobal(); - if (! (global instanceof Global)) { - throw new IllegalStateException("no current global instance"); - } - return (Global)global; + Global global = Context.getGlobal(); + global.getClass(); // null check + return global; } /** @@ -458,19 +455,30 @@ return instance().getContext(); } - // GlobalObject interface implementation + // Runtime interface to Global - @Override + /** + * Is this global of the given Context? + * @param ctxt the context + * @return true if this global belongs to the given Context + */ public boolean isOfContext(final Context ctxt) { return this.context == ctxt; } - @Override + /** + * Does this global belong to a strict Context? + * @return true if this global belongs to a strict Context + */ public boolean isStrictContext() { return context.getEnv()._strict; } - @Override + /** + * Initialize standard builtin objects like "Object", "Array", "Function" etc. + * as well as our extension builtin objects like "Java", "JSAdapter" as properties + * of the global scope object. + */ public void initBuiltinObjects() { if (this.builtinObject != null) { // already initialized, just return @@ -480,12 +488,26 @@ init(); } - @Override + /** + * Create a new ScriptFunction object + * + * @param name function name + * @param handle invocation handle for function + * @param scope the scope + * @param strict are we in strict mode + * + * @return new script function + */ public ScriptFunction newScriptFunction(final String name, final MethodHandle handle, final ScriptObject scope, final boolean strict) { return new ScriptFunctionImpl(name, handle, scope, null, strict ? ScriptFunctionData.IS_STRICT_CONSTRUCTOR : ScriptFunctionData.IS_CONSTRUCTOR); } - @Override + /** + * Wrap a Java object as corresponding script object + * + * @param obj object to wrap + * @return wrapped object + */ public Object wrapAsObject(final Object obj) { if (obj instanceof Boolean) { return new NativeBoolean((Boolean)obj, this); @@ -507,7 +529,14 @@ } } - @Override + /** + * Lookup helper for JS primitive types + * + * @param request the link request for the dynamic call site. + * @param self self reference + * + * @return guarded invocation + */ public GuardedInvocation primitiveLookup(final LinkRequest request, final Object self) { if (self instanceof String || self instanceof ConsString) { return NativeString.lookupPrimitive(request, self); @@ -519,12 +548,23 @@ throw new IllegalArgumentException("Unsupported primitive: " + self); } - @Override + /** + * Create a new empty script object + * + * @return the new ScriptObject + */ public ScriptObject newObject() { return new JO(getObjectPrototype(), JO.getInitialMap()); } - @Override + /** + * Default value of given type + * + * @param sobj script object + * @param typeHint type hint + * + * @return default value + */ public Object getDefaultValue(final ScriptObject sobj, final Class typeHint) { // When the [[DefaultValue]] internal method of O is called with no hint, // then it behaves as if the hint were Number, unless O is a Date object @@ -584,7 +624,7 @@ return UNDEFINED; } - @Override + public boolean isError(final ScriptObject sobj) { final ScriptObject errorProto = getErrorPrototype(); ScriptObject proto = sobj.getProto(); @@ -597,52 +637,42 @@ return false; } - @Override public ScriptObject newError(final String msg) { return new NativeError(msg, this); } - @Override public ScriptObject newEvalError(final String msg) { return new NativeEvalError(msg, this); } - @Override public ScriptObject newRangeError(final String msg) { return new NativeRangeError(msg, this); } - @Override public ScriptObject newReferenceError(final String msg) { return new NativeReferenceError(msg, this); } - @Override public ScriptObject newSyntaxError(final String msg) { return new NativeSyntaxError(msg, this); } - @Override public ScriptObject newTypeError(final String msg) { return new NativeTypeError(msg, this); } - @Override public ScriptObject newURIError(final String msg) { return new NativeURIError(msg, this); } - @Override public PropertyDescriptor newGenericDescriptor(final boolean configurable, final boolean enumerable) { return new GenericPropertyDescriptor(configurable, enumerable, this); } - @Override public PropertyDescriptor newDataDescriptor(final Object value, final boolean configurable, final boolean enumerable, final boolean writable) { return new DataPropertyDescriptor(configurable, enumerable, writable, value, this); } - @Override public PropertyDescriptor newAccessorDescriptor(final Object get, final Object set, final boolean configurable, final boolean enumerable) { final AccessorPropertyDescriptor desc = new AccessorPropertyDescriptor(configurable, enumerable, get == null ? UNDEFINED : get, set == null ? UNDEFINED : set, this); @@ -675,14 +705,12 @@ private final Map namedInvokers = new ConcurrentHashMap<>(); - @Override public InvokeByName getInvokeByName(final Object key, final Callable creator) { return getLazilyCreatedValue(key, creator, namedInvokers); } private final Map dynamicInvokers = new ConcurrentHashMap<>(); - @Override public MethodHandle getDynamicInvoker(final Object key, final Callable creator) { return getLazilyCreatedValue(key, creator, dynamicInvokers); }