/** * 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.iteration; import static com.github.anba.es6draft.runtime.internal.Properties.createProperties; import static com.github.anba.es6draft.runtime.objects.iteration.GeneratorAbstractOperations.GeneratorResume; import static com.github.anba.es6draft.runtime.objects.iteration.GeneratorAbstractOperations.GeneratorReturn; import static com.github.anba.es6draft.runtime.objects.iteration.GeneratorAbstractOperations.GeneratorThrow; import com.github.anba.es6draft.runtime.ExecutionContext; import com.github.anba.es6draft.runtime.Realm; import com.github.anba.es6draft.runtime.internal.Initializable; import com.github.anba.es6draft.runtime.internal.Properties.Attributes; import com.github.anba.es6draft.runtime.internal.Properties.Function; import com.github.anba.es6draft.runtime.internal.Properties.Prototype; import com.github.anba.es6draft.runtime.internal.Properties.Value; import com.github.anba.es6draft.runtime.types.BuiltinSymbol; import com.github.anba.es6draft.runtime.types.Intrinsics; import com.github.anba.es6draft.runtime.types.builtins.NativeFunction; import com.github.anba.es6draft.runtime.types.builtins.OrdinaryObject; /** * <h1>25 Control Abstraction Objects</h1><br> * <h2>25.3 Generator Objects</h2> * <ul> * <li>25.3.1 Properties of Generator Prototype * </ul> */ public final class GeneratorPrototype extends OrdinaryObject implements Initializable { /** * Constructs a new Generator prototype object. * * @param realm * the realm object */ public GeneratorPrototype(Realm realm) { super(realm); } @Override public void initialize(Realm realm) { createProperties(realm, this, Properties.class); } /** * Marker class for {@code %GeneratorPrototype%.next}. */ private static final class GeneratorPrototypeNext { } /** * Returns {@code true} if <var>next</var> is the built-in {@code %GeneratorPrototype%.next} function for the * requested realm. * * @param realm * the function realm * @param next * the next function * @return {@code true} if <var>next</var> is the built-in {@code %GeneratorPrototype%.next} function */ public static boolean isBuiltinNext(Realm realm, Object next) { return NativeFunction.isNative(realm, next, GeneratorPrototypeNext.class); } /** * 25.3.1 Properties of Generator Prototype */ public enum Properties { ; @Prototype public static final Intrinsics __proto__ = Intrinsics.IteratorPrototype; /** * 25.3.1.1 Generator.prototype.constructor */ @Value(name = "constructor", attributes = @Attributes(writable = false, enumerable = false, configurable = true)) public static final Intrinsics constructor = Intrinsics.Generator; /** * 25.3.1.2 Generator.prototype.next ( value ) * * @param cx * the execution context * @param thisValue * the function this-value * @param value * the value object * @return the iterator result object */ @Function(name = "next", arity = 1, nativeId = GeneratorPrototypeNext.class) public static Object next(ExecutionContext cx, Object thisValue, Object value) { return GeneratorResume(cx, thisValue, value); } /** * 25.3.1.3 Generator.prototype.return ( value ) * * @param cx * the execution context * @param thisValue * the function this-value * @param value * the return value * @return the iterator result object */ @Function(name = "return", arity = 1) public static Object _return(ExecutionContext cx, Object thisValue, Object value) { return GeneratorReturn(cx, thisValue, value); } /** * 25.3.1.4 Generator.prototype.throw ( exception ) * * @param cx * the execution context * @param thisValue * the function this-value * @param exception * the exception object * @return the iterator result object */ @Function(name = "throw", arity = 1) public static Object _throw(ExecutionContext cx, Object thisValue, Object exception) { return GeneratorThrow(cx, thisValue, exception); } /** * 25.3.1.5 Generator.prototype [ @@toStringTag ] */ @Value(name = "[Symbol.toStringTag]", symbol = BuiltinSymbol.toStringTag, attributes = @Attributes(writable = false, enumerable = false, configurable = true)) public static final String toStringTag = "Generator"; } }