Merge: share/libgc: option to use a local version of the source pkgs
[nit.git] / lib / standard / kernel.nit
index 21b0fc1..85386b4 100644 (file)
@@ -17,10 +17,6 @@ module kernel
 
 import end # Mark this module is a top level one. (must be only one)
 
-`{
-#include <errno.h>
-`}
-
 ###############################################################################
 # System Classes                                                              #
 ###############################################################################
@@ -67,7 +63,7 @@ interface Object
 
        # Have `self` and `other` the same value?
        #
-       # The exact meaning of "same value" is let to the subclasses.
+       # The exact meaning of "same value" is left to the subclasses.
        # Implicitly, the default implementation, is `is_same_instance`
        fun ==(other: nullable Object): Bool do return self.is_same_instance(other)
 
@@ -89,7 +85,7 @@ interface Object
        # Display class name on stdout (debug only).
        # This method MUST not be used by programs, it is here for debugging
        # only and can be removed without any notice
-       fun output_class_name is intern 
+       fun output_class_name is intern
 
        # The hash code of the object.
        # Assuming that a == b -> a.hash == b.hash
@@ -111,9 +107,7 @@ class Sys
        fun run do main
 
        # Number of the last error
-       fun errno: Int is extern `{
-               return errno;
-       `}
+       fun errno: Int is extern "sys_errno"
 end
 
 # Quit the program with a specific return code
@@ -229,11 +223,11 @@ end
 # Something that can be cloned
 #
 # This interface introduces the `clone` method used to duplicate an instance
-# Its specific semantic is let to the subclasses.
+# Its specific semantic is left to the subclasses.
 interface Cloneable
        # Duplicate `self`
        #
-       # The specific semantic of this method is let to the subclasses;
+       # The specific semantic of this method is left to the subclasses;
        # Especially, if (and how) attributes are cloned (depth vs. shallow).
        #
        # As a rule of thumb, the principle of least astonishment should
@@ -452,11 +446,17 @@ universal Int
        #     assert 5.lshift(1)    == 10
        fun lshift(i: Int): Int is intern
 
+       # alias of `lshift`
+       fun <<(i: Int): Int do return lshift(i)
+
        # `i` bits shift fo the right (aka >>)
        #
        #     assert 5.rshift(1)    == 2
        fun rshift(i: Int): Int is intern
 
+       # alias of `rshift`
+       fun >>(i: Int): Int do return rshift(i)
+
        redef fun to_i do return self
        redef fun to_f is intern
 
@@ -718,6 +718,22 @@ universal Char
        do
                return is_lower or is_upper
        end
+
+       # Is self a whitespace character?
+       #
+       # These correspond to the "Other" and "Separator" groups of the Unicode.
+       #
+       # In the ASCII encoding, this is those <= to space (0x20) plus delete (0x7F).
+       #
+       #     assert 'A'.is_whitespace  == false
+       #     assert ','.is_whitespace  == false
+       #     assert ' '.is_whitespace  == true
+       #     assert '\t'.is_whitespace == true
+       fun is_whitespace: Bool
+       do
+               var i = ascii
+               return i <= 0x20 or i == 0x7F
+       end
 end
 
 # Pointer classes are used to manipulate extern C structures.