summaryrefslogtreecommitdiff
path: root/starts/meaning-vm/level-2-wip-stmtexprs/statementref.hpp
blob: 502ecf4a02519489681e8230f74520b5e19a5515 (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
#pragma once

#include "common.hpp"
#include "../level-0/concept.hpp"

namespace intellect {
namespace level2 {

// this class is returned by some of the baseref operators.
// its purpose is to evaluate code when it goes out of
// scope, so as to facilitate syntactic behavior.
struct statementref
{
	statementref(ref r);
	statementref(statementref const &) = delete;
	~statementref();

	operator ref();

	static statementref makebinary(
		ref lhs, ref kind, ref rhs,
		std::function<ref(ref)> expraction = {},
		std::function<void(ref)> stmtaction = {}
	);

private:
	level0::concept * r;
};

}
}