pTAL Reference Manual (G06.24+, H06.09+, J06.03+)

Example 219 Assignments to Procedure Pointers, Third Example
PROCPTR pp; END PROCPTR;
PROC32PTR p32p; END PROCPTR;
PROC64PTR p64p; END PROCPTR;
PROCADDR pa;
PROC32ADDR p32a;
PROC64ADDR p64a;
@pp := @pp; ! OK
@pp := pa ! OK
@pp := @p32p; ! OK
@pp := p32a; ! OK
@pp := @p64p; ! ERROR, @p64p is 64-bits long, @pp is 32-bits long
@pp := p64a; ! ERROR, @p64a is 64-bits long, @pp is 32-bits long
@p32p := @p32p; ! OK
@p32p := p32a; ! OK
@p32p := @pp; ! OK
@p32p := pa; ! OK
@p32p := @p64p; ! ERROR, @p64p is 64-bits long, @pp is 32-bits long
@p32p := p64a; ! ERROR, @p64p is 64-bits long, @p32p is 32-bits long
@p64p := @p64p; ! OK
@p64p := p64a; ! OK
@p64p := @pp; ! OK
@p64p := pa; ! OK
@p64p := @p32p; ! OK
@p64p := p32a; ! OK
pa := @pp; ! OK
pa := pa; ! OK
pa := @p32p; ! OK
pa := p32a; ! OK
pa := @p64p; ! ERROR, @p64p is 64-bits long, pa is 32-bits long
pa := p64a; ! ERROR, p64a is 64-bits long, pa is 32-bits long
p32a := @pp; ! OK
p32a := pa; ! OK
p32a := @p32p; ! OK
p32a := p32a; ! OK
p32a := @p64p; ! ERROR, @p64p is 64-bits long, p32a is 32-bits long
p32a := p64a; ! ERROR, p64a is 64-bits long, p32a is 32-bits long
p64a := @pp; ! OK
p64a := pa; ! OK
p64a := @p32p; ! OK
p64a := p32a; ! OK
p64a := @p64p; ! OK
p64a := p64a; ! OK
NOTE: Address types PROC32ADDR and PROC64ADDR and procedure pointer types PROC32PTR
and PROC64PTR are 64-bit addressing functionality added to the EpTAL compiler starting with
SPR T0561H01^AAP. For more information, see Appendix E, “64-bit Addressing Functionality”
(page 531).
Once you have set up a procedure pointer to point to a procedure, you can call the procedure by
using the procedure pointer name in a CALL statement or, if the procedure pointer is typed, in an
expression:
CALL a(1, 2);
r := d(r);
IF (s1[i].f(r)) < 1.0E0 THEN ...
Dynamically Selected Procedure Calls
You can use a procedure pointer to dynamically select a procedure to call.
Procedure Pointers 271