This function implements the core logic of the semantic evaluation.
A node in the syntax tree may be revisited several times,
as it may have dependencies which have to be resolved first.
Every node has a state variable and depending on it
its analysis is deferred, stopped or finished.
1. If the node is already done or has an error the function returns.
2. Otherwise every sub-node is visited.
3. The evaluation stops prematurely if one of the sub-nodes has an error.
4. When all sub-nodes are done, the node itself can be finished.
This function implements the core logic of the semantic evaluation.
A node in the syntax tree may be revisited several times, as it may have dependencies which have to be resolved first. Every node has a state variable and depending on it its analysis is deferred, stopped or finished.
1. If the node is already done or has an error the function returns. 2. Otherwise every sub-node is visited. 3. The evaluation stops prematurely if one of the sub-nodes has an error. 4. When all sub-nodes are done, the node itself can be finished.