Skip to content

Commit d7c2af5

Browse files
committed
deleting intermediate function in Statement and YulStatement
1 parent e32881f commit d7c2af5

2 files changed

Lines changed: 46 additions & 61 deletions

File tree

src/slang-nodes/Statement.ts

Lines changed: 25 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import * as ast from '@nomicfoundation/slang/ast';
1+
import * as slangAst from '@nomicfoundation/slang/ast';
22
import { NonterminalKind } from '@nomicfoundation/slang/cst';
33
import { createNonterminalVariantSimpleCreator } from '../slang-utils/create-nonterminal-variant-creator.js';
44
import { SlangNode } from './SlangNode.js';
@@ -24,40 +24,28 @@ import type { ParserOptions } from 'prettier';
2424
import type { CollectedMetadata } from '../types.d.ts';
2525
import type { AstNode } from './types.d.ts';
2626

27-
const createNonterminalVariantInternal = createNonterminalVariantSimpleCreator<
28-
ast.Statement,
27+
const createNonterminalVariant = createNonterminalVariantSimpleCreator<
28+
slangAst.Statement,
2929
Statement
3030
>([
31-
[ast.ExpressionStatement, ExpressionStatement],
32-
[ast.VariableDeclarationStatement, VariableDeclarationStatement],
33-
[ast.TupleDeconstructionStatement, TupleDeconstructionStatement],
34-
[ast.IfStatement, IfStatement],
35-
[ast.ForStatement, ForStatement],
36-
[ast.WhileStatement, WhileStatement],
37-
[ast.DoWhileStatement, DoWhileStatement],
38-
[ast.ContinueStatement, ContinueStatement],
39-
[ast.BreakStatement, BreakStatement],
40-
[ast.ReturnStatement, ReturnStatement],
41-
[ast.ThrowStatement, ThrowStatement],
42-
[ast.EmitStatement, EmitStatement],
43-
[ast.TryStatement, TryStatement],
44-
[ast.RevertStatement, RevertStatement],
45-
[ast.AssemblyStatement, AssemblyStatement],
46-
[ast.UncheckedBlock, UncheckedBlock]
31+
[slangAst.ExpressionStatement, ExpressionStatement],
32+
[slangAst.VariableDeclarationStatement, VariableDeclarationStatement],
33+
[slangAst.TupleDeconstructionStatement, TupleDeconstructionStatement],
34+
[slangAst.IfStatement, IfStatement],
35+
[slangAst.ForStatement, ForStatement],
36+
[slangAst.WhileStatement, WhileStatement],
37+
[slangAst.DoWhileStatement, DoWhileStatement],
38+
[slangAst.ContinueStatement, ContinueStatement],
39+
[slangAst.BreakStatement, BreakStatement],
40+
[slangAst.ReturnStatement, ReturnStatement],
41+
[slangAst.ThrowStatement, ThrowStatement],
42+
[slangAst.EmitStatement, EmitStatement],
43+
[slangAst.TryStatement, TryStatement],
44+
[slangAst.RevertStatement, RevertStatement],
45+
[slangAst.AssemblyStatement, AssemblyStatement],
46+
[slangAst.UncheckedBlock, UncheckedBlock]
4747
]);
4848

