Welltype (Compiler & Runtime) - v0.12.0


wtc

Welltype Compiler. This program can compile the Welltype source to Welltype Binary (.wtb)
Usage: wtc [OPTION]... FILE
Options:

wt

Welltype Runtime. This program can execute the previously compiled Welltype Binaries.
Usage: wt [OPTION]... FILE
Options:

readwtb

Read Welltype Binary. This program can print informations about the Welltype Binaries.
Usage: readwtb OPTION... FILE
Options:


Types

Type Range Operators and comments
i8,
byte
-128 .. 127 +, -, *, /, %
<<, >>, &, |, ^
<, <=, ==, !=, >=, >
u8,
ubyte
0 .. 255 +, -, *, /, %
<<, >>, &, |, ^
<, <=, ==, !=, >=, >
i16,
short
-32768 .. 32767 +, -, *, /, %
<<, >>, &, |, ^
<, <=, ==, !=, >=, >
u16,
ushort
0 .. 65535 +, -, *, /, %
<<, >>, &, |, ^
<, <=, ==, !=, >=, >
i32,
int
-2147483648 .. 2147483647 +, -, *, /, %
<<, >>, &, |, ^
<, <=, ==, !=, >=, >
u32,
uint
0 .. 4294967295 +, -, *, /, %
<<, >>, &, |, ^
<, <=, ==, !=, >=, >
i64,
long
-9223372036854775808 .. 9223372036854775807 +, -, *, /, %
<<, >>, &, |, ^
<, <=, ==, !=, >=, >
u64,
ulong
0 .. 18446744073709551615 +, -, *, /, %
<<, >>, &, |, ^
<, <=, ==, !=, >=, >
f32,
float
3.4e-38 .. 3.4e38
can be negative
+, -, *, /, %
<, <=, ==, !=, >=, >
f64,
double
1.7e-308 .. 1.7e308
can be negative
+, -, *, /, %
<, <=, ==, !=, >=, >
bool false, true &&, ||, ^
<, <=, ==, !=, >=, >
!
&&&, ||| (lazy evaluated, can not be overloaded)
string standard C string +
<, <=, ==, !=, >=, >
char standard C character +, -
<, <=, ==, !=, >=, >
handle none ==, !=
file - (copyable)
(not default constructible object)
dir - (copyable)
(not default constructible object)
seq<T> T is a type (copyable)
record - (create, copyable, member access)
private record - (create, copyable)
limited record - (not copyable when imported)
(not default constructible when imported)
datatype - (properties depends on the datatype)
function - (copyable)
(not default constructible)
enum - (copyable)
<, <=, ==, !=, >=, >
  • tos(enum):string; convert enum to string
  • ordinal(enum):u32; convert enum to uint, first element in the enum will be 1
  • pred(enum):enum; get the predecessor of the current enum element (raise ConstraintErrorException on first element)
  • succ(enum):enum; get the successor of the current enum element (raise ConstraintErrorException on last element)
  • toenum(string):enum; convert string to enum (case sensitive, may raise ConstraintErrorException)
  • toenum(u32):enum; convert uint to enum (use numbers returned by ordinal(); may raise ConstraintErrorException)

The type pairs in the table above (i.e. i32, int) means the types are equivalents. These are only alternate names, and they handled by the lexical analyzer.

Type modifiers

Keyword Example Description
mutable ..., mutable string s, ... Can only be used in function argument. Tells the compiler the content of the passed object can be altered. Note that, the object itself can not be replaced.

Builtin functions

