| //===- SourceLanguage.h - Interact with source languages --------*- C++ -*-===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file was developed by the LLVM research group and is distributed under |
| // the University of Illinois Open Source License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // This file defines the abstract SourceLanguage interface, which is used by the |
| // LLVM debugger to parse source-language expressions and render program objects |
| // into a human readable string. In general, these classes perform all of the |
| // analysis and interpretation of the language-specific debugger information. |
| // |
| // This interface is designed to be completely stateless, so all methods are |
| // const. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef LLVM_DEBUGGER_SOURCELANGUAGE_H |
| #define LLVM_DEBUGGER_SOURCELANGUAGE_H |
| |
| #include <string> |
| |
| namespace llvm { |
| class GlobalVariable; |
| class SourceFileInfo; |
| class SourceFunctionInfo; |
| class ProgramInfo; |
| class RuntimeInfo; |
| |
| struct SourceLanguage { |
| virtual ~SourceLanguage() {} |
| |
| /// getSourceLanguageName - This method is used to implement the 'show |
| /// language' command in the debugger. |
| virtual const char *getSourceLanguageName() const = 0; |
| |
| //===------------------------------------------------------------------===// |
| // Methods used to implement debugger hooks. |
| // |
| |
| /// printInfo - Implementing this method allows the debugger to use |
| /// language-specific 'info' extensions, e.g., 'info selectors' for objc. |
| /// This method should return true if the specified string is recognized. |
| /// |
| virtual bool printInfo(const std::string &What) const { |
| return false; |
| } |
| |
| /// lookupFunction - Given a textual function name, return the |
| /// SourceFunctionInfo descriptor for that function, or null if it cannot be |
| /// found. If the program is currently running, the RuntimeInfo object |
| /// provides information about the current evaluation context, otherwise it |
| /// will be null. |
| /// |
| virtual SourceFunctionInfo *lookupFunction(const std::string &FunctionName, |
| ProgramInfo &PI, |
| RuntimeInfo *RI = 0) const { |
| return 0; |
| } |
| |
| |
| //===------------------------------------------------------------------===// |
| // Methods used to parse various pieces of program information. |
| // |
| |
| /// createSourceFileInfo - This method can be implemented by the front-end |
| /// if it needs to keep track of information beyond what the debugger |
| /// requires. |
| virtual SourceFileInfo * |
| createSourceFileInfo(const GlobalVariable *Desc, ProgramInfo &PI) const; |
| |
| /// createSourceFunctionInfo - This method can be implemented by the derived |
| /// SourceLanguage if it needs to keep track of more information than the |
| /// SourceFunctionInfo has. |
| virtual SourceFunctionInfo * |
| createSourceFunctionInfo(const GlobalVariable *Desc, ProgramInfo &PI) const; |
| |
| |
| //===------------------------------------------------------------------===// |
| // Static methods used to get instances of various source languages. |
| // |
| |
| /// get - This method returns a source-language instance for the specified |
| /// Dwarf 3 language identifier. If the language is unknown, an object is |
| /// returned that can support some minimal operations, but is not terribly |
| /// bright. |
| static const SourceLanguage &get(unsigned ID); |
| |
| /// get*Instance() - These methods return specific instances of languages. |
| /// |
| static const SourceLanguage &getCFamilyInstance(); |
| static const SourceLanguage &getCPlusPlusInstance(); |
| static const SourceLanguage &getUnknownLanguageInstance(); |
| }; |
| } |
| |
| #endif |