void Struct::visit(Visitor &visitor) { visitor.visit(this); }
void Array::visit(Visitor &visitor) { visitor.visit(this); }
void Blob::visit(Visitor &visitor) { visitor.visit(this); }
+void Pointer::visit(Visitor &visitor) { visitor.visit(this); }
class Dumper : public Visitor
{
if (!first) {
os << " | ";
}
- os << literal << std::hex << value << std::dec << normal;
+ os << literal << "0x" << std::hex << value << std::dec << normal;
}
}
os << pointer << "blob(" << blob->size << ")" << normal;
}
+ void visit(Pointer *p) {
+ os << pointer << "0x" << std::hex << p->value << std::dec << normal;
+ }
+
void visit(Call *call) {
const char *sep = "";
os << bold << call->sig->name << normal << "(";
class Value
{
public:
+ virtual ~Value() {}
virtual void visit(Visitor &visitor) = 0;
operator bool (void) const;
};
+class Pointer : public UInt
+{
+public:
+ Pointer(unsigned long long value) : UInt(value) {}
+
+ void visit(Visitor &visitor);
+};
+
+
class Visitor
{
public:
virtual void visit(Struct *) {assert(0);}
virtual void visit(Array *) {assert(0);}
virtual void visit(Blob *) {assert(0);}
+ virtual void visit(Pointer *) {assert(0);}
protected:
inline void _visit(Value *value) {