10b57cec5SDimitry Andric //===- NativeCompilandSymbol.cpp - Native impl for compilands ---*- C++ -*-===//
20b57cec5SDimitry Andric //
30b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
40b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
50b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
60b57cec5SDimitry Andric //
70b57cec5SDimitry Andric //===----------------------------------------------------------------------===//
80b57cec5SDimitry Andric
90b57cec5SDimitry Andric #include "llvm/DebugInfo/PDB/Native/NativeCompilandSymbol.h"
100b57cec5SDimitry Andric #include "llvm/DebugInfo/PDB/Native/NativeSession.h"
110b57cec5SDimitry Andric
120b57cec5SDimitry Andric namespace llvm {
130b57cec5SDimitry Andric namespace pdb {
140b57cec5SDimitry Andric
NativeCompilandSymbol(NativeSession & Session,SymIndexId SymbolId,DbiModuleDescriptor MI)150b57cec5SDimitry Andric NativeCompilandSymbol::NativeCompilandSymbol(NativeSession &Session,
160b57cec5SDimitry Andric SymIndexId SymbolId,
170b57cec5SDimitry Andric DbiModuleDescriptor MI)
180b57cec5SDimitry Andric : NativeRawSymbol(Session, PDB_SymType::Compiland, SymbolId), Module(MI) {}
190b57cec5SDimitry Andric
getSymTag() const200b57cec5SDimitry Andric PDB_SymType NativeCompilandSymbol::getSymTag() const {
210b57cec5SDimitry Andric return PDB_SymType::Compiland;
220b57cec5SDimitry Andric }
230b57cec5SDimitry Andric
dump(raw_ostream & OS,int Indent,PdbSymbolIdField ShowIdFields,PdbSymbolIdField RecurseIdFields) const240b57cec5SDimitry Andric void NativeCompilandSymbol::dump(raw_ostream &OS, int Indent,
250b57cec5SDimitry Andric PdbSymbolIdField ShowIdFields,
260b57cec5SDimitry Andric PdbSymbolIdField RecurseIdFields) const {
270b57cec5SDimitry Andric NativeRawSymbol::dump(OS, Indent, ShowIdFields, RecurseIdFields);
280b57cec5SDimitry Andric
290b57cec5SDimitry Andric dumpSymbolIdField(OS, "lexicalParentId", 0, Indent, Session,
300b57cec5SDimitry Andric PdbSymbolIdField::LexicalParent, ShowIdFields,
310b57cec5SDimitry Andric RecurseIdFields);
320b57cec5SDimitry Andric dumpSymbolField(OS, "libraryName", getLibraryName(), Indent);
330b57cec5SDimitry Andric dumpSymbolField(OS, "name", getName(), Indent);
340b57cec5SDimitry Andric dumpSymbolField(OS, "editAndContinueEnabled", isEditAndContinueEnabled(),
350b57cec5SDimitry Andric Indent);
360b57cec5SDimitry Andric }
370b57cec5SDimitry Andric
isEditAndContinueEnabled() const380b57cec5SDimitry Andric bool NativeCompilandSymbol::isEditAndContinueEnabled() const {
390b57cec5SDimitry Andric return Module.hasECInfo();
400b57cec5SDimitry Andric }
410b57cec5SDimitry Andric
getLexicalParentId() const420b57cec5SDimitry Andric SymIndexId NativeCompilandSymbol::getLexicalParentId() const { return 0; }
430b57cec5SDimitry Andric
440b57cec5SDimitry Andric // The usage of getObjFileName for getLibraryName and getModuleName for getName
450b57cec5SDimitry Andric // may seem backwards, but it is consistent with DIA, which is what this API
460b57cec5SDimitry Andric // was modeled after. We may rename these methods later to try to eliminate
470b57cec5SDimitry Andric // this potential confusion.
480b57cec5SDimitry Andric
getLibraryName() const490b57cec5SDimitry Andric std::string NativeCompilandSymbol::getLibraryName() const {
50*5ffd83dbSDimitry Andric return std::string(Module.getObjFileName());
510b57cec5SDimitry Andric }
520b57cec5SDimitry Andric
getName() const530b57cec5SDimitry Andric std::string NativeCompilandSymbol::getName() const {
54*5ffd83dbSDimitry Andric return std::string(Module.getModuleName());
550b57cec5SDimitry Andric }
560b57cec5SDimitry Andric
570b57cec5SDimitry Andric } // namespace pdb
580b57cec5SDimitry Andric } // namespace llvm
59