/** * 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.Errors.newTypeError; import com.github.anba.es6draft.runtime.ExecutionContext; import com.github.anba.es6draft.runtime.internal.Messages; import com.github.anba.es6draft.runtime.internal.RuntimeInfo; import com.github.anba.es6draft.runtime.types.ScriptObject; /** * <h1>25 Control Abstraction Objects</h1><br> * <h2>25.3 Generator Objects</h2> * <ul> * <li>25.3.3 Generator Abstract Operations * </ul> */ public final class GeneratorAbstractOperations { private GeneratorAbstractOperations() { } /** * 25.3.3.1 GeneratorStart (generator, generatorBody) * * @param cx * the execution context * @param generator * the generator object * @param generatorBody * the runtime function code */ public static void GeneratorStart(ExecutionContext cx, GeneratorObject generator, RuntimeInfo.Function generatorBody) { /* steps 1-6 */ generator.start(cx, generatorBody); /* step 7 (return) */ } /** * 25.3.3.2 GeneratorValidate ( generator ) * * @param cx * the execution context * @param generator * the generator object * @return the generator object */ public static GeneratorObject GeneratorValidate(ExecutionContext cx, Object generator) { /* steps 1-2 */ if (!(generator instanceof GeneratorObject)) { throw newTypeError(cx, Messages.Key.IncompatibleObject); } /* steps 3-6 (execution state checked in GeneratorObject) */ return (GeneratorObject) generator; } /** * 25.3.3.3 GeneratorResume (generator, value) * * @param cx * the execution context * @param generator * the generator object * @param value * the resumption value * @return the iterator result object */ public static ScriptObject GeneratorResume(ExecutionContext cx, Object generator, Object value) { /* steps 1-2 */ GeneratorObject gen = GeneratorValidate(cx, generator); /* steps 3-12 */ return gen.resume(cx, value); } /** * 25.3.3.4 GeneratorResumeAbrupt(generator, abruptCompletion) * <p> * GeneratorReturn(generator, value) * * @param cx * the execution context * @param generator * the generator object * @param value * the return value * @return the iterator result object */ public static ScriptObject GeneratorReturn(ExecutionContext cx, Object generator, Object value) { /* steps 1-2 */ GeneratorObject gen = GeneratorValidate(cx, generator); /* steps 4-13 */ return gen._return(cx, value); } /** * 25.3.3.4 GeneratorResumeAbrupt(generator, abruptCompletion) * <p> * GeneratorThrow(generator, exception) * * @param cx * the execution context * @param generator * the generator object * @param exception * the exception value * @return the iterator result object */ public static ScriptObject GeneratorThrow(ExecutionContext cx, Object generator, Object exception) { /* steps 1-2 */ GeneratorObject gen = GeneratorValidate(cx, generator); /* steps 4-13 */ return gen._throw(cx, exception); } }