Skip to content

Commit a56ba8b

Browse files
authored
Add support for unchecked blocks (#416)
* Upgrade parser * Add support for unchecked blocks * Run prettier * Rename exported function
1 parent 9d65f35 commit a56ba8b

File tree

9 files changed

+46
-7
lines changed

9 files changed

+46
-7
lines changed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ Array [
6363
"TupleExpression",
6464
"TypeNameExpression",
6565
"UnaryOperation",
66+
"UncheckedStatement",
6667
"UserDefinedTypeName",
6768
"UsingForDeclaration",
6869
"VariableDeclaration",

package-lock.json

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@
7171
"jest-watch-typeahead": "^0.6.0"
7272
},
7373
"dependencies": {
74-
"@solidity-parser/parser": "^0.10.1",
74+
"@solidity-parser/parser": "^0.11.0",
7575
"dir-to-object": "^2.0.0",
7676
"emoji-regex": "^9.0.0",
7777
"escape-string-regexp": "^4.0.0",

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'),AssemblyMemberAccess:require('./AssemblyMemberAccess.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'),FileLevelConstant:require('./FileLevelConstant.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'),IndexRangeAccess:require('./IndexRangeAccess.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'),NameValueExpression:require('./NameValueExpression.js'),NameValueList:require('./NameValueList.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'),AssemblyMemberAccess:require('./AssemblyMemberAccess.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'),FileLevelConstant:require('./FileLevelConstant.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'),IndexRangeAccess:require('./IndexRangeAccess.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'),NameValueExpression:require('./NameValueExpression.js'),NameValueList:require('./NameValueList.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'),UncheckedStatement:require('./UncheckedStatement.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 1604800512.225 */
1+
/* This file was automatically generated on 1609182476.865 */
22

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

src/nodes/UncheckedStatement.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
const {
2+
doc: {
3+
builders: { concat }
4+
}
5+
} = require('prettier/standalone');
6+
7+
const UncheckedStatement = {
8+
print: ({ path, print }) => concat(['unchecked ', path.call(print, 'block')])
9+
};
10+
11+
module.exports = UncheckedStatement;

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 1604800512.152 */
1+
/* This file was automatically generated on 1609182476.784 */
22

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

@@ -64,6 +64,7 @@ module.exports = {
6464
TupleExpression: require('./TupleExpression.js'),
6565
TypeNameExpression: require('./TypeNameExpression.js'),
6666
UnaryOperation: require('./UnaryOperation.js'),
67+
UncheckedStatement: require('./UncheckedStatement.js'),
6768
UserDefinedTypeName: require('./UserDefinedTypeName.js'),
6869
UsingForDeclaration: require('./UsingForDeclaration.js'),
6970
VariableDeclaration: require('./VariableDeclaration.js'),

tests/AllSolidityFeatures/AllSolidityFeatures.sol

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -513,3 +513,11 @@ contract AnonymousEvent {
513513

514514
uint constant MULTIPLIER =
515515
2**EXPONENT;
516+
517+
contract WithUncheckedBlock {
518+
function f() public pure returns (uint) {
519+
uint x = 0;
520+
unchecked { x--; }
521+
return x;
522+
}
523+
}

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

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -516,6 +516,14 @@ contract AnonymousEvent {
516516
517517
uint constant MULTIPLIER =
518518
2**EXPONENT;
519+
520+
contract WithUncheckedBlock {
521+
function f() public pure returns (uint) {
522+
uint x = 0;
523+
unchecked { x--; }
524+
return x;
525+
}
526+
}
519527
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
520528
// Examples taken from the Solidity documentation online.
521529
@@ -1082,4 +1090,14 @@ contract AnonymousEvent {
10821090
10831091
uint256 constant MULTIPLIER = 2**EXPONENT;
10841092
1093+
contract WithUncheckedBlock {
1094+
function f() public pure returns (uint256) {
1095+
uint256 x = 0;
1096+
unchecked {
1097+
x--;
1098+
}
1099+
return x;
1100+
}
1101+
}
1102+
10851103
`;

0 commit comments

Comments
 (0)