RX0029

Domain: Engine

Error message

the ExecHeap was offered the kind the inert answer derives: %s

In the message, %s marks a value that the engine fills in when it raises the error.

The story

This is the mirror image of an earlier refusal. Last time, something that does work tried to live among plain values. This time, a plain value tried to move into the house of the workers, the ExecHeap, and the door said no. The ExecHeap admits every kind except the inert one. A noun, a simple value, is the one thing that does not belong there. The engine decides this the same way as before, by asking the one question again: does executing it produce a value? It does not just recognize a word, and that is the point. Both homes rest on one criterion, so they can never disagree with each other. It is a runtime check, because the kind is read from trinity.feml at birth, and no compiler can know what kind a given pointer holds. Before this refusal existed, the rule that a value never sits in the ExecHeap was enforced only by absence, because nothing was there to be wrong. Now that the population exists, the rule has teeth. The message names the kind offered. The fix: give values to the DataHeap, and keep the ExecHeap for execution.

Text from the Rush engine's error catalogue.