- Code: Select all
MODULE Test;
TYPE
Obj = POINTER TO RECORD END;
PROCEDURE Fun (): ANYPTR;
VAR obj: Obj;
BEGIN
NEW(obj);
RETURN obj
END Fun;
PROCEDURE Proc (VAR p: Obj);
BEGIN
p := NIL
END Proc;
PROCEDURE Do*;
BEGIN
Proc(Fun()(Obj))
END Do;
END Test.
(!)Test.Do
- Code: Select all
MODULE Test;
TYPE
Obj = POINTER TO RECORD END;
PROCEDURE Fun (): [b]Obj;[/b]
VAR obj: Obj;
BEGIN
NEW(obj);
RETURN obj
END Fun;
PROCEDURE Proc (VAR p: Obj);
BEGIN
p := NIL
END Proc;
PROCEDURE Do*;
BEGIN
Proc(Fun()(Obj))
END Do;
END Test.
(!)Test.Do
and Oleg report Ofront can catch such bug without problem.
- Code: Select all
MODULE Test;
IMPORT SYSTEM;
TYPE
Obj = POINTER TO RECORD END;
PROCEDURE Fun(): SYSTEM.PTR;
VAR obj: Obj;
BEGIN
NEW(obj); RETURN obj;
END Fun;
PROCEDURE Proc(VAR p: Obj);
BEGIN
p := NIL;
END Proc;
PROCEDURE Do* ();
BEGIN
Proc(Fun()(Obj));
END Do;
END Test.
the bug is not easy to find, thanks Ilya Ermakov report it. the fixup is simple.
luowy