summaryrefslogtreecommitdiff
path: root/libtnsl/reflect/_type.tnsl
blob: 7a19b7dd449d2014aab0e19513594206fbb9fcd0 (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
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
67
68
69
70
71
/##
	Copyright 2021 Kyle Gunger

	Dual licensed under the CDDL 1.0 and BSD 3-Clause licenses.

	This file may only be used in accordance with one of the two
	licenses.  You should have received a copy of each license with
	the source code.  In the event that you did not recieve a copy
	of the licenses, they may be found at the following URLs:

	CDDL 1.0:
	https://opensource.org/licenses/CDDL-1.0

	BSD 3-Clause:
	https://opensource.org/licenses/BSD-3-Clause

	THIS SOFTWARE/SOURCE CODE IS PROVIDED "AS IS" WITH NO
	WARRANTY, GUARANTEE, OR CLAIM OF FITNESS FOR ANY PURPOSE
	EXPRESS OR IMPLIED
#/

/## tnsl.reflect._type
	Header data which non-raw structs point to.
	Upper limits for classes and libs defined here:
	- Max 2^16 libraries
	- Max 2^16 modules/sub-modules per library
	- Max 2^16 classes per module
	- Max 2^8 Generics per class
#/
; raw struct _type() {
	uint16
		_library_id,
		_module_id,
		_type_id,
	
	{uint8}_type
		_generics
}

/## tnsl.reflect._type_addresses
	Metadata about where things are stored
	in a class
#/
; raw struct _type_addresses {
	~{}_type
		_supers,

	~{}uint
		_super_offsets,
	
	~{}_method
		_methods,

	~{}_member
		_members
}

/; method _type

	/; _is (_type base) [bool]
	;/

	/; inline _get (_type t, ~void s, _member m) [~void]
	;/

	/; inline raw _call (_type t, ~void s, _method m, ~void p)
	;/

	/; _offset (_type cast) [uint]
	;/
;/