aboutsummaryrefslogtreecommitdiffstats
path: root/libsolidity/formal
diff options
context:
space:
mode:
authorRhett Aultman <roadriverrail@gmail.com>2016-07-30 15:13:05 +0800
committerRhett Aultman <roadriverrail@gmail.com>2016-11-10 23:07:25 +0800
commit4524ad08701939cc22d28494c57dda1cdfba9e10 (patch)
tree70ff8928bf6a84f50e2ca54d355be81db01e7bcd /libsolidity/formal
parentdc8a5f4ef5505f2aeb017dfa4c9aca77a9fd93aa (diff)
downloaddexon-solidity-4524ad08701939cc22d28494c57dda1cdfba9e10.tar.gz
dexon-solidity-4524ad08701939cc22d28494c57dda1cdfba9e10.tar.zst
dexon-solidity-4524ad08701939cc22d28494c57dda1cdfba9e10.zip
Add support for do/while loops
This commit adds support for a standard do <statement> while <expr>; form of statement. While loops were already being supported; supporting a do/while loop mostly involves reusing code from while loops but putting the conditional checking last.
Diffstat (limited to 'libsolidity/formal')
-rw-r--r--libsolidity/formal/Why3Translator.cpp10
1 files changed, 10 insertions, 0 deletions
diff --git a/libsolidity/formal/Why3Translator.cpp b/libsolidity/formal/Why3Translator.cpp
index 813fa3ab..5934d593 100644
--- a/libsolidity/formal/Why3Translator.cpp
+++ b/libsolidity/formal/Why3Translator.cpp
@@ -410,6 +410,16 @@ bool Why3Translator::visit(WhileStatement const& _node)
{
addSourceFromDocStrings(_node.annotation());
+ // Why3 does not appear to support do-while loops,
+ // so we will simulate them by performing a while
+ // loop with the body prepended once.
+
+ if (_node.isDoWhile())
+ {
+ visitIndentedUnlessBlock(_node.body());
+ newLine();
+ }
+
add("while ");
_node.condition().accept(*this);
newLine();