TOM knows the following non-keyword operators, in increasing precedence.
||=, share the precedence of
Assignment is right associative. Thus,
a = b = 1 first assigns
b and then assigns
if else. If the types of the if and else branches do not match, the type of the whole expression is
a -> bis identical to
!a || b.
>) only operate on numeric-typed values. The equality comparisons (
!=) operate on any type; they test the identicality of the arguments. Testing the equality of of two tuple-typed values tests the equality of all the elements, i.e. without short-circuits.
<<shifts left the number of bits specified by the rhs,
>>shifts right, and
>>>shifts right logically, as opposed to arithmetically.
>>>is useful for `unsigned' shifts on the signed
%is integer modulo.
~is the inversion of a boolean value, or the bitwise inversion of an integer numeric value.
!extracts and then negates a truth value from any non-tuple typed value. It returns the boolean truth if the argument does has the default value for its type.
-is the unary minus. It operates only on numeric types.
Operations on numeric types are performed in the precision of the type of the result. Thus, adding two floats results in a float, adding a byte to an int results in an int, after the byte has implicitly been converted to an int.
Operators provide functionality which is statically bound.
[Note: They are actually special methods declared in the
_builtin_.Top. They are special since they can not be redeclared in
any way, the syntax of TOM allowing neither a character like `+' in a
method name nor a method with one namepart and two arguments. The
operator methods are looked up in the class of the current object.
Thus, with a slightly bent syntax and ignoring the fact that not all
objects have an
isa as far as the compiler knows,
a + b is
actually a shorthand for
[isa + a, b]. End note.]
Go to the first, previous, next, last section, table of contents.