X-Git-Url: http://nitlanguage.org diff --git a/lib/standard/kernel.nit b/lib/standard/kernel.nit index a179e9a..dfff892 100644 --- a/lib/standard/kernel.nit +++ b/lib/standard/kernel.nit @@ -17,10 +17,6 @@ module kernel import end # Mark this module is a top level one. (must be only one) -`{ -#include -`} - ############################################################################### # System Classes # ############################################################################### @@ -66,13 +62,13 @@ interface Object fun is_same_instance(other: nullable Object): Bool is intern # Have `self` and `other` the same value? - ## + # # The exact meaning of "same value" is let to the subclasses. # Implicitly, the default implementation, is `is_same_instance` fun ==(other: nullable Object): Bool do return self.is_same_instance(other) # Have `self` and `other` different values? - ## + # # != is equivalent with "not ==". fun !=(other: nullable Object): Bool do return not (self == other) @@ -93,7 +89,7 @@ interface Object # The hash code of the object. # Assuming that a == b -> a.hash == b.hash - ## + # # Without redefinition, it is based on the `object_id` of the instance. fun hash: Int do return object_id / 8 end @@ -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 @@ -226,6 +220,25 @@ interface Discrete end 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. +interface Cloneable + # Duplicate `self` + # + # The specific semantic of this method is let to the subclasses; + # Especially, if (and how) attributes are cloned (depth vs. shallow). + # + # As a rule of thumb, the principle of least astonishment should + # be used to guide the semantic. + # + # Note that as the returned clone depends on the semantic, + # the `==` method, if redefined, should ensure the equality + # between an object and its clone. + fun clone: SELF is abstract +end + # A numeric value supporting mathematical operations interface Numeric super Comparable @@ -283,8 +296,10 @@ end # Native Booleans. # `true` and `false` are the only instances. +# # Boolean are manipulated trough three special operators: -# `and`, `or`, `not`. +# `and`, `or`, `not`. +# # Booleans are mainly used by conditional statement and loops. universal Bool redef fun object_id is intern @@ -414,6 +429,13 @@ universal Int redef fun -(i) is intern redef fun *(i) is intern redef fun /(i) is intern + + # Modulo of `self` with `i`. + # + # Finds the remainder of division of `self` by `i`. + # + # assert 5 % 2 == 1 + # assert 10 % 2 == 0 fun %(i: Int): Int is intern redef fun zero do return 0 @@ -482,8 +504,8 @@ universal Int # The character whose ASCII value is `self`. # - # assert 65.ascii == 'A' - # assert 10.ascii == '\n' + # assert 65.ascii == 'A' + # assert 10.ascii == '\n' fun ascii: Char is intern # Number of digits of an integer in base `b` (plus one if negative) @@ -690,6 +712,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. @@ -698,5 +736,5 @@ extern class Pointer fun address_is_null: Bool is extern "address_is_null" # Free the memory pointed by this pointer - fun free `{ free(recv); `} + fun free is extern "free" end