Types
Nospace adds two commands for dealing with types explicitly, Cast
and Assert
. Type commands have no runtime behavior and are instead used to help Nospace statically analyse for type errors.
Type commands use the
prefix.
Type Names
Similar to labels, type names are a sequence of
s and
s terminated by a
.
The following primitive type names are reserved:
Never
(
)Any
(
)Unknown
(
)Int
(
)Char
(
)
Any other name is considered a custom type.
Cast
The Cast
command is used to tell Nospace that the top item of the stack is the provided type.
Syntax
Command | Unobsfucated | |
---|---|---|
Nospace | | WJ , ZWSP |
Whitespace | - | - |
Nossembly | Cast | - |
Parameters
The Cast
must be provided with a type name indicating the type to cast the top item of the stack to.
Stack parameters
The Cast
command has no runtime behavior and as such takes no stack parameters.
Example
Assert
The Assert
command will throw a compile-time error if none of the possible types on the top of the stack are compatible with the specified type name.
Syntax
Command | Unobsfucated | |
---|---|---|
Nospace | | WJ , ZWNJ |
Whitespace | - | - |
Nossembly | Assert | - |
Parameters
The Assert
must be provided with a type name indicating the type which the top item in the stack should be compared to.
Stack parameters
The Assert
command has no runtime behavior and as such takes no stack parameters.
Example
Example where the type constraint is satisfied:
Example where the type constraint is not satisfied:
TypeError: Attempted to assert type "MyType2", but the top item of the stack is of type "MyType".