root/src/kits/debugger/debug_info/DwarfFunctionDebugInfo.h
/*
 * Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de.
 * Distributed under the terms of the MIT License.
 */
#ifndef DWARF_FUNCTION_DEBUG_INFO_H
#define DWARF_FUNCTION_DEBUG_INFO_H

#include <String.h>

#include "FunctionDebugInfo.h"
#include "SourceLocation.h"


class CompilationUnit;
class DIESubprogram;
class DwarfImageDebugInfo;
class TargetAddressRangeList;


class DwarfFunctionDebugInfo : public FunctionDebugInfo {
public:
                                                                DwarfFunctionDebugInfo(
                                                                        DwarfImageDebugInfo* imageDebugInfo,
                                                                        CompilationUnit* compilationUnit,
                                                                        DIESubprogram* subprogramEntry,
                                                                        TargetAddressRangeList* addressRanges,
                                                                        const BString& name,
                                                                        LocatableFile* sourceFile,
                                                                        const SourceLocation& sourceLocation);
        virtual                                         ~DwarfFunctionDebugInfo();

        virtual SpecificImageDebugInfo* GetSpecificImageDebugInfo() const;
        virtual target_addr_t           Address() const;
        virtual target_size_t           Size() const;
        virtual const BString&          Name() const;
        virtual const BString&          PrettyName() const;

        virtual bool                            IsMain() const;

        virtual LocatableFile*          SourceFile() const;
        virtual SourceLocation          SourceStartLocation() const;
        virtual SourceLocation          SourceEndLocation() const;

                        CompilationUnit*        GetCompilationUnit() const
                                                                        { return fCompilationUnit; }
                        DIESubprogram*          SubprogramEntry() const
                                                                        { return fSubprogramEntry; }

private:
                        DwarfImageDebugInfo* fImageDebugInfo;
                        CompilationUnit*        fCompilationUnit;
                        DIESubprogram*          fSubprogramEntry;
                        TargetAddressRangeList* fAddressRanges;
                        BString                         fName;
                        LocatableFile*          fSourceFile;
                        SourceLocation          fSourceLocation;
};


#endif  // DWARF_FUNCTION_DEBUG_INFO_H