diff options
author | Kyle Gunger <kgunger12@gmail.com> | 2021-11-23 13:05:49 -0500 |
---|---|---|
committer | Kyle Gunger <kgunger12@gmail.com> | 2021-11-23 13:05:49 -0500 |
commit | 5eeec21759dc49252ebbcdb5e0d9336f68d0a51e (patch) | |
tree | f3b5b759a1f68962a77608e816bbc5d2702ac78b /libtnsl/src/reflect | |
parent | 6444b3faef696b044d391b98151ebeb90eb3bb7f (diff) |
Some changes, plus a logo.
Diffstat (limited to 'libtnsl/src/reflect')
-rw-r--r-- | libtnsl/src/reflect/dispatch.tnsl (renamed from libtnsl/src/reflect/dynamic.tnsl) | 0 | ||||
-rw-r--r-- | libtnsl/src/reflect/lib.tnsl | 26 | ||||
-rw-r--r-- | libtnsl/src/reflect/method.tnsl | 20 | ||||
-rw-r--r-- | libtnsl/src/reflect/reflect.tnsl | 6 | ||||
-rw-r--r-- | libtnsl/src/reflect/static.tnsl | 20 | ||||
-rw-r--r-- | libtnsl/src/reflect/type.tnsl | 74 | ||||
-rw-r--r-- | libtnsl/src/reflect/virtual.tnsl | 144 |
7 files changed, 175 insertions, 115 deletions
diff --git a/libtnsl/src/reflect/dynamic.tnsl b/libtnsl/src/reflect/dispatch.tnsl index d346464..d346464 100644 --- a/libtnsl/src/reflect/dynamic.tnsl +++ b/libtnsl/src/reflect/dispatch.tnsl diff --git a/libtnsl/src/reflect/lib.tnsl b/libtnsl/src/reflect/lib.tnsl deleted file mode 100644 index 0688e6f..0000000 --- a/libtnsl/src/reflect/lib.tnsl +++ /dev/null @@ -1,26 +0,0 @@ -/## - 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 -#/ - -: extern const {}_library _LIB_TABLE - -; raw struct _library { - -}
\ No newline at end of file diff --git a/libtnsl/src/reflect/method.tnsl b/libtnsl/src/reflect/method.tnsl deleted file mode 100644 index d346464..0000000 --- a/libtnsl/src/reflect/method.tnsl +++ /dev/null @@ -1,20 +0,0 @@ -/## - 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 -#/
\ No newline at end of file diff --git a/libtnsl/src/reflect/reflect.tnsl b/libtnsl/src/reflect/reflect.tnsl index 3c1d583..b3640c2 100644 --- a/libtnsl/src/reflect/reflect.tnsl +++ b/libtnsl/src/reflect/reflect.tnsl @@ -24,4 +24,10 @@ Type and method resolution, reflection and other required methods such as is #; export module reflect + /: import + "type.tnsl" + "virtual.tnsl" + "resolver.tnsl" + "dispatch.tnsl" + :/ ;/
\ No newline at end of file diff --git a/libtnsl/src/reflect/static.tnsl b/libtnsl/src/reflect/static.tnsl deleted file mode 100644 index d346464..0000000 --- a/libtnsl/src/reflect/static.tnsl +++ /dev/null @@ -1,20 +0,0 @@ -/## - 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 -#/
\ No newline at end of file diff --git a/libtnsl/src/reflect/type.tnsl b/libtnsl/src/reflect/type.tnsl index b36dfc5..7a19b7d 100644 --- a/libtnsl/src/reflect/type.tnsl +++ b/libtnsl/src/reflect/type.tnsl @@ -20,53 +20,21 @@ #/ /## tnsl.reflect._type - Header data which prefixes all non-raw structs. + Header data which non-raw structs point to. Upper limits for classes and libs defined here: - - Max 2^32 libraries - - Max 2^16 classes per library + - 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(uint8 N) { - uint32 - _lib_index, +; raw struct _type() { uint16 - _type_index, + _library_id, + _module_id, + _type_id, - {N}_type - _generic_list -} - -/## tnsl.reflect._method - Metadata for methods (can be decoded from library - symbol tables). Limits for methods defined here: - - Max 2^8 inputs - - Max 2^8 outputs -#/ -; raw struct _method(uint8 I, O) { - ~{}charp - name, - - {I}_type - inputs, - {O}_type - outputs, - - ~void - address -} - -/## tnsl.reflect._member - Metadata about struct members -#/ -; raw struct _member { - ~{}charp - name, - - uint - offset, - - _type - _member_type + {uint8}_type + _generics } /## tnsl.reflect._type_addresses @@ -74,22 +42,30 @@ in a class #/ ; raw struct _type_addresses { - ~{}uint - _offsets, - _super_offsets, - ~{}_type _supers, + + ~{}uint + _super_offsets, ~{}_method - _methods + _methods, + + ~{}_member + _members } /; method _type - /; _is (_type_header base) + /; _is (_type base) [bool] + ;/ + + /; inline _get (_type t, ~void s, _member m) [~void] + ;/ + + /; inline raw _call (_type t, ~void s, _method m, ~void p) ;/ - /; _get_method () + /; _offset (_type cast) [uint] ;/ ;/
\ No newline at end of file diff --git a/libtnsl/src/reflect/virtual.tnsl b/libtnsl/src/reflect/virtual.tnsl new file mode 100644 index 0000000..8891905 --- /dev/null +++ b/libtnsl/src/reflect/virtual.tnsl @@ -0,0 +1,144 @@ +/## + 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 +#/ + +/## _LIB_TABLE + The array of library export trees. + + Convention: + - index 0 is always reserved for language-specific types + libtnsl + - index 0 module 0 represents the fundimental in-built types like int +#/ +: extern const {}~library _LIB_TABLE + +; raw struct library { + # Version + uint16 + major, + minor, + patch + + ~sym_node + root_node +} + +/## tnsl.reflect._method + Metadata for methods (can be decoded from library + symbol tables). Limits for methods defined here: + - Max 2^8 inputs + - Max 2^8 outputs +#/ +; raw struct _method { + {uint8}charp + name, + + {uint8}~_type + inputs, + outputs, + + ~void + address +} + +/## tnsl.reflect._member + Metadata about struct members +#/ +; raw struct _member { + {uint8}charp + name, + + _type + member_type, + + uint + byte_offset +} + +/## tnsl.reflect.sym_node + Represents a module in a symbol tree +#/ +; raw struct sym_node { + {uint8}charp + name, + + uint16 + id, + + {}~sym_node + sub_modules, + + {}~sym_type + sub_types +} + +/## tnsl.reflect.sym_type + Represents a type in a symbol tree +#/ +; raw struct sym_type { + {uint8}charp + name, + + {uint8}~sym_type + super_types, + +} + +############################### +# Traverse the Library Tree # +############################### + +/; get_sym_node (~sym_node root, uint16 mod_id) [~sym_node] + /;loop (root != null) + /; loop (uint16 sub = 0; sub < len `root.sub_modules) [sub++] + /; if (mod_id < `root.sub_modules{sub}.id) + /; if (sub == 0) + ; return null + ;/ + ;root = `root.sub_modules{sub - 1} + ; continue 1 + ;; else if (mod_id == `root.sub_modules{sub}.id) + ; return `root.sub_modules{sub} + ;/ + ;/ + + ; break + ;/ + + ; return null +;/ + +/; get_sym_node (uint16 lib_id, mod_id) [~sym_node] + + ;~library lib = _LIB_TABLE{lib_id} + + ;return get_sym_node(`lib.root_node, mod_id) +;/ + +/; get_sym_type(uint16 lib_id, mod_id, typ_id) [~sym_type] + + ;~library lib = _LIB_TABLE{lib_id} + ;~sym_node mod = get_sym_node(`lib.root_node, mod_id) + + ;return `mod.sub_types{typ_id} +;/ + +/; get_sym_type(`const {}charp path) [~sym_type] + +;/
\ No newline at end of file |