variant

Command: variant


Synopsis
funcname signature variant -> anytype true
false
File
lib/sli/typeinit.sli
Parameters

funcname is a literal specifying the name of the function.
Usually the literal refers to a trie with several
variants.
signature is an array of literals defining the signature
of the variant searched for
Author
Diesmann
Description

The operator variant checks whether a variant of the function
matching a particular signature is available. If so this variant and
the value true are returned. If not the return value is false. If
the literal specifying the function does not refer to a trie the
function has only a single variant and no information about the
signature. In this case the unique variant is returned. The
operator variant can be used to optimize SLI code for speed in
situations where it is guaranteed that a particular variant of a
function is needed. Here replacing the overloaded function by the
specific variant removes the overhead of type checking. A typical
situation in which the data types of the arguments are known is a
function call inside a function with a specified signature (see
example below). Another situation is machine generated SLI code where
the machine for example a compiler is requested to emit optimized
code restricted to particular data type.

/incr [/doubletype]
{
1.0 add
}
<< /add /add [/doubletype /doubletype] variant pop >> Inline
def

FirstVersion
090201

Examples


/add [/doubletype /doubletype] variant pop --> /add_dd load
/add [/doubletype /stringtype] variant --> false
/add [/stringtype /doubletype] variant --> false
/ArrayQ [/anytype] variant pop --> false
/f {(hello) ==} def
/f [/integertype] variant pop --> {(hello) ==}