/** * 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 com.github.anba.es6draft.ast.ScopedNode; /** * Base interface for scope information. */ public interface Scope extends Iterable<Scope> { /** * Returns the parent scope. * * @return the parent scope */ Scope getParent(); /** * Returns the enclosing top-level scope. * * @return the top-level scope */ TopLevelScope getTop(); /** * Returns the {@link ScopedNode} for this scope object. * * @return the node */ ScopedNode getNode(); /** * Returns <code>true</code> if {@code name} is statically declared in this scope. * * @param name * the variable name * @return <code>true</code> if {@code name} is declared */ boolean isDeclared(Name name); /** * Returns the resolved name for {@code name}. {@code name} must be statically declared in this * scope. * * @param name * the variable name * @param lookupByName * named lookup * @return the resolved name */ Name resolveName(Name name, boolean lookupByName); /** * Returns <code>true</code> if the scope is emitted at runtime. * * @return <code>true</code> if the scope is emitted */ boolean isPresent(); /** * Returns <code>true</code> for dynamically scoped objects, <code>false</code> otherwise. * * @return <code>true</code> if a dynamic scope */ boolean isDynamic(); }