<commit_before>// Copyright 2014-2015 Project Vogue. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "elang/compiler/ast/namespace.h"

#include "base/logging.h"
#include "elang/compiler/ast/class.h"
#include "elang/compiler/ast/expressions.h"
#include "elang/compiler/token_type.h"

namespace elang {
namespace compiler {
namespace ast {

//////////////////////////////////////////////////////////////////////
//
// Alias
//
Alias::Alias(NamespaceBody* namespace_body,
             Token* keyword,
             Token* name,
             Expression* reference)
    : NamedNode(namespace_body, keyword, name), reference_(reference) {
  DCHECK_EQ(keyword, TokenType::Using);
}

#if _DEBUG
// Node
bool Alias::CanBeMemberOf(ContainerNode* container) const {
  return container->is<ast::NamespaceBody>();
}

// NamedNode
bool Alias::CanBeNamedMemberOf(ContainerNode* container) const {
  return container->is<ast::NamespaceBody>();
}
#endif

//////////////////////////////////////////////////////////////////////
//
// Import
//
Import::Import(NamespaceBody* namespace_body,
               Token* keyword,
               Expression* reference)
    : NamedNode(namespace_body, keyword, reference->token()),
      reference_(reference) {
  DCHECK_EQ(keyword, TokenType::Using);
}

#if _DEBUG
// Node
bool Import::CanBeMemberOf(ContainerNode* container) const {
  return container->is<ast::NamespaceBody>();
}
#endif

//////////////////////////////////////////////////////////////////////
//
// Namespace
//
Namespace::Namespace(Zone* zone, Namespace* parent, Token* keyword, Token* name)
    : NamespaceNode(zone, parent, keyword, name) {
  DCHECK_EQ(keyword, TokenType::Namespace);
}

#if _DEBUG
// Node
bool Namespace::CanBeMemberOf(ContainerNode* container) const {
  DCHECK(container);
  return false;
}

// NamedNode
bool Namespace::CanBeNamedMemberOf(ContainerNode* container) const {
  return container->is<ast::Namespace>() || container->is<ast::NamespaceBody>();
}
#endif

//////////////////////////////////////////////////////////////////////
//
// NamespaceBody
//
NamespaceBody::NamespaceBody(Zone* zone, NamespaceBody* outer, Namespace* owner)
    : BodyNode(zone, outer, owner), import_map_(zone), loaded_(false) {
}

NamespaceBody* NamespaceBody::outer() const {
  return parent()->as<ast::NamespaceBody>();
}

Namespace* NamespaceBody::owner() const {
  return BodyNode::owner()->as<ast::Namespace>();
}

void NamespaceBody::AddImport(Import* import) {
  import_map_[import->name()->atomic_string()] = import;
  AddMember(import);
}

Alias* NamespaceBody::FindAlias(Token* name) const {
  auto const present = FindMember(name);
  return present ? present->as<ast::Alias>() : nullptr;
}

Import* NamespaceBody::FindImport(Token* name) const {
  auto const it = import_map_.find(name->atomic_string());
  return it == import_map_.end() ? nullptr : it->second;
}

#if _DEBUG
// Node
bool NamespaceBody::CanBeMemberOf(ContainerNode* container) const {
  return container->is<ast::NamespaceBody>();
}
#endif

}  // namespace ast
}  // namespace compiler
}  // namespace elang
<commit_msg>elang/compiler/ast: Make |ast::NamespaceBody::FindAlias()| not to use deprecated |ast::ContainerNode::FindMember()|.<commit_after>// Copyright 2014-2015 Project Vogue. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "elang/compiler/ast/namespace.h"

#include "base/logging.h"
#include "elang/compiler/ast/class.h"
#include "elang/compiler/ast/expressions.h"
#include "elang/compiler/token_type.h"

namespace elang {
namespace compiler {
namespace ast {

//////////////////////////////////////////////////////////////////////
//
// Alias
//
Alias::Alias(NamespaceBody* namespace_body,
             Token* keyword,
             Token* name,
             Expression* reference)
    : NamedNode(namespace_body, keyword, name), reference_(reference) {
  DCHECK_EQ(keyword, TokenType::Using);
}

#if _DEBUG
// Node
bool Alias::CanBeMemberOf(ContainerNode* container) const {
  return container->is<ast::NamespaceBody>();
}

// NamedNode
bool Alias::CanBeNamedMemberOf(ContainerNode* container) const {
  return container->is<ast::NamespaceBody>();
}
#endif

//////////////////////////////////////////////////////////////////////
//
// Import
//
Import::Import(NamespaceBody* namespace_body,
               Token* keyword,
               Expression* reference)
    : NamedNode(namespace_body, keyword, reference->token()),
      reference_(reference) {
  DCHECK_EQ(keyword, TokenType::Using);
}

#if _DEBUG
// Node
bool Import::CanBeMemberOf(ContainerNode* container) const {
  return container->is<ast::NamespaceBody>();
}
#endif

//////////////////////////////////////////////////////////////////////
//
// Namespace
//
Namespace::Namespace(Zone* zone, Namespace* parent, Token* keyword, Token* name)
    : NamespaceNode(zone, parent, keyword, name) {
  DCHECK_EQ(keyword, TokenType::Namespace);
}

#if _DEBUG
// Node
bool Namespace::CanBeMemberOf(ContainerNode* container) const {
  DCHECK(container);
  return false;
}

// NamedNode
bool Namespace::CanBeNamedMemberOf(ContainerNode* container) const {
  return container->is<ast::Namespace>() || container->is<ast::NamespaceBody>();
}
#endif

//////////////////////////////////////////////////////////////////////
//
// NamespaceBody
//
NamespaceBody::NamespaceBody(Zone* zone, NamespaceBody* outer, Namespace* owner)
    : BodyNode(zone, outer, owner), import_map_(zone), loaded_(false) {
}

NamespaceBody* NamespaceBody::outer() const {
  return parent()->as<ast::NamespaceBody>();
}

Namespace* NamespaceBody::owner() const {
  return BodyNode::owner()->as<ast::Namespace>();
}

void NamespaceBody::AddImport(Import* import) {
  import_map_[import->name()->atomic_string()] = import;
  AddMember(import);
}

Alias* NamespaceBody::FindAlias(Token* name) const {
  for (auto const member : members()) {
    auto const alias = member->as<ast::Alias>();
    if (alias && alias->name()->atomic_string() == name->atomic_string())
      return alias;
  }
  return nullptr;
}

Import* NamespaceBody::FindImport(Token* name) const {
  auto const it = import_map_.find(name->atomic_string());
  return it == import_map_.end() ? nullptr : it->second;
}

#if _DEBUG
// Node
bool NamespaceBody::CanBeMemberOf(ContainerNode* container) const {
  return container->is<ast::NamespaceBody>();
}
#endif

}  // namespace ast
}  // namespace compiler
}  // namespace elang

{'fraction_non_alphanumeric': 0.21829806667681534, 'fraction_numerical': 0.00243568275232151, 'mean_word_length': 3.040590405904059, 'pattern_counts': {'":': 0, '<': 21, '<?xml version=': 0, '>': 52, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6936280', 'n_tokens_mistral': 1839, 'n_tokens_neox': 1833, 'n_words': 418}