mirror of
https://github.com/VCMP-SqMod/SqMod.git
synced 2025-02-07 13:27:13 +01:00
268 lines
5.0 KiB
C++
268 lines
5.0 KiB
C++
//
|
|
// Symbol.h
|
|
//
|
|
// Library: CppParser
|
|
// Package: SymbolTable
|
|
// Module: Symbol
|
|
//
|
|
// Definition of the Symbol class.
|
|
//
|
|
// Copyright (c) 2006, Applied Informatics Software Engineering GmbH.
|
|
// and Contributors.
|
|
//
|
|
// SPDX-License-Identifier: BSL-1.0
|
|
//
|
|
|
|
|
|
#ifndef CppParser_Symbol_INCLUDED
|
|
#define CppParser_Symbol_INCLUDED
|
|
|
|
|
|
#include "Poco/CppParser/CppParser.h"
|
|
#include "Poco/CppParser/Attributes.h"
|
|
#include "Poco/Foundation.h"
|
|
|
|
|
|
namespace Poco {
|
|
namespace CppParser {
|
|
|
|
|
|
class NameSpace;
|
|
|
|
|
|
class CppParser_API Symbol
|
|
/// This is the base class for all symbols in the symbol table.
|
|
///
|
|
/// Every symbol has a unique ID (int) and a namespace (which
|
|
/// may be null).
|
|
{
|
|
public:
|
|
enum Kind
|
|
{
|
|
SYM_ENUM, /// An enumeration
|
|
SYM_ENUM_VALUE, /// An enumeration value
|
|
SYM_FUNCTION, /// A (member) function
|
|
SYM_NAMESPACE, /// A namespace
|
|
SYM_PARAMETER, /// A function parameter
|
|
SYM_STRUCT, /// A struct or class
|
|
SYM_TYPEDEF, /// A typedef
|
|
SYM_TYPEALIAS, /// A type alias (using)
|
|
SYM_BUILTIN, /// A built-in type
|
|
SYM_VARIABLE /// A (member) variable
|
|
};
|
|
|
|
enum Access
|
|
{
|
|
ACC_PUBLIC, /// public access
|
|
ACC_PROTECTED, /// protected access
|
|
ACC_PRIVATE /// private access
|
|
};
|
|
|
|
Symbol();
|
|
/// Creates the Symbol and assigns the symbol
|
|
/// a unique ID.
|
|
|
|
Symbol(const std::string& name, NameSpace* pNameSpace = 0);
|
|
/// Creates the Symbol and assigns the symbol
|
|
/// a unique ID.
|
|
|
|
virtual ~Symbol();
|
|
/// Destroys the Symbol.
|
|
|
|
int id() const;
|
|
/// Returns the symbol's unique ID.
|
|
|
|
const std::string& name() const;
|
|
/// Returns the symbol's (local) name.
|
|
|
|
NameSpace* nameSpace() const;
|
|
/// Returns the symbol's namespace which
|
|
/// may be null.
|
|
|
|
void setAccess(Access v);
|
|
/// Sets the symbol's access.
|
|
|
|
Access getAccess() const;
|
|
/// Returns the symbol's access.
|
|
|
|
void setDocumentation(const std::string& text);
|
|
/// Sets the symbol's documentation.
|
|
|
|
void addDocumentation(const std::string& text);
|
|
/// Adds text to the symbol's documentation.
|
|
|
|
const std::string& getDocumentation() const;
|
|
/// Returns the symbol's documentation.
|
|
|
|
void setFile(const std::string& path);
|
|
/// Sets the file where the symbol is declared.
|
|
|
|
const std::string& getFile() const;
|
|
/// Returns the file where the symbol is defined.
|
|
|
|
void setLineNumber(int line);
|
|
/// Sets the line number of the symbol's declaration.
|
|
|
|
int getLineNumber() const;
|
|
/// Returns the line number of the symbol's declaration.
|
|
|
|
void setPackage(const std::string& package);
|
|
/// Sets the symbol's package.
|
|
|
|
const std::string& getPackage() const;
|
|
/// Returns the symbol's package.
|
|
|
|
void setLibrary(const std::string& library);
|
|
/// Sets the symbol's library.
|
|
|
|
const std::string& getLibrary() const;
|
|
/// Returns the symbol's library.
|
|
|
|
const Attributes& attrs() const;
|
|
/// Returns the symbol's attributes.
|
|
|
|
Attributes& attrs();
|
|
/// Returns the symbol's attributes.
|
|
|
|
const Attributes& getAttributes() const;
|
|
/// Returns the symbol's attributes.
|
|
|
|
void setAttributes(const Attributes& attrs);
|
|
/// Sets the symbol's attributes.
|
|
|
|
std::string fullName() const;
|
|
/// Returns the symbol's fully qualified name.
|
|
|
|
static std::string extractName(const std::string& decl);
|
|
/// Extracts the name from the declaration.
|
|
|
|
virtual Kind kind() const = 0;
|
|
/// Returns the symbol's kind.
|
|
|
|
virtual std::string toString() const = 0;
|
|
/// Returns a string representation of the symbol.
|
|
|
|
bool isPublic() const;
|
|
/// Returns true iff the symbol is public.
|
|
|
|
bool isProtected() const;
|
|
/// Returns true iff the symbol is public.
|
|
|
|
bool isPrivate() const;
|
|
/// Returns true iff the symbol is public.
|
|
|
|
protected:
|
|
static bool isIdent(char c);
|
|
static bool hasAttr(const std::string& decl, const std::string& attr);
|
|
|
|
private:
|
|
Symbol(const Symbol&);
|
|
Symbol& operator = (const Symbol&);
|
|
|
|
int _id;
|
|
std::string _name;
|
|
NameSpace* _pNameSpace;
|
|
Access _access;
|
|
std::string _documentation;
|
|
std::string _file;
|
|
int _line;
|
|
std::string _package;
|
|
std::string _library;
|
|
Attributes _attrs;
|
|
|
|
static int _nextId;
|
|
};
|
|
|
|
|
|
//
|
|
// inlines
|
|
//
|
|
inline int Symbol::id() const
|
|
{
|
|
return _id;
|
|
}
|
|
|
|
|
|
inline const std::string& Symbol::name() const
|
|
{
|
|
return _name;
|
|
}
|
|
|
|
|
|
inline const std::string& Symbol::getDocumentation() const
|
|
{
|
|
return _documentation;
|
|
}
|
|
|
|
|
|
inline Symbol::Access Symbol::getAccess() const
|
|
{
|
|
return _access;
|
|
}
|
|
|
|
|
|
inline NameSpace* Symbol::nameSpace() const
|
|
{
|
|
return _pNameSpace;
|
|
}
|
|
|
|
|
|
inline const std::string& Symbol::getFile() const
|
|
{
|
|
return _file;
|
|
}
|
|
|
|
|
|
inline int Symbol::getLineNumber() const
|
|
{
|
|
return _line;
|
|
}
|
|
|
|
|
|
inline const std::string& Symbol::getPackage() const
|
|
{
|
|
return _package;
|
|
}
|
|
|
|
|
|
inline const std::string& Symbol::getLibrary() const
|
|
{
|
|
return _library;
|
|
}
|
|
|
|
|
|
inline const Attributes& Symbol::attrs() const
|
|
{
|
|
return _attrs;
|
|
}
|
|
|
|
|
|
inline Attributes& Symbol::attrs()
|
|
{
|
|
return _attrs;
|
|
}
|
|
|
|
|
|
inline bool Symbol::isPublic() const
|
|
{
|
|
return _access == ACC_PUBLIC;
|
|
}
|
|
|
|
|
|
inline bool Symbol::isProtected() const
|
|
{
|
|
return _access == ACC_PROTECTED;
|
|
}
|
|
|
|
|
|
inline bool Symbol::isPrivate() const
|
|
{
|
|
return _access == ACC_PRIVATE;
|
|
}
|
|
|
|
|
|
} } // namespace Poco::CppParser
|
|
|
|
|
|
#endif // CppParser_Symbol_INCLUDED
|