@@ -170,6 +170,7 @@ abstract class ASTVisitor
170170 /* * */ void visit(const AsmTypePrefix asmTypePrefix) { asmTypePrefix.accept(this ); }
171171 /* * */ void visit(const AsmUnaExp asmUnaExp) { asmUnaExp.accept(this ); }
172172 /* * */ void visit(const AsmXorExp asmXorExp) { asmXorExp.accept(this ); }
173+ /* * */ void visit(const AssertArguments assertArguments) { assertArguments.accept(this ); }
173174 /* * */ void visit(const AssertExpression assertExpression) { assertExpression.accept(this ); }
174175 /* * */ void visit(const AssignExpression assignExpression) { assignExpression.accept(this ); }
175176 /* * */ void visit(const AssocArrayLiteral assocArrayLiteral) { assocArrayLiteral.accept(this ); }
@@ -179,7 +180,6 @@ abstract class ASTVisitor
179180 /* * */ void visit(const AutoDeclaration autoDeclaration) { autoDeclaration.accept(this ); }
180181 /* * */ void visit(const AutoDeclarationPart autoDeclarationPart) { autoDeclarationPart.accept(this ); }
181182 /* * */ void visit(const BlockStatement blockStatement) { blockStatement.accept(this ); }
182- /* * */ void visit(const BodyStatement bodyStatement) { bodyStatement.accept(this ); }
183183 /* * */ void visit(const BreakStatement breakStatement) { breakStatement.accept(this ); }
184184 /* * */ void visit(const BaseClass baseClass) { baseClass.accept(this ); }
185185 /* * */ void visit(const BaseClassList baseClassList) { baseClassList.accept(this ); }
@@ -228,6 +228,7 @@ abstract class ASTVisitor
228228 /* * */ void visit(const FunctionAttribute functionAttribute) { functionAttribute.accept(this ); }
229229 /* * */ void visit(const FunctionBody functionBody) { functionBody.accept(this ); }
230230 /* * */ void visit(const FunctionCallExpression functionCallExpression) { functionCallExpression.accept(this ); }
231+ /* * */ void visit(const FunctionContract functionContract) { functionContract.accept(this ); }
231232 /* * */ void visit(const FunctionDeclaration functionDeclaration) { functionDeclaration.accept(this ); }
232233 /* * */ void visit(const FunctionLiteralExpression functionLiteralExpression) { functionLiteralExpression.accept(this ); }
233234 /* * */ void visit(const GotoStatement gotoStatement) { gotoStatement.accept(this ); }
@@ -242,7 +243,10 @@ abstract class ASTVisitor
242243 /* * */ void visit(const ImportDeclaration importDeclaration) { importDeclaration.accept(this ); }
243244 /* * */ void visit(const ImportExpression importExpression) { importExpression.accept(this ); }
244245 /* * */ void visit(const IndexExpression indexExpression) { indexExpression.accept(this ); }
246+ /* * */ void visit(const InContractExpression inContractExpression) { inContractExpression.accept(this ); }
245247 /* * */ void visit(const InExpression inExpression) { inExpression.accept(this ); }
248+ /* * */ void visit(const InOutContractExpression inOutContractExpression) { inOutContractExpression.accept(this ); }
249+ /* * */ void visit(const InOutStatement inOutStatement) { inOutStatement.accept(this ); }
246250 /* * */ void visit(const InStatement inStatement) { inStatement.accept(this ); }
247251 /* * */ void visit(const Initialize initialize) { initialize.accept(this ); }
248252 /* * */ void visit(const Initializer initializer) { initializer.accept(this ); }
@@ -255,6 +259,7 @@ abstract class ASTVisitor
255259 /* * */ void visit(const LastCatch lastCatch) { lastCatch.accept(this ); }
256260 /* * */ void visit(const LinkageAttribute linkageAttribute) { linkageAttribute.accept(this ); }
257261 /* * */ void visit(const MemberFunctionAttribute memberFunctionAttribute) { memberFunctionAttribute.accept(this ); }
262+ /* * */ void visit(const MissingFunctionBody missingFunctionBody) { missingFunctionBody.accept(this ); }
258263 /* * */ void visit(const MixinDeclaration mixinDeclaration) { mixinDeclaration.accept(this ); }
259264 /* * */ void visit(const MixinExpression mixinExpression) { mixinExpression.accept(this ); }
260265 /* * */ void visit(const MixinTemplateDeclaration mixinTemplateDeclaration) { mixinTemplateDeclaration.accept(this ); }
@@ -268,6 +273,7 @@ abstract class ASTVisitor
268273 /* * */ void visit(const Operands operands) { operands.accept(this ); }
269274 /* * */ void visit(const OrExpression orExpression) { orExpression.accept(this ); }
270275 /* * */ void visit(const OrOrExpression orOrExpression) { orOrExpression.accept(this ); }
276+ /* * */ void visit(const OutContractExpression outContractExpression) { outContractExpression.accept(this ); }
271277 /* * */ void visit(const OutStatement outStatement) { outStatement.accept(this ); }
272278 /* * */ void visit(const ParameterAttribute parameterAttribute) { parameterAttribute.accept(this ); }
273279 /* * */ void visit(const Parameter parameter) { parameter.accept(this ); }
@@ -287,6 +293,7 @@ abstract class ASTVisitor
287293 /* * */ void visit(const ShiftExpression shiftExpression) { shiftExpression.accept(this ); }
288294 /* * */ void visit(const SingleImport singleImport) { singleImport.accept(this ); }
289295 /* * */ void visit(const Index index) { index.accept(this ); }
296+ /* * */ void visit(const SpecifiedFunctionBody specifiedFunctionBody) { specifiedFunctionBody.accept(this ); }
290297 /* * */ void visit(const Statement statement) { statement.accept(this ); }
291298 /* * */ void visit(const StatementNoCaseNoDefault statementNoCaseNoDefault) { statementNoCaseNoDefault.accept(this ); }
292299 /* * */ void visit(const StaticAssertDeclaration staticAssertDeclaration) { staticAssertDeclaration.accept(this ); }
@@ -817,19 +824,30 @@ final class AsmXorExp : ExpressionNode
817824}
818825
819826// /
820- final class AssertExpression : ExpressionNode
827+ final class AssertArguments : ASTNode
821828{
822829 override void accept (ASTVisitor visitor) const
823830 {
824831 mixin (visitIfNotNull! (assertion, message));
825832 }
826- /* * */ size_t line;
827- /* * */ size_t column;
828833 /* * */ ExpressionNode assertion;
829834 /* * */ ExpressionNode message;
830835 mixin OpEquals;
831836}
832837
838+ // /
839+ final class AssertExpression : ExpressionNode
840+ {
841+ override void accept (ASTVisitor visitor) const
842+ {
843+ mixin (visitIfNotNull! (assertArguments));
844+ }
845+ /* * */ size_t line;
846+ /* * */ size_t column;
847+ /* * */ AssertArguments assertArguments;
848+ mixin OpEquals;
849+ }
850+
833851// /
834852final class AssignExpression : ExpressionNode
835853{
@@ -953,17 +971,6 @@ final class BlockStatement : ASTNode
953971 mixin OpEquals;
954972}
955973
956- // /
957- final class BodyStatement : ASTNode
958- {
959- override void accept (ASTVisitor visitor) const
960- {
961- mixin (visitIfNotNull! (blockStatement));
962- }
963- /* * */ BlockStatement blockStatement;
964- mixin OpEquals;
965- }
966-
967974// /
968975final class BreakStatement : ASTNode
969976{
@@ -1671,14 +1678,11 @@ final class FunctionBody : ASTNode
16711678{
16721679 override void accept (ASTVisitor visitor) const
16731680 {
1674- mixin (visitIfNotNull! (inStatements, outStatements, bodyStatement,
1675- blockStatement));
1681+ mixin (visitIfNotNull! (specifiedFunctionBody, missingFunctionBody));
16761682 }
16771683
1678- /* * */ BlockStatement blockStatement;
1679- /* * */ BodyStatement bodyStatement;
1680- /* * */ OutStatement[] outStatements;
1681- /* * */ InStatement[] inStatements;
1684+ /* * */ SpecifiedFunctionBody specifiedFunctionBody;
1685+ /* * */ MissingFunctionBody missingFunctionBody;
16821686 mixin OpEquals;
16831687}
16841688
@@ -1696,6 +1700,18 @@ final class FunctionCallExpression : ExpressionNode
16961700 mixin OpEquals;
16971701}
16981702
1703+ // /
1704+ final class FunctionContract : ASTNode
1705+ {
1706+ override void accept (ASTVisitor visitor) const
1707+ {
1708+ mixin (visitIfNotNull! (inOutContractExpression, inOutStatement));
1709+ }
1710+ /* * */ InOutContractExpression inOutContractExpression;
1711+ /* * */ InOutStatement inOutStatement;
1712+ mixin OpEquals;
1713+ }
1714+
16991715// /
17001716final class FunctionDeclaration : ASTNode
17011717{
@@ -1726,11 +1742,11 @@ final class FunctionLiteralExpression : ExpressionNode
17261742 override void accept (ASTVisitor visitor) const
17271743 {
17281744 mixin (visitIfNotNull! (returnType, parameters, functionAttributes,
1729- memberFunctionAttributes, functionBody , assignExpression));
1745+ memberFunctionAttributes, specifiedFunctionBody , assignExpression));
17301746 }
17311747 /* * */ ExpressionNode assignExpression;
17321748 /* * */ FunctionAttribute[] functionAttributes;
1733- /* * */ FunctionBody functionBody ;
1749+ /* * */ SpecifiedFunctionBody specifiedFunctionBody ;
17341750 /* * */ IdType functionOrDelegate;
17351751 /* * */ MemberFunctionAttribute[] memberFunctionAttributes;
17361752 /* * */ Parameters parameters;
@@ -1909,6 +1925,18 @@ final class IndexExpression : ExpressionNode
19091925 mixin OpEquals;
19101926}
19111927
1928+ // /
1929+ final class InContractExpression : ASTNode
1930+ {
1931+ override void accept (ASTVisitor visitor) const
1932+ {
1933+ mixin (visitIfNotNull! (assertArguments));
1934+ }
1935+ /* * */ size_t inTokenLocation;
1936+ /* * */ AssertArguments assertArguments;
1937+ mixin OpEquals;
1938+ }
1939+
19121940// /
19131941final class InExpression : ExpressionNode
19141942{
@@ -1921,6 +1949,30 @@ final class InExpression : ExpressionNode
19211949 mixin OpEquals;
19221950}
19231951
1952+ // /
1953+ final class InOutContractExpression : ASTNode
1954+ {
1955+ override void accept (ASTVisitor visitor) const
1956+ {
1957+ mixin (visitIfNotNull! (inContractExpression, outContractExpression));
1958+ }
1959+ /* * */ InContractExpression inContractExpression;
1960+ /* * */ OutContractExpression outContractExpression;
1961+ mixin OpEquals;
1962+ }
1963+
1964+ // /
1965+ final class InOutStatement : ASTNode
1966+ {
1967+ override void accept (ASTVisitor visitor) const
1968+ {
1969+ mixin (visitIfNotNull! (inStatement, outStatement));
1970+ }
1971+ /* * */ InStatement inStatement;
1972+ /* * */ OutStatement outStatement;
1973+ mixin OpEquals;
1974+ }
1975+
19241976// /
19251977final class InStatement : ASTNode
19261978{
@@ -1977,9 +2029,10 @@ final class Invariant : ASTNode
19772029{
19782030 override void accept (ASTVisitor visitor) const
19792031 {
1980- mixin (visitIfNotNull! (blockStatement));
2032+ mixin (visitIfNotNull! (blockStatement, assertArguments ));
19812033 }
19822034 /* * */ BlockStatement blockStatement;
2035+ /* * */ AssertArguments assertArguments;
19832036 /* * */ string comment;
19842037 size_t line;
19852038 size_t index;
@@ -2076,6 +2129,17 @@ final class MemberFunctionAttribute : ASTNode
20762129 mixin OpEquals;
20772130}
20782131
2132+ // /
2133+ final class MissingFunctionBody : ASTNode
2134+ {
2135+ override void accept (ASTVisitor visitor) const
2136+ {
2137+ mixin (visitIfNotNull! (functionContracts));
2138+ }
2139+ /* * */ FunctionContract[] functionContracts;
2140+ mixin OpEquals;
2141+ }
2142+
20792143// /
20802144final class MixinDeclaration : ASTNode
20812145{
@@ -2288,6 +2352,19 @@ final class OrOrExpression : ExpressionNode
22882352 mixin OpEquals;
22892353}
22902354
2355+ // /
2356+ final class OutContractExpression : ASTNode
2357+ {
2358+ override void accept (ASTVisitor visitor) const
2359+ {
2360+ mixin (visitIfNotNull! (parameter, assertArguments));
2361+ }
2362+ /* * */ size_t outTokenLocation;
2363+ /* * */ Token parameter;
2364+ /* * */ AssertArguments assertArguments;
2365+ mixin OpEquals;
2366+ }
2367+
22912368// /
22922369final class OutStatement : ASTNode
22932370{
@@ -2542,6 +2619,18 @@ final class SingleImport : ASTNode
25422619 mixin OpEquals;
25432620}
25442621
2622+ // /
2623+ final class SpecifiedFunctionBody : ASTNode
2624+ {
2625+ override void accept (ASTVisitor visitor) const
2626+ {
2627+ mixin (visitIfNotNull! (functionContracts, blockStatement));
2628+ }
2629+ /* * */ FunctionContract[] functionContracts;
2630+ /* * */ BlockStatement blockStatement;
2631+ mixin OpEquals;
2632+ }
2633+
25452634// /
25462635final class Statement : ASTNode
25472636{
0 commit comments