Stack: Difference between revisions

Content deleted Content added
Added attribution
Cleaned up push and pop by removing the need for make-node
Line 625: Line 625:
01 node-info PICTURE X(10).
01 node-info PICTURE X(10).
PROCEDURE DIVISION USING stack node-info.
PROCEDURE DIVISION USING stack node-info.
CALL "make-node" USING
ALLOCATE node
BY CONTENT node-info
BY REFERENCE ADDRESS OF node
END-CALL
CALL "pointerp" USING
CALL "pointerp" USING
BY REFERENCE ADDRESS OF node
BY REFERENCE ADDRESS OF node
Line 636: Line 633:
CALL "stack-overflow-error" END-CALL
CALL "stack-overflow-error" END-CALL
ELSE
ELSE
MOVE node-info TO info OF node
SET link OF node TO head OF stack
SET link OF node TO head OF stack
SET head OF stack TO ADDRESS OF node
SET head OF stack TO ADDRESS OF node
Line 660: Line 658:
ELSE
ELSE
SET ADDRESS OF node TO head OF stack
SET ADDRESS OF node TO head OF stack
SET head OF stack TO link OF node
MOVE info OF node TO node-info
MOVE info OF node TO node-info
SET head OF stack TO link OF node
FREE ADDRESS OF node
END-IF
END-IF
FREE ADDRESS OF node
GOBACK.
GOBACK.
END PROGRAM pop.
END PROGRAM pop.
Line 720: Line 718:
GOBACK.
GOBACK.
END PROGRAM peek.
END PROGRAM peek.

IDENTIFICATION DIVISION.
PROGRAM-ID. make-node.
DATA DIVISION.
LOCAL-STORAGE SECTION.
COPY p.
COPY node.
LINKAGE SECTION.
01 node-info PICTURE X(10).
01 node-pointer USAGE IS POINTER.
PROCEDURE DIVISION USING node-info node-pointer.
ALLOCATE node
CALL "pointerp" USING
BY REFERENCE ADDRESS OF node
BY REFERENCE p
END-CALL
IF nil
CALL "stack-overflow-error" END-CALL
ELSE
MOVE node-info TO info OF node
SET node-pointer TO ADDRESS OF node
END-IF
GOBACK.
END PROGRAM make-node.


IDENTIFICATION DIVISION.
IDENTIFICATION DIVISION.