HP may never point below its original value.
All words between the current HP and the original HP
are allocated to the heap.
-The heap may not grow into a part of memory that is already allocated
-for the stack.
+The heap may not grow into a part of memory that is already allocated.
When this is attempted, the STR instruction will cause a trap to occur.
+In this case, HP retains its old value.
.P
The only way to address the heap is indirectly.
Whenever an object is allocated by increasing HP,
procedure newhp(a:adr);
begin if (a>sp) or (a>maxdata+1) or (a mod wsize<>0)
- then trap(EHEAP); hp:=a
+ then trap(EHEAP)
+ else hp:=a
end;
function argc(a:double):sword;
procedure newhp(a:adr);
begin if (a>sp) or (a>maxdata+1) or (a mod wsize<>0)
- then trap(EHEAP); hp:=a
+ then trap(EHEAP)
+ else hp:=a
end;
function argc(a:double):sword;
9@EFUND@Undefined float
10@ECONV@Conversion error
16*@ESTACK@Stack overflow
-17*@EHEAP@Heap overflow
+17@EHEAP@Heap overflow
18*@EILLINS@Illegal instruction
19*@EODDZ@Illegal size argument
20*@ECASE@Case error