1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
|
#pragma once
#include "Core/Char.h"
#include "Code/RefSource.h"
#include "Code/OffsetSource.h"
namespace storm {
STORM_PKG(core.asm);
class Named;
/**
* A RefSource that refers to a named entity inside the compiler. Supports disambiguating
* mutliple sources within a single entity by optionally appending a single character to the
* end of the string.
*/
class NamedSource : public code::RefSource {
STORM_CLASS;
public:
STORM_CTOR NamedSource(Named *entity);
STORM_CTOR NamedSource(Named *entity, Char subtype);
// Get the title.
virtual Str *STORM_FN title() const;
// Get the named entity referred to.
Named *STORM_FN named() const { return entity; }
// Get the subtype.
Char STORM_FN type() const { return subtype; }
private:
// Entity we're referring to.
Named *entity;
// Subtype, if any. Char(0) indicates no subtype.
Char subtype;
};
/**
* A named RefSource for offsets. Works like NamedSource.
*/
class NamedOffsetSource : public code::OffsetSource {
STORM_CLASS;
public:
STORM_CTOR NamedOffsetSource(Named *entity);
STORM_CTOR NamedOffsetSource(Named *entity, Char subtype);
// Get the title.
virtual Str *STORM_FN title() const;
// Get the named entity referred to.
Named *STORM_FN named() const { return entity; }
// Get the subtype.
Char STORM_FN type() const { return subtype; }
private:
// Entity we're referring to.
Named *entity;
// Subtype, if any. Char(0) indicates no subtype.
Char subtype;
};
}
|