1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- MODULE m;
- TYPE
- PR = POINTER TO R;
- R = RECORD i: INTEGER; byte: BYTE; a: ARRAY 3 OF INTEGER; p: POINTER TO R END;
- VAR
- i: INTEGER;
- byte: BYTE;
- b: BOOLEAN;
- a: ARRAY 5 OF INTEGER;
- byteArray: ARRAY 3 OF BYTE;
- PROCEDURE p1(VAR i1, i2: INTEGER; VAR byte: BYTE);
- BEGIN
- i1 := 1;
- i2 := 2;
- byte := 3;
- END p1;
- PROCEDURE p2(i: INTEGER; byte: BYTE; b: BOOLEAN);
- END p2;
- PROCEDURE index(VAR i: INTEGER): INTEGER;
- RETURN i
- END index;
- PROCEDURE indexByte(VAR b: BYTE): BYTE;
- RETURN b
- END indexByte;
- PROCEDURE array(VAR a: ARRAY OF INTEGER): INTEGER;
- RETURN a[0]
- END array;
- PROCEDURE p3(VAR i: INTEGER; VAR byte: BYTE; VAR b: BOOLEAN);
- VAR j: INTEGER;
- r: R;
- ar: ARRAY 5 OF R;
- ai: ARRAY 5 OF INTEGER;
- BEGIN
- j := i + 1;
- j := 2 * i;
- j := i DIV 2;
- j := -i;
- b := ~b;
- a[i] := i;
- p1(j, i, byte);
- p1(i, j, byte);
- p1(i, a[index(i)], byteArray[indexByte(byte)]);
- p2(i, byte, b);
- p1(r.i, ar[index(r.i)].i, ar[index(r.i)].byte);
- NEW(r.p);
- NEW(ar[j].p);
- p1(r.p.i, ar[j].p.i, ar[j].p.byte);
- p2(ar[j].p.i, ar[j].p.byte, r.p.i = ar[j].p.i);
- j := array(ai);
- j := array(r.a);
- END p3;
- PROCEDURE testPointerDereferenceAndPassAsVAR(p: PR);
- PROCEDURE innerVAR(VAR r: R);
- END innerVAR;
- PROCEDURE innerConstVAR(r: R);
- END innerConstVAR;
- BEGIN
- innerVAR(p^);
- innerConstVAR(p^);
- END testPointerDereferenceAndPassAsVAR;
- BEGIN
- p3(i, byte, b)
- END m.
|