// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. package org.jetbrains.kotlin.js.backend.ast; import org.jetbrains.kotlin.js.backend.JsReservedIdentifiers; import org.jetbrains.annotations.NotNull; /** * The root scope is the parent of every scope. All identifiers in this scope * are not obfuscatable. This scope is prefilled with reserved global * JavaScript symbols. */ public final class JsRootScope extends JsScope { private final JsProgram program; public JsRootScope(JsProgram program) { super("Root"); this.program = program; } @Override public JsProgram getProgram() { return program; } @Override protected JsName findOwnName(@NotNull String ident) { JsName name = super.findOwnName(ident); if (name == null) { if (JsReservedIdentifiers.reservedGlobalSymbols.contains(ident)) { /* * Lazily add JsNames for reserved identifiers. Since a JsName for a reserved global symbol * must report a legitimate enclosing scope, we can't simply have a shared set of symbol * names. */ name = doCreateName(ident); } } return name; } }