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
|
#pragma once
#include "Core/TObject.h"
namespace code {
STORM_PKG(core.asm);
class RefSource;
/**
* Content. Provides a pointer and a size which can be referred to by RefSources, and by
* extension, References. Only one RefSource can refer to a Content object.
*/
class Content : public ObjectOn<Compiler> {
STORM_CLASS;
public:
STORM_CTOR Content();
// Set the address of this content.
void set(const void *address, Nat size);
// Get last address and size.
virtual const void *address() const;
virtual nat size() const;
// Get the name of the owning RefSource (if any).
MAYBE(Str *) STORM_FN ownerName() const;
// Get the owner object, if any.
MAYBE(RefSource *) STORM_FN owner() const;
// Get the actual RefSource to use, in case the content of one RefSource was stolen by
// another. Returns null most of the time.
virtual MAYBE(RefSource *) stolenBy() const;
private:
friend class RefSource;
// Last address and size.
UNKNOWN(PTR_GC) const void *lastAddress;
Nat lastSize;
// Owning RefSource.
MAYBE(RefSource *) cOwner;
};
/**
* Static content.
*/
class StaticContent : public Content {
STORM_CLASS;
public:
StaticContent(const void *ptr);
};
}
|