/** * Copyright (c) 2012-2016 André Bargull * Alle Rechte vorbehalten / All Rights Reserved. Use is subject to license terms. * * <https://github.com/anba/es6draft> */ package com.github.anba.es6draft.runtime.objects.reflect; import static com.github.anba.es6draft.runtime.internal.Errors.newTypeError; import static com.github.anba.es6draft.runtime.internal.Properties.createProperties; import com.github.anba.es6draft.runtime.ExecutionContext; import com.github.anba.es6draft.runtime.Realm; import com.github.anba.es6draft.runtime.internal.CompatibilityOption; import com.github.anba.es6draft.runtime.internal.Initializable; import com.github.anba.es6draft.runtime.internal.Messages; import com.github.anba.es6draft.runtime.internal.Properties.Accessor; import com.github.anba.es6draft.runtime.internal.Properties.Attributes; import com.github.anba.es6draft.runtime.internal.Properties.CompatibilityExtension; import com.github.anba.es6draft.runtime.internal.Properties.Prototype; import com.github.anba.es6draft.runtime.internal.Properties.Value; import com.github.anba.es6draft.runtime.modules.Loader; import com.github.anba.es6draft.runtime.types.BuiltinSymbol; import com.github.anba.es6draft.runtime.types.Intrinsics; import com.github.anba.es6draft.runtime.types.builtins.OrdinaryObject; /** * <h1>26 Reflection</h1><br> * <h2>26.? Loader Objects</h2> * <ul> * <li>26.?.3 Properties of the Reflect.Loader Prototype Object * </ul> */ public final class LoaderPrototype extends OrdinaryObject implements Initializable { /** * Constructs a new Loader prototype object. * * @param realm * the realm object */ public LoaderPrototype(Realm realm) { super(realm); } @Override public void initialize(Realm realm) { createProperties(realm, this, Properties.class); createProperties(realm, this, RealmProperty.class); } /** * 26.?.3 Properties of the Reflect.Loader Prototype Object */ public enum Properties { ; /** * Abstract Operation: thisLoader(value) * * @param cx * the execution context * @param value * the argument value * @return the loader object */ private static LoaderObject thisLoader(ExecutionContext cx, Object value) { if (value instanceof LoaderObject) { return (LoaderObject) value; } throw newTypeError(cx, Messages.Key.IncompatibleObject); } @Prototype public static final Intrinsics __proto__ = Intrinsics.ObjectPrototype; /** * 26.?.3.1 Reflect.Loader.prototype.constructor */ @Value(name = "constructor") public static final Intrinsics constructor = Intrinsics.Loader; /** * 26.?.3.6 get Reflect.Loader.prototype.global * * @param cx * the execution context * @param thisValue * the function this-value * @return the global object */ @Accessor(name = "global", type = Accessor.Type.Getter) public static Object global(ExecutionContext cx, Object thisValue) { /* steps 1-2 */ LoaderObject loader = thisLoader(cx, thisValue); /* step 3 */ Loader loaderRecord = loader.getLoader(); /* steps 4-5 */ return loaderRecord.getRealm().getGlobalThis(); } /** * 26.?.3.17 Reflect.Loader.prototype [ @@toStringTag ] */ @Value(name = "[Symbol.toStringTag]", symbol = BuiltinSymbol.toStringTag, attributes = @Attributes(writable = false, enumerable = false, configurable = true)) public static final String toStringTag = "Reflect.Loader"; } /** * Additional Properties of the Reflect.Loader Prototype Object */ @CompatibilityExtension(CompatibilityOption.Realm) public enum RealmProperty { ; /** * Abstract Operation: thisLoader(value) * * @param cx * the execution context * @param value * the argument value * @return the loader object */ private static LoaderObject thisLoader(ExecutionContext cx, Object value) { if (value instanceof LoaderObject) { return (LoaderObject) value; } throw newTypeError(cx, Messages.Key.IncompatibleObject); } /** * 26.?.3.13 get Reflect.Loader.prototype.realm * * @param cx * the execution context * @param thisValue * the function this-value * @return the realm object */ @Accessor(name = "realm", type = Accessor.Type.Getter) public static Object realm(ExecutionContext cx, Object thisValue) { /* steps 1-2 */ LoaderObject loader = thisLoader(cx, thisValue); /* step 3 */ Loader loaderRecord = loader.getLoader(); /* step 4 */ return loaderRecord.getRealm().getRealmObject(); } } }