aboutsummaryrefslogtreecommitdiff
path: root/std/prelude/numbers.pk
diff options
context:
space:
mode:
Diffstat (limited to 'std/prelude/numbers.pk')
-rw-r--r--std/prelude/numbers.pk53
1 files changed, 43 insertions, 10 deletions
diff --git a/std/prelude/numbers.pk b/std/prelude/numbers.pk
index 7857d34..801591a 100644
--- a/std/prelude/numbers.pk
+++ b/std/prelude/numbers.pk
@@ -3,53 +3,73 @@
# reference: https://en.wikipedia.org/wiki/IEEE_754
## The default integer type. Size depends on architecture.
+@[copy, magic]
pub type int
## A signed 8-bit integer.
+@[copy, magic]
pub type i8
## A signed 16-bit integer.
+@[copy, magic]
pub type i16
## A signed 32-bit integer.
+@[copy, magic]
pub type i32
## A signed 64-bit integer.
+@[copy, magic]
pub type i64
## A signed 128-bit integer.
+@[copy, magic]
pub type i128
## The default unsigned integer type. Size depends on architecture.
+@[copy, magic]
pub type uint
## An unsigned 8-bit integer.
+@[copy, magic]
pub type u8
## An unsigned 16-bit integer.
+@[copy, magic]
pub type u16
## An unsigned 32-bit integer.
+@[copy, magic]
pub type u32
## An unsigned 64-bit integer.
+@[copy, magic]
pub type u64
## An unsigned 128-bit integer.
+@[copy, magic]
pub type u128
## A floating-point type. Takes up 64 bits by default.
pub type float = f64
## A 32-bit floating point type. Single precision.
+@[copy, magic]
pub type f32
## A 64-bit floating point type. Double precision.
+@[copy, magic]
pub type f64
## A 128-bit floating point type. Quadruple precision.
+@[copy, magic]
pub type f128
## A decimal type, according to IEEE 754. Takes up 64 bits by default.
pub type decimal = dec64
## A 64-bit decimal type.
+@[copy, magic]
pub type dec64
## A 128-bit decimal type.
+@[copy, magic]
pub type dec128
-## 8-bit bytes.
+## A primitive byte type. 8 bits wide.
pub type byte = u8
-## 4-byte chars. These represent distinct Unicode characters.
-pub type char = distinct u32
-## An alias to `char`, to match with `str`.
-pub type chr = char
+## A primitive char type. 4 bytes wide.
+## These represent distinct Unicode characters, and are useful with `str`.
+pub type chr = u32
+
+## Get the underlying length of a char, in bytes. 1-4.
+pub func len(self: chr): uint =
+ ...
## The IEEE floating point value of *Not a Number*.
pub const NaN: f64 = 0x7FF7FFFFFFFFFFFF
@@ -60,18 +80,31 @@ pub const NegInf: f64 = 0xFFF0000000000000
# todo: type conversions
+# fixme: types are all wrong
+@[magic]
pub func +[T](a: T, b: T): T
+@[magic]
pub func -[T](a: T, b: T): T
+@[magic]
pub func *[T](a: T, b: T): T
+@[magic]
pub func /[T](a: T, b: T): float
-pub func ^[T](a: T, b: T): T # todo: should be exp?
+@[magic]
+pub func exp[T](a: T, b: T = eulers_number): T
+@[magic]
+pub func log[T](a: T, b: T = eulers_number): T
+@[magic]
+pub func abs[T](a: T): T
+
+@[magic]
pub func div[T](a: T, b: T): T
-pub func mod[T](a: T, b: T): T # fixme
+@[magic]
+pub func mod[T](a: T, b: T): T
+@[magic]
pub func rem[T](a: T, b: T): T
+@[magic]
pub func shl[T](a: T): T
+@[magic]
pub func shr[T](a: T): T
-
-pub func abs[T](a: T): T
-pub func neg[T](a: T): bool