summaryrefslogtreecommitdiff
path: root/libtnsl/reflect/_type.tnsl
diff options
context:
space:
mode:
Diffstat (limited to 'libtnsl/reflect/_type.tnsl')
-rw-r--r--libtnsl/reflect/_type.tnsl71
1 files changed, 71 insertions, 0 deletions
diff --git a/libtnsl/reflect/_type.tnsl b/libtnsl/reflect/_type.tnsl
new file mode 100644
index 0000000..7a19b7d
--- /dev/null
+++ b/libtnsl/reflect/_type.tnsl
@@ -0,0 +1,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]
+ ;/
+;/ \ No newline at end of file