In reply to sharatk:
Functions aren’t called before all constraints are solved, but before the relevant constraints are solved.
In your case, the function creates an implicit solve y before x. This means constraint D will be solved first to yield a value of y. Afterwards, F will be called with the value of y obtained from the previous step. Then, constraint C will be solved to yield x.