constructor(parent, tree) {
    this.parent = parent;
    this.tree = tree;
    // These are the variable declarations introduced in this scope. These are
    // set here even if the scope represents a block but we also add them to
    // parent scope all the way up until we find a funciton or top level scope.
    this.variableDeclarations_ = new StringMap();
    // Let and const as well as block scoped functions.
    this.lexicalDeclarations_ = new StringMap();
    this.strictMode = parent && parent.strictMode || isTreeStrict(tree);
    this.inGenerator = parent ? parent.inGenerator || false : false;
  }
@param {Scope} parent The parent scope, or null if top level scope.
@param {ParseTree} tree