This pr makes it possible to prevent that contracts in different threads to interfere with the same flag to know if a contract evaluation should be performed.
Instead of using a flag contained in the Sys instance, we are now using a new AST node which:
During compilation it will be transformed into an if with for condition the evaluation of a variable whose value is specific to each threat (in_assertion). Note we used the keyword __thread.
During the interpretation the node will be evaluated in the same way as an if (without anelse block) with for condition the value of the attribute in_assertion defined in the interpreter.
Note: When you evaluate a contract, the evaluation is performed in the same thread as the caller. (only the method will be executed in a new thread)
This pr makes it possible to prevent that contracts in different threads to interfere with the same flag to know if a contract evaluation should be performed.
Instead of using a flag contained in the
Sys
instance, we are now using a new AST node which:During compilation it will be transformed into an
if
with for condition the evaluation of a variable whose value is specific to each threat (in_assertion
). Note we used the keyword__thread
.During the interpretation the node will be evaluated in the same way as an
if
(without anelse
block) with for condition the value of the attributein_assertion
defined in the interpreter.Note: When you evaluate a contract, the evaluation is performed in the same thread as the caller. (only the method will be executed in a new thread)