| 12345678910111213141516171819202122232425262728293031323334 |
- MODULE TCallback;
- (* A top-level V3 procedure is C-callable after the callback ABI change. *)
- FROM SYSTEM IMPORT ADDRESS, ADR;
- PROCEDURE add (a, b : INTEGER) : INTEGER;
- BEGIN
- RETURN a + b
- END add;
- PROCEDURE call_add (fn : ADDRESS; a, b : INTEGER) : INTEGER;
- EXTERNAL "m2_c_call_add";
- PROCEDURE call_two (fn, a, b : ADDRESS); EXTERNAL "m2_c_call_two";
- VAR
- ExitCode : INTEGER;
- gotA, gotB : ADDRESS;
- PROCEDURE two (a, b : ADDRESS);
- BEGIN
- gotA := a;
- gotB := b
- END two;
- BEGIN
- gotA := NIL;
- gotB := NIL;
- call_two(ADR(two), ADR(gotA), ADR(gotB));
- IF (call_add(ADR(add), 20, 22) = 42)
- AND (gotA = ADR(gotA)) AND (gotB = ADR(gotB)) THEN
- ExitCode := 42
- ELSE
- ExitCode := 1
- END
- END TCallback.
|