Michael Van Canneyt via fpc-pascal wrote:
28.  The documentation for macpas "UNIV" is missing ?

I have no idea what this is ?

UNIV is macpas specific (as mentioned in Appendix D.6 of the Programmer's 
Manual)

With UNIV,

        ... ":" [ "ARRAY" "OF" ] type-identifier ...

 in the syntax diagrams, becomes

        ... ":" [ "ARRAY" "OF" | UNIV ] type-identifier ...

The modifier UNIV indicates that the actual parameter can be of any type that has the same byte-size as the formal parameter.

Example:

        procedure HDispose( var theHandle: univ Handle); .....

which saves a value-type-cast when calling HDispose with handles that are not (precisely) of type Handle.

Another use of UNIV is type-compatibility of procedural parameters. For example 
with

 function BinaryFind
        (     theValuePtr             : univ UnivPtr;
              theFirstIndex           : Int32;
              theLastIndex           : Int32;
     function SmallerThan
        (     theIndex                : Int32;
              theValuePtr             : univ UnivPtr): boolean;
     function EqualTo
        (     theIndex                : Int32;
              theValuePtr             : univ UnivPtr): boolean;
          var theFoundIndex           : Int32): boolean;

we can call BinaryFind as follows

      theFoundFlag := BinaryFind
        ( @theCmdID, 1, kCmdCount, CmdIDSmallerThan, CmdIDEqualTo,

where

 function CmdIDSmallerThan
        (     theIndex                : Int32;
              theValuePtr             : CmdIDPtr): boolean; .....

and

function CmdIDEqualTo
        (     theIndex                : Int32;
              theValuePtr             : CmdIDPtr): boolean; ...

because CmdIDPtr is through UNIV type-compatible with

        theValuePtr : univ UnivPtr

Regards,

Adriaan van Os

_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to