Name Signature Description
write (string) [impure] Write string to the standard output.
read () : string [impure] Read a line from the standard input.
read (char delim) : string [impure] Read a delim terminated string from the standard input.
ror (T, T) : T Rotate right. T can be: i8, u8, i16, u16, i32, u32, i64, u64.
sqrt (T) : T Calculate square root of number (optimized algorithm for integers). T can be: i8, u8, i16, u16, i32, u32, i64, u64, f32, f64.
log (T) : T Calculate e-based logarithm. T can be: f32, f64.
exp (T) : T Calculate e-based exponentional. T can be: f32, f64.
pow (T a, T b) : f64 Calculate a^b. T can be: f32, f64.
sin (T) : T Calculate the sine (in radian). T can be: f32, f64.
cos (T) : T Calculate the cosine (in radian). T can be: f32, f64.
tan (T) : T Calculate the tangent (in radian). T can be: f32, f64.
asin (T) : T Calculate the arcsine (in radian). T can be: f32, f64.
acos (T) : T Calculate the arccosine (in radian). T can be: f32, f64.
atan (T) : T Calculate the arctangent (in radian). T can be: f32, f64.
atan2 (T y, T x) : T Calculate the arctangent of y/x (in radian). T can be: f32, f64.
strcmp (string a, string b) : i32 Compare strings (case sensitive). Return <0 if a<b; 0 if a==b; >0 if a>b.
stricmp (string a, string b) : i32 Compare strings (case insensitive). Return <0 if a<b; 0 if a==b; >0 if a>b.
streq (string a, string b) : bool Same as strcmp(a, b)==0
strieq (string a, string b) : bool Same as stricmp(a, b)==0
strne (string a, string b) : bool Same as strcmp(a, b)!=0
strine (string a, string b) : bool Same as stricmp(a, b)!=0
strcat (string, string) : string Concatenate the two strings.
trim (string) : string Trim the white spaces from the beginning and from the end of a string.
trim (string, string) : string Trim the characters in the second string from the beginning and from the end of first string.
strrev (string) : string Return the argument in reverse.
substr (string str, u32 offs) : string Return the part of the string from the offset to the end.
substr (string str, u32 offs, u32 count) : string Return the part of the string.
startswith (string str, string prefix) : bool Return true if the second string is prefix of the first string, false otherwise.
endswith (string str, string suffix) : bool Return true if the second string is suffix of the first string, false otherwise.
empty (string) : bool Return the fact that the string is an empty string or not.
chars (char c, u32 n) : string Return a string consisting of n of character c.
chars (char c, u32 n, string tl) : string Return a string consisting of n of character c, and ends with tl.
copies (string s, u32 n) : string Return a string containing of s repeated n times.
copies (string s, u32 n, string tl) : string Return a string containing of s repeated n times, and ends with tl.
strcpy (mutable string dstr, u32 doff, string sstr, u32 soff, u32 len) Copy len characters to doffth character of dstr from soffth character of sstr.
strstr (string haystack, string needle) : u32 Return the offset of the first occurrence of needle in haystack; or length of haystack if not found.
strstr (string haystack, u32 start, string needle) : u32 Return the offset of the first occurrence of needle in haystack from the startth character; or length of haystack if not found.
strrstr (string haystack, string needle) : u32 Return the offset of the last occurrence of needle in haystack; or length of haystack if not found.
strrstr (string haystack, u32 start, string needle) : u32 Return the offset of the last occurrence of needle in haystack from the startth character; or length of haystack if not found.
strchr (string s, char c) : u32 Return the offset of the first occurrence of c in s; or length of s if not found.
strchr (string s, u32 n, char c) : u32 Return the offset of the first occurrence of c in s from the nth character; or length of s if not found.
strrchr (string s, char c) : u32 Return the offset of the last occurrence of c in s; or length of s if not found.
strrchr (string s, u32 n, char c) : u32 Return the offset of the last occurrence of c in s from the nth character; or length of s if not found.
strspn (string s, string accept) : u32 Return the length (in characters) of the inital segment of s which consists entirely of characters in accept.
strspn (string s, u32 n, string accept) : u32 Return the length (in characters) of the inital segment of s which consists entirely of characters in accept. The first n characters are ignored.
strcspn (string s, string reject) : u32 Return the length (in characters) of the inital segment of s which consists entirely of characters not in reject.
strcspn (string s, u32 n, string reject) : u32 Return the length (in characters) of the inital segment of s which consists entirely of characters not in reject. The first n characters are ignored.
strtok (string str, string sep) : seq<string> Return the sequence of tokens found in str separeted by sep characters.
strlen (string) : u32 Return the length of the string.
strlower (string) : string Return the string in lowercase.
strupper (string) : string Return the string in uppercase.
chartostring (char) : string Convert a single character to string.
getstrchar (string s, u32 i) : char Same as s[i]
setstrchar (string s, u32 i, char ch) : string Return the string, but i-th character is replaced with ch.
charcmp (char a, char b) : i32 Compare two characters (case sensitive). Return <0 if a<b; 0 if a==b; >0 if a>b.
charadd (char, char) : char Add two characters, resulting an other character.
charsub (char, char) : char Subtract two characters, resulting an other character.
charinc (char ch, i32 i) : char Calculate (ch+i) mod 256.
+ (char ch, T i) : char Calculate (ch+i) mod 256. T can be: i8, u8, i16, u16, i32, u32.
chardiff (char, char) : i32 Return the difference between the ASCII codes of the characters.
tolower (char) : char Return the lowercase version of ASCII characters.
toupper (char) : char Return the uppercase version of ASCII characters.
iscntrl (char) : bool Check if the given character is a control character.
isprint (char) : bool Check if the given character is a printable character.
isspace (char) : bool Check if the given character is a whitespace character.
isblank (char) : bool Check if the given character is a blank character.
isgraph (char) : bool Check if the given character is graphic (has a graphical representation).
ispunct (char) : bool Check if the given character is a punctuation character.
isalnum (char) : bool Check if the given character is an alphanumeric character.
isalpha (char) : bool Check if the given character is an alphabetic character.
isupper (char) : bool Check if the given character is an uppercase character.
islower (char) : bool Check if the given character is a lowercase character.
isdigit (char) : bool Check if the given character is a decimal digit.
isxdigit (char) : bool Check if the given character is a hexadecimal numeric character.
tos (T) : string Convert to string. T can be: string, char, bool, i8, u8, i16, u16, i32, u32, i64, u64, f32, f64.
tobool (string) : bool Convert string to boolean. (true, on, 1, yes)
toi32 (T) : i32 Convert to i32. May raise ConstraintErrorException. T can be: i8, u8, i16, u16, i32, u32, i64, u64, f32, f64, char.
tou32 (T) : u32 Convert to u32. May raise ConstraintErrorException. T can be: i8, u8, i16, u16, i32, u32, i64, u64, f32, f64, char.
toi64 (T) : i64 Convert to i64. May raise ConstraintErrorException. T can be: i8, u8, i16, u16, i32, u32, i64, u64, f32, f64, char.
tou64 (T) : u64 Convert to u64. May raise ConstraintErrorException. T can be: i8, u8, i16, u16, i32, u32, i64, u64, f32, f64, char.
tof32 (T) : f32 Convert to f32. May raise ConstraintErrorException. T can be: i32, u32, i64, u64, f32, f64.
tof64 (T) : f64 Convert to f64. May raise ConstraintErrorException. T can be: i32, u32, i64, u64, f32, f64.
tochar (T) : char Convert to character. May raise ConstraintErrorException. T can be: i8, u8, i16, u16, i32, u32, i64, u64, char.
nullhandle () : handle Return the null handle.
empty (seq<T>) : bool Return the fact that the sequence is empty or not.
seqlen (seq<T>) : u32 Return the number of elements in the sequence.
loext (seq<T>, T) : seq<T> Append an element to the low end.
hiext (seq<T>, T) : seq<T> Append an element to the high end.
lorem (seq<T>) : seq<T> Remove an element from the low end.
hirem (seq<T>) : seq<T> Remove an element from the high end.
lov (seq<T>) : T Return the element at the low end.
hiv (seq<T>) : T Return the element at the high end.
lopop (seq<T>) : seq<T>, T Remove and return the element at the low end.
hipop (seq<T>) : seq<T>, T Remove and return the element at the high end.
seqfill (T elem, u32 count) : seq<T> Create a new sequence filled with the specified number of the specified element.
subseq (seq<T> s, u32 offs, u32 count) : seq<T> Return the part of the sequence.
access (string, i32) : bool [impure] Check access rights (2: read, 4: write, can be ORd).
fopen (string, char) : file [impure] Open a file ('r': read, 'w': write, 'a': append).
feof (file) : bool [impure] Check whether the file is at end of the file.
fread (file, seq<T> dst) : u32 [impure] Read data from file by overwriting elements. Return value is the number of read elements, but at most seqlen(dst). T can be: i8, u8, i16, u16, i32, u32, i64, u64, f32, f64
freadchar (file) : char [impure] Read a character from the file.
freadbool (file) : bool [impure] Read a boolean from the file.
freadstr (file) : string [impure] Read a zero-terminated string from the file.
freadstr (file, char) : string [impure] Read string from the file until the given character. The separator is not part of the result.
freadln (file) : string [impure] Read a line from the file. Raise EndOfFileException when EOF reached.
freadi8 (file) : i8 [impure] Read an i8 from the file.
freadu8 (file) : u8 [impure] Read an u8 from the file.
freadi16 (file) : i16 [impure] Read an i16 from the file.
freadu16 (file) : u16 [impure] Read an u16 from the file.
freadi32 (file) : i32 [impure] Read an i32 from the file.
freadu32 (file) : u32 [impure] Read an u32 from the file.
freadi64 (file) : i64 [impure] Read an i64 from the file.
freadu64 (file) : u64 [impure] Read an u64 from the file.
freadf32 (file) : f32 [impure] Read an f32 from the file.
freadf64 (file) : f64 [impure] Read an f64 from the file.
fwriteln (file, string) [impure] Write a line into the file.
fwrite (file, string) [impure] Write a zero-terminate string into the file.
fwrite (file, T) [impure] Write a T into the file. T can be: char, bool, string, i8, u8, i16, u16, i32, u32, i64, u64, f32, f64, seq<i8>, seq<u8>
fwrite (file, seq<T>) [impure] Write Ts in a sequence into the file.. T can be: i8, u8, i16, u16, i32, u32, i64, u64, f32, f64
stat (string) : bool, char, u64, u64, u64 [impure] Get file status. Parameter is the path name of the file. Returns whether the status query was successful; type of the filesystem entry (see dirgettype()); size of the file; time of last modification (in milli-seconds since epoch); and time of birth (in milli-seconds since epoch).
fstat (file) : bool, char, u64, u64, u64 [impure] Identical to stat(), but works on open files.
opendir (string) : dir [impure] Open a directory iterator for the specified directory.
readdir (dir) : bool [impure] Read the next directory entry. Return false when the iteration is over.
dirgetname (dir) : string [impure] Return the name of the current entry.
dirgettype (dir) : char [impure] Return the type of the current entry ('D' for directories, 'R' for regular files, 'B' for block devices, 'C' for character devices, 'L' for symbolic links, 'F' for FIFOs, 'S' for sockets, or '?' for unknown entries).
islittleendian () : bool Return a boolean which indicates whether the current system is little endian.
isbigendian () : bool Return a boolean which indicates whether the current system is big endian.
ltob (T) : T Convert a value from little endian to big endian. T can be: i16, u16, i32, u32, i64, u64, f32, f64.
btol (T) : T Convert a value from big endian to little endian. T can be: i16, u16, i32, u32, i64, u64, f32, f64.
ltoh (T) : T Convert a value from little endian to host byte order. T can be: i16, u16, i32, u32, i64, u64, f32, f64.
htol (T) : T Convert a value from host byte order to little endian. T can be: i16, u16, i32, u32, i64, u64, f32, f64.
btoh (T) : T Convert a value from big endian to host byte order. T can be: i16, u16, i32, u32, i64, u64, f32, f64.
htob (T) : T Convert a value from host byte order to big endian. T can be: i16, u16, i32, u32, i64, u64, f32, f64.
rand () : u32 [impure] Return a pseudorandom integer in complete range of the u32 type.
randf () : f32 [impure] Return a pseudorandom 32-bit floating point number from the [0,1] range.
srand (u32) [impure] Seed the pseudorandom number generator.

All functions are pure functions, unless impure is specified.

Functions provided by wt program

Name Signature Description
version () : u32 Returns the version of the Welltype environment. Value: (0 << 24) + (12 << 16) + (0 << 8)