From 09df1bb48823631228af3df647111af1eebc854b Mon Sep 17 00:00:00 2001 From: Kyle Gunger Date: Thu, 16 Feb 2023 05:14:31 -0500 Subject: Collapse tnslc into a single file --- tnslc/tests/complex/enums.tnsl | 84 +++++++++++++++++++++++++++++++++++++ tnslc/tests/complex/generics.tnsl | 35 ++++++++++++++++ tnslc/tests/complex/if_else.tnsl | 46 ++++++++++++++++++++ tnslc/tests/complex/interfaces.tnsl | 0 tnslc/tests/complex/loops.tnsl | 0 tnslc/tests/complex/switch.tnsl | 0 6 files changed, 165 insertions(+) create mode 100644 tnslc/tests/complex/enums.tnsl create mode 100644 tnslc/tests/complex/generics.tnsl create mode 100644 tnslc/tests/complex/if_else.tnsl create mode 100644 tnslc/tests/complex/interfaces.tnsl create mode 100644 tnslc/tests/complex/loops.tnsl create mode 100644 tnslc/tests/complex/switch.tnsl (limited to 'tnslc/tests/complex') diff --git a/tnslc/tests/complex/enums.tnsl b/tnslc/tests/complex/enums.tnsl new file mode 100644 index 0000000..80776f0 --- /dev/null +++ b/tnslc/tests/complex/enums.tnsl @@ -0,0 +1,84 @@ +# Enums should be able to store structs as well +struct EnumTester { + int i, j + ~EnumTester ptr +} + +# Simple integer enum +enum IntEnum [int] { + A = 0, + B = 1, + C = -2 +} + +# Simple float enum +enum FloatEnum[float] { + A = 0.1, + B = 0.2, + C = 3.1415 +} + +# More complex struct enum +enum TestEnum [EnumTester] { + A = {1, 2, null}, + B = {2, 3, ~TestEnum.A}, + C = {3, 3, null} +} + +# Type enum +enum TypeEnum [type] { + A = int, + B = float, + C = EnumTester +} + +enum SurfaceType [int] { + LAND = 0, + WATER = 1, + AIR = 2, + + SPACE = -1 +} + +/; interface Vehicle + /; fuel [float] ;/ + /; max_speed [float] ;/ + /; min_speed [float] ;/ + /; can_travel (SurfaceType surface) [bool] ;/ +;/ + +struct Car extends Vehicle { + int wheels +} + +struct Boat extends Vehicle { + int propellers +} + +struct Plane extends Vehicle { + bool biplane, passenger + int engines, +} + +struct Rocket extends Vehicle { + int + engines, + stages +} + +struct HoverCraft extends Vehicle { + {3}float + max_antigrav, + bool + space_ready +} + +# Enums can also handle interfaces (and extended types) +# but only if the given standard library has support for those things +enum CommonVehicles [Vehicle] { + A = {4}[Car], + B = {1}[Boat], + C = {false, true, 2}[Plane], + D = {4, 5}[Rocket], + E = {{5, 14.8, 5}, false}[HoverCraft] +} diff --git a/tnslc/tests/complex/generics.tnsl b/tnslc/tests/complex/generics.tnsl new file mode 100644 index 0000000..3f62474 --- /dev/null +++ b/tnslc/tests/complex/generics.tnsl @@ -0,0 +1,35 @@ +struct ListNode (type T) { + T element, + ~ListNode(T) next +} + +/; method ListNode + /; get_el [T] + return self.element + ;/ + + /; get_next [ListNode(T)] + return self.next` + ;/ +;/ + +struct ReferenceNode (type T) extends ListNode(T`) { + super +} + +/; method ReferenceNode + /; change_ref (~T new_ref) + ~self.element = new_ref + ;/ +;/ + +struct List(type T) { + +} + +# Generic (type T) +# Unknown generic (?) +# Ref to a type (type T) -> T` +# Ref types can be used interchangably with their referenced type while pointer types can not +# Variables typed by reference have the additional trait that you can +# set the address of that variable \ No newline at end of file diff --git a/tnslc/tests/complex/if_else.tnsl b/tnslc/tests/complex/if_else.tnsl new file mode 100644 index 0000000..d965e6b --- /dev/null +++ b/tnslc/tests/complex/if_else.tnsl @@ -0,0 +1,46 @@ +/; main [int] + /; if () + + ;/ + + /; if () + + ;; else + + ;/ + + /; if () + + ;//; else + + ;/ + + /; if () + + ;; else if () + + ;/ + + /; if () [] + ;; else if () [] + ;; else [] + ;/ + + /; if () [] + ;; if () [] + ;; else [] + ;/ + + /; if () [] + ;; if () [] + ;; else if () [] + ;; else [] + ;/ + + int i = 0 + + # Short if syntax for variable declaration + i = if (i < 1) [7] else [9] + + ;return 0 +;/ \ No newline at end of file diff --git a/tnslc/tests/complex/interfaces.tnsl b/tnslc/tests/complex/interfaces.tnsl new file mode 100644 index 0000000..e69de29 diff --git a/tnslc/tests/complex/loops.tnsl b/tnslc/tests/complex/loops.tnsl new file mode 100644 index 0000000..e69de29 diff --git a/tnslc/tests/complex/switch.tnsl b/tnslc/tests/complex/switch.tnsl new file mode 100644 index 0000000..e69de29 -- cgit v1.2.3