49-
function createNonterminalVariant(
50-
variant: ast.Statement['variant'],
51-
collected: CollectedMetadata,
52-
options: ParserOptions<AstNode>
53-
): Statement['variant'] {
54-
if (variant instanceof ast.Block) {
55-
return new Block(variant, collected, options);
56-
}
57-
58-
return createNonterminalVariantInternal(variant, collected, options);
59-
}
60-
6149
export class Statement extends SlangNode {
6250
readonly kind = NonterminalKind.Statement;
6351

@@ -81,13 +69,17 @@ export class Statement extends SlangNode {
8169
| UncheckedBlock;
8270

8371
constructor(
84-
ast: ast.Statement,
72+
ast: slangAst.Statement,
8573
collected: CollectedMetadata,
8674
options: ParserOptions<AstNode>
8775
) {
8876
super(ast, collected);
8977

90-
this.variant = createNonterminalVariant(ast.variant, collected, options);
78+
const variant = ast.variant;
79+
this.variant =
80+
variant instanceof slangAst.Block
81+
? new Block(variant, collected, options)
82+
: createNonterminalVariant(variant, collected, options);
9183

9284
this.updateMetadata(this.variant);
9385
}

src/slang-nodes/YulStatement.ts

Lines changed: 21 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import * as ast from '@nomicfoundation/slang/ast';
1+
import * as slangAst from '@nomicfoundation/slang/ast';
22
import { NonterminalKind } from '@nomicfoundation/slang/cst';
33
import { createNonterminalVariantCreator } from '../slang-utils/create-nonterminal-variant-creator.js';
44
import { SlangNode } from './SlangNode.js';
@@ -20,37 +20,26 @@ import type { ParserOptions } from 'prettier';
2020
import type { CollectedMetadata } from '../types.d.ts';
2121
import type { AstNode } from './types.d.ts';
2222

23-
const createNonterminalVariantInternal = createNonterminalVariantCreator<
24-
ast.YulStatement,
23+
const createNonterminalVariant = createNonterminalVariantCreator<
24+
slangAst.YulStatement,
2525
YulStatement
2626
>(
2727
[
28-
[ast.YulFunctionDefinition, YulFunctionDefinition],
29-
[ast.YulVariableDeclarationStatement, YulVariableDeclarationStatement],
30-
[ast.YulVariableAssignmentStatement, YulVariableAssignmentStatement],
31-
[ast.YulStackAssignmentStatement, YulStackAssignmentStatement],
32-
[ast.YulIfStatement, YulIfStatement],
33-
[ast.YulForStatement, YulForStatement],
34-
[ast.YulSwitchStatement, YulSwitchStatement],
35-
[ast.YulLeaveStatement, YulLeaveStatement],
36-
[ast.YulBreakStatement, YulBreakStatement],
37-
[ast.YulContinueStatement, YulContinueStatement],
38-
[ast.YulLabel, YulLabel]
28+
[slangAst.YulFunctionDefinition, YulFunctionDefinition],
29+
[slangAst.YulVariableDeclarationStatement, YulVariableDeclarationStatement],
30+
[slangAst.YulVariableAssignmentStatement, YulVariableAssignmentStatement],
31+
[slangAst.YulStackAssignmentStatement, YulStackAssignmentStatement],
32+
[slangAst.YulIfStatement, YulIfStatement],
33+
[slangAst.YulForStatement, YulForStatement],
34+
[slangAst.YulSwitchStatement, YulSwitchStatement],
35+
[slangAst.YulLeaveStatement, YulLeaveStatement],
36+
[slangAst.YulBreakStatement, YulBreakStatement],
37+
[slangAst.YulContinueStatement, YulContinueStatement],
38+
[slangAst.YulLabel, YulLabel]
3939
],
40-
[[ast.YulExpression, YulExpression]]
40+
[[slangAst.YulExpression, YulExpression]]
4141
);
4242

43-
function createNonterminalVariant(
44-
variant: ast.YulStatement['variant'],
45-
collected: CollectedMetadata,
46-
options: ParserOptions<AstNode>
47-
): YulStatement['variant'] {
48-
if (variant instanceof ast.YulBlock) {
49-
return new YulBlock(variant, collected, options);
50-
}
51-
return createNonterminalVariantInternal(variant, collected, options);
52-
}
53-
5443
export class YulStatement extends SlangNode {
5544
readonly kind = NonterminalKind.YulStatement;
5645

@@ -70,13 +59,17 @@ export class YulStatement extends SlangNode {
7059
| YulExpression['variant'];
7160

7261
constructor(
73-
ast: ast.YulStatement,
62+
ast: slangAst.YulStatement,
7463
collected: CollectedMetadata,
7564
options: ParserOptions<AstNode>
7665
) {
7766
super(ast, collected);
7867

79-
this.variant = createNonterminalVariant(ast.variant, collected, options);
68+
const variant = ast.variant;
69+
this.variant =
70+
variant instanceof slangAst.YulBlock
71+
? new YulBlock(variant, collected, options)
72+
: createNonterminalVariant(variant, collected, options);
8073

8174
this.updateMetadata(this.variant);
8275
}

0 commit comments

Comments
 (0)