/** * 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.ast.scope; import java.util.List; import java.util.Set; import com.github.anba.es6draft.ast.FunctionDeclaration; import com.github.anba.es6draft.ast.FunctionNode; /** * Scope class for {@link FunctionNode} objects. */ public interface FunctionScope extends TopLevelScope { @Override FunctionNode getNode(); /** * Returns the variable scope. * * @return the variable scope */ Scope variableScope(); /** * Returns the lexical scope. * * @return the lexical scope */ Scope lexicalScope(); /** * Returns the set of parameter names. * * @return the parameter names */ Set<Name> parameterNames(); /** * Returns the implicit {@code arguments} binding or {@code null} if not applicable. * * @return the implicit {@code arguments} binding or {@code null} */ Name arguments(); /** * Returns the set of block function names. * * @return the block function names */ Set<Name> blockFunctionNames(); /** * {@inheritDoc} * <p> * A function scope is dynamic if it contains a non-strict, direct-eval call. */ @Override boolean isDynamic(); /** * Returns {@code true} if <code>eval()</code> is used within this function. * * @return {@code true} if the function contains a direct <code>eval</code> call */ boolean hasEval(); /** * Returns {@code true} if the <code>super</code> keyword is used within this function. * * @return {@code true} if this function contains a <code>super</code> reference */ boolean hasSuperReference(); /** * Returns {@code true} if the <code>arguments</code> object needs to be allocated for this * function. * * @return {@code true} if the <code>arguments</code> object needs to be allocated */ boolean needsArguments(); /** * Returns the function's web legacy block-level function declarations. * * @return the function declarations */ List<FunctionDeclaration> blockFunctions(); }