summaryrefslogtreecommitdiff
path: root/starts/meaning-vm/level-1/ref.hpp
blob: 40eee20afed6c8962efbfe3a0741f902f836c3b7 (plain)
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
#pragma once

#include "common.hpp"
#include "../level-0/ref.hpp"
#include "../level-0/ref-mixin.hpp"

namespace intellect {
namespace level1 {

struct ref : public level0::refmixin<ref,vref>
{
	ref(level0::ref const & other) : ref0(other) { }
	ref(std::string const & name);
	ref(const char *name) : ref(std::string(name)) { }
	ref(bool b) : ref(b ? "true" : "false") { }
	ref() : ref("nothing") { }

	bool isa(ref group) const;
	bool isan(ref group) const { return isa(group); }

	vref<std::string> name() const;

	level0::ref & l0() { return ref0; }
	ref & l1() { return self; }
	ref const & l1() const { return self; }

	std::string dump(ref skipmarkertype, ref skipmarkertarget);
private:

	level0::ref ref0;
};

}
}