Skip to content

Commit b1f3c77

Browse files
committed
Add basic support for do-while statements
1 parent 62381ec commit b1f3c77

File tree

8 files changed

+103
-11
lines changed

8 files changed

+103
-11
lines changed

Foo.sol

Lines changed: 0 additions & 5 deletions
This file was deleted.

__tests__/nodes/__snapshots__/index.test.js.snap

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ Array [
2121
"ContinueStatement",
2222
"ContractDefinition",
2323
"DecimalNumber",
24+
"DoWhileStatement",
2425
"ElementaryTypeName",
2526
"EmitStatement",
2627
"EnumDefinition",

scripts/__snapshots__/makeData.test.js.snap

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,5 @@ exports[`makeData to match snapshot for nodes 1`] = `
1313
1414
/* eslint-disable global-require */
1515
16-
module.exports = {ArrayTypeName:require('./ArrayTypeName.js'),AssemblyAssignment:require('./AssemblyAssignment.js'),AssemblyBlock:require('./AssemblyBlock.js'),AssemblyCall:require('./AssemblyCall.js'),AssemblyCase:require('./AssemblyCase.js'),AssemblyFor:require('./AssemblyFor.js'),AssemblyFunctionDefinition:require('./AssemblyFunctionDefinition.js'),AssemblyIf:require('./AssemblyIf.js'),AssemblyLocalDefinition:require('./AssemblyLocalDefinition.js'),AssemblySwitch:require('./AssemblySwitch.js'),BinaryOperation:require('./BinaryOperation.js'),Block:require('./Block.js'),BooleanLiteral:require('./BooleanLiteral.js'),BreakStatement:require('./BreakStatement.js'),CatchClause:require('./CatchClause.js'),Conditional:require('./Conditional.js'),ContinueStatement:require('./ContinueStatement.js'),ContractDefinition:require('./ContractDefinition.js'),DecimalNumber:require('./DecimalNumber.js'),ElementaryTypeName:require('./ElementaryTypeName.js'),EmitStatement:require('./EmitStatement.js'),EnumDefinition:require('./EnumDefinition.js'),EnumValue:require('./EnumValue.js'),EventDefinition:require('./EventDefinition.js'),ExpressionStatement:require('./ExpressionStatement.js'),ForStatement:require('./ForStatement.js'),FunctionCall:require('./FunctionCall.js'),FunctionDefinition:require('./FunctionDefinition.js'),FunctionTypeName:require('./FunctionTypeName.js'),HexLiteral:require('./HexLiteral.js'),HexNumber:require('./HexNumber.js'),Identifier:require('./Identifier.js'),IfStatement:require('./IfStatement.js'),ImportDirective:require('./ImportDirective.js'),IndexAccess:require('./IndexAccess.js'),InheritanceSpecifier:require('./InheritanceSpecifier.js'),InlineAssemblyStatement:require('./InlineAssemblyStatement.js'),LabelDefinition:require('./LabelDefinition.js'),Mapping:require('./Mapping.js'),MemberAccess:require('./MemberAccess.js'),ModifierDefinition:require('./ModifierDefinition.js'),ModifierInvocation:require('./ModifierInvocation.js'),NewExpression:require('./NewExpression.js'),NumberLiteral:require('./NumberLiteral.js'),PragmaDirective:require('./PragmaDirective.js'),ReturnStatement:require('./ReturnStatement.js'),SourceUnit:require('./SourceUnit.js'),StateVariableDeclaration:require('./StateVariableDeclaration.js'),StringLiteral:require('./StringLiteral.js'),StructDefinition:require('./StructDefinition.js'),ThrowStatement:require('./ThrowStatement.js'),TryStatement:require('./TryStatement.js'),TupleExpression:require('./TupleExpression.js'),TypeNameExpression:require('./TypeNameExpression.js'),UnaryOperation:require('./UnaryOperation.js'),UserDefinedTypeName:require('./UserDefinedTypeName.js'),UsingForDeclaration:require('./UsingForDeclaration.js'),VariableDeclaration:require('./VariableDeclaration.js'),VariableDeclarationStatement:require('./VariableDeclarationStatement.js'),WhileStatement:require('./WhileStatement.js')};"
16+
module.exports = {ArrayTypeName:require('./ArrayTypeName.js'),AssemblyAssignment:require('./AssemblyAssignment.js'),AssemblyBlock:require('./AssemblyBlock.js'),AssemblyCall:require('./AssemblyCall.js'),AssemblyCase:require('./AssemblyCase.js'),AssemblyFor:require('./AssemblyFor.js'),AssemblyFunctionDefinition:require('./AssemblyFunctionDefinition.js'),AssemblyIf:require('./AssemblyIf.js'),AssemblyLocalDefinition:require('./AssemblyLocalDefinition.js'),AssemblySwitch:require('./AssemblySwitch.js'),BinaryOperation:require('./BinaryOperation.js'),Block:require('./Block.js'),BooleanLiteral:require('./BooleanLiteral.js'),BreakStatement:require('./BreakStatement.js'),CatchClause:require('./CatchClause.js'),Conditional:require('./Conditional.js'),ContinueStatement:require('./ContinueStatement.js'),ContractDefinition:require('./ContractDefinition.js'),DecimalNumber:require('./DecimalNumber.js'),DoWhileStatement:require('./DoWhileStatement.js'),ElementaryTypeName:require('./ElementaryTypeName.js'),EmitStatement:require('./EmitStatement.js'),EnumDefinition:require('./EnumDefinition.js'),EnumValue:require('./EnumValue.js'),EventDefinition:require('./EventDefinition.js'),ExpressionStatement:require('./ExpressionStatement.js'),ForStatement:require('./ForStatement.js'),FunctionCall:require('./FunctionCall.js'),FunctionDefinition:require('./FunctionDefinition.js'),FunctionTypeName:require('./FunctionTypeName.js'),HexLiteral:require('./HexLiteral.js'),HexNumber:require('./HexNumber.js'),Identifier:require('./Identifier.js'),IfStatement:require('./IfStatement.js'),ImportDirective:require('./ImportDirective.js'),IndexAccess:require('./IndexAccess.js'),InheritanceSpecifier:require('./InheritanceSpecifier.js'),InlineAssemblyStatement:require('./InlineAssemblyStatement.js'),LabelDefinition:require('./LabelDefinition.js'),Mapping:require('./Mapping.js'),MemberAccess:require('./MemberAccess.js'),ModifierDefinition:require('./ModifierDefinition.js'),ModifierInvocation:require('./ModifierInvocation.js'),NewExpression:require('./NewExpression.js'),NumberLiteral:require('./NumberLiteral.js'),PragmaDirective:require('./PragmaDirective.js'),ReturnStatement:require('./ReturnStatement.js'),SourceUnit:require('./SourceUnit.js'),StateVariableDeclaration:require('./StateVariableDeclaration.js'),StringLiteral:require('./StringLiteral.js'),StructDefinition:require('./StructDefinition.js'),ThrowStatement:require('./ThrowStatement.js'),TryStatement:require('./TryStatement.js'),TupleExpression:require('./TupleExpression.js'),TypeNameExpression:require('./TypeNameExpression.js'),UnaryOperation:require('./UnaryOperation.js'),UserDefinedTypeName:require('./UserDefinedTypeName.js'),UsingForDeclaration:require('./UsingForDeclaration.js'),VariableDeclaration:require('./VariableDeclaration.js'),VariableDeclarationStatement:require('./VariableDeclarationStatement.js'),WhileStatement:require('./WhileStatement.js')};"
1717
`;

src/binary-operator-printers/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* This file was automatically generated on 1581640762.478 */
1+
/* This file was automatically generated on 1581775642.955 */
22

33
/* eslint-disable global-require */
44

src/nodes/DoWhileStatement.js

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
const {
2+
doc: {
3+
builders: { concat, group, indent, line, softline }
4+
}
5+
} = require('prettier/standalone');
6+
7+
const printBody = (node, path, print) => {
8+
if (node.body.type === 'Block') {
9+
return concat([' ', path.call(print, 'body')]);
10+
}
11+
12+
return group(indent(concat([line, path.call(print, 'body')])));
13+
};
14+
15+
const DoWhileStatement = {
16+
print: ({ node, path, print }) =>
17+
concat([
18+
'do',
19+
printBody(node, path, print),
20+
' while (',
21+
group(
22+
concat([
23+
indent(concat([softline, path.call(print, 'condition')])),
24+
softline
25+
])
26+
),
27+
');'
28+
])
29+
};
30+
31+
module.exports = DoWhileStatement;

src/nodes/index.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* This file was automatically generated on 1581640762.434 */
1+
/* This file was automatically generated on 1581775642.911 */
22

33
/* eslint-disable global-require */
44

@@ -22,6 +22,7 @@ module.exports = {
2222
ContinueStatement: require('./ContinueStatement.js'),
2323
ContractDefinition: require('./ContractDefinition.js'),
2424
DecimalNumber: require('./DecimalNumber.js'),
25+
DoWhileStatement: require('./DoWhileStatement.js'),
2526
ElementaryTypeName: require('./ElementaryTypeName.js'),
2627
EmitStatement: require('./EmitStatement.js'),
2728
EnumDefinition: require('./EnumDefinition.js'),

tests/WhileStatements/WhileStatements.sol

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
contract WhileStatements {
22
uint constant LONG_VARIABLE = 1;
33

4-
function hi() public {
4+
function whileStatements() public {
55
uint a;
66
uint veryLongVariableName;
77

@@ -17,4 +17,21 @@ contract WhileStatements {
1717

1818
while (a < veryLongVariableName.add(LONG_VARIABLE).add(LONG_VARIABLE) * 600) { a++; }
1919
}
20+
21+
function doWhileStatements() public {
22+
uint a;
23+
uint veryLongVariableName;
24+
25+
do a++; while (a < 100);
26+
27+
do a = a.add(LONG_VARIABLE).add(LONG_VARIABLE).add(LONG_VARIABLE); while (a < 200);
28+
29+
do { a++; }while (a < 300);
30+
31+
do { a = a.add(LONG_VARIABLE).add(LONG_VARIABLE).add(LONG_VARIABLE); }while (a < 400);
32+
33+
do a++;while (a < veryLongVariableName.add(LONG_VARIABLE).add(LONG_VARIABLE) * 500);
34+
35+
do { a++; }while (a < veryLongVariableName.add(LONG_VARIABLE).add(LONG_VARIABLE) * 600);
36+
}
2037
}

tests/WhileStatements/__snapshots__/jsfmt.spec.js.snap

Lines changed: 49 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ exports[`WhileStatements.sol 1`] = `
44
contract WhileStatements {
55
uint constant LONG_VARIABLE = 1;
66
7-
function hi() public {
7+
function whileStatements() public {
88
uint a;
99
uint veryLongVariableName;
1010
@@ -20,12 +20,29 @@ contract WhileStatements {
2020
2121
while (a < veryLongVariableName.add(LONG_VARIABLE).add(LONG_VARIABLE) * 600) { a++; }
2222
}
23+
24+
function doWhileStatements() public {
25+
uint a;
26+
uint veryLongVariableName;
27+
28+
do a++; while (a < 100);
29+
30+
do a = a.add(LONG_VARIABLE).add(LONG_VARIABLE).add(LONG_VARIABLE); while (a < 200);
31+
32+
do { a++; }while (a < 300);
33+
34+
do { a = a.add(LONG_VARIABLE).add(LONG_VARIABLE).add(LONG_VARIABLE); }while (a < 400);
35+
36+
do a++;while (a < veryLongVariableName.add(LONG_VARIABLE).add(LONG_VARIABLE) * 500);
37+
38+
do { a++; }while (a < veryLongVariableName.add(LONG_VARIABLE).add(LONG_VARIABLE) * 600);
39+
}
2340
}
2441
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2542
contract WhileStatements {
2643
uint256 constant LONG_VARIABLE = 1;
2744
28-
function hi() public {
45+
function whileStatements() public {
2946
uint256 a;
3047
uint256 veryLongVariableName;
3148
@@ -52,6 +69,36 @@ contract WhileStatements {
5269
a++;
5370
}
5471
}
72+
73+
function doWhileStatements() public {
74+
uint256 a;
75+
uint256 veryLongVariableName;
76+
77+
do a++; while (a < 100);
78+
79+
do
80+
a = a.add(LONG_VARIABLE).add(LONG_VARIABLE).add(
81+
LONG_VARIABLE
82+
); while (a < 200);
83+
84+
do {
85+
a++;
86+
} while (a < 300);
87+
88+
do {
89+
a = a.add(LONG_VARIABLE).add(LONG_VARIABLE).add(LONG_VARIABLE);
90+
} while (a < 400);
91+
92+
do a++; while (
93+
a < veryLongVariableName.add(LONG_VARIABLE).add(LONG_VARIABLE) * 500
94+
);
95+
96+
do {
97+
a++;
98+
} while (
99+
a < veryLongVariableName.add(LONG_VARIABLE).add(LONG_VARIABLE) * 600
100+
);
101+
}
55102
}
56103
57104
`;

0 commit comments

Comments
 (0)