/** * 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; import java.util.Set; import com.github.anba.es6draft.runtime.types.Reference; import com.github.anba.es6draft.runtime.types.ScriptObject; /** * <h1>8 Executable Code and Execution Contexts</h1><br> * <h2>8.1 Lexical Environments</h2> * <ul> * <li>8.1.1 Environment Records * </ul> */ public interface EnvironmentRecord { /** * Returns a set for all binding names of this environment record. * * @return the binding names set */ Set<String> bindingNames(); /** * @param name * the binding name * @param strict * the strict mode flag * @return the binding value */ default Object getBindingValueOrNull(String name, boolean strict) { if (hasBinding(name)) { return getBindingValue(name, strict); } return null; } /** * @param name * the binding name * @param strict * the strict mode flag * @return the binding reference */ default Reference<? extends EnvironmentRecord, String> getReferenceOrNull(String name, boolean strict) { if (hasBinding(name)) { return new Reference.IdentifierReference<>(this, name, strict); } return null; } /** * HasBinding(N) * * @param name * the binding name * @return {@code true} if the binding is present */ boolean hasBinding(String name); /** * CreateMutableBinding(N, D) * * @param name * the binding name * @param deletable * the deletable flag */ void createMutableBinding(String name, boolean deletable); /** * CreateImmutableBinding(N, S) * * @param name * the binding name * @param strict * the binding strict flag */ void createImmutableBinding(String name, boolean strict); /** * InitializeBinding(N, V) * * @param name * the binding name * @param value * the new binding value */ void initializeBinding(String name, Object value); /** * SetMutableBinding(N, V, S) * * @param name * the binding name * @param value * the new binding value * @param strict * the strict mode flag */ void setMutableBinding(String name, Object value, boolean strict); /** * GetBindingValue(N, S) * * @param name * the binding name * @param strict * the strict mode flag * @return the binding value */ Object getBindingValue(String name, boolean strict); /** * DeleteBinding(N) * * @param name * the binding name * @return {@code true} on success */ boolean deleteBinding(String name); /** * HasThisBinding() * * @return {@code true} if the environment record has a this-binding */ boolean hasThisBinding(); /** * HasSuperBinding() * * @return {@code true} if the environment record has a super-binding */ boolean hasSuperBinding(); /** * WithBaseObject () * * @return the base object or {@code null} if not present */ ScriptObject withBaseObject(); /** * GetThisBinding () * * @param cx * the execution context * @return the this-binding * @throws IllegalStateException * if this operation is not valid */ // assert: FunctionEnvironmentRecord or GlobalEnvironmentRecord Object getThisBinding(ExecutionContext cx) throws IllegalStateException; }