import end # Mark this module is a top level one. (must be only one)
+`{
+#include <errno.h>
+`}
+
###############################################################################
# System Classes #
###############################################################################
class Sys
# Instructions outside classes implicitly redefine this method.
fun main do end
+
+ # Number of the last error
+ fun errno: Int is extern `{
+ return errno;
+ `}
end
###############################################################################
# assert 5.to_f == 5.0
# assert 5.to_f != 5 # Float and Int are not equals
fun to_f: Float is abstract
+
+ # Is this the value of zero in its domain?
+ fun is_zero: Bool do return self == zero
+
+ # The value of zero in the domain of `self`
+ fun zero: OTHER is abstract
+
+ # The value of `val` in the domain of `self`
+ #
+ # assert 1.0.value_of(2) == 2.0
+ # assert 1.0.value_of(2.0) == 2.0
+ # assert 1.value_of(2) == 2
+ # assert 1.value_of(2.0) == 2
+ fun value_of(val: Numeric): OTHER is abstract
end
###############################################################################
redef fun ==(b) is intern
redef fun !=(b) is intern
redef fun output is intern
- redef fun hash
+ redef fun hash do return to_i
+
+ # 1 if true and 0 if false
+ fun to_i: Int
do
if self then
return 1
redef fun to_i is intern
redef fun to_f do return self
+
+ redef fun zero do return 0.0
+ redef fun value_of(val) do return val.to_f
end
# Native integer numbers.
redef fun /(i) is intern
fun %(i: Int): Int is intern
+ redef fun zero do return 0
+ redef fun value_of(val) do return val.to_i
+
# `i` bits shift fo the left (aka <<)
#
# assert 5.lshift(1) == 10
end
# Pointer classes are used to manipulate extern C structures.
-extern Pointer
+extern class Pointer
# Is the address behind this Object at NULL?
- fun address_is_null: Bool `{ return recv == NULL; `}
+ fun address_is_null: Bool is extern "address_is_null"
+
+ # Free the memory pointed by this pointer
+ fun free `{ free(recv); `}
end