Skip to content

Commit 6527066

Browse files
committed
removing YulAssignmentOperator, YulLiteral, YulStackAssignmentOperator, and YulSwitchCase from the AST tree
1 parent badb2cf commit 6527066

11 files changed

Lines changed: 43 additions & 33 deletions

src/slang-nodes/YulAssignmentOperator.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@ import {
22
NonterminalKind,
33
TerminalNode as SlangTerminalNode
44
} from '@nomicfoundation/slang/cst';
5-
import { PolymorphicNode } from './PolymorphicNode.js';
5+
import { SlangNode } from './SlangNode.js';
66
import { YulColonAndEqual } from './YulColonAndEqual.js';
77
import { TerminalNode } from './TerminalNode.js';
88

99
import type * as ast from '@nomicfoundation/slang/ast';
1010

11-
export class YulAssignmentOperator extends PolymorphicNode {
11+
export class YulAssignmentOperator extends SlangNode {
1212
readonly kind = NonterminalKind.YulAssignmentOperator;
1313

1414
variant: YulColonAndEqual | TerminalNode;

src/slang-nodes/YulExpression.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import * as ast from '@nomicfoundation/slang/ast';
22
import { NonterminalKind } from '@nomicfoundation/slang/cst';
3+
import { extractVariant } from '../slang-utils/extract-variant.js';
34
import { PolymorphicNode } from './PolymorphicNode.js';
45
import { YulFunctionCallExpression } from './YulFunctionCallExpression.js';
56
import { YulLiteral } from './YulLiteral.js';
@@ -16,7 +17,7 @@ function createNonterminalVariant(
1617
return new YulFunctionCallExpression(variant, options);
1718
}
1819
if (variant instanceof ast.YulLiteral) {
19-
return new YulLiteral(variant, options);
20+
return extractVariant(new YulLiteral(variant, options));
2021
}
2122
if (variant instanceof ast.YulPath) {
2223
return new YulPath(variant);
@@ -28,7 +29,7 @@ function createNonterminalVariant(
2829
export class YulExpression extends PolymorphicNode {
2930
readonly kind = NonterminalKind.YulExpression;
3031

31-
variant: YulFunctionCallExpression | YulLiteral | YulPath;
32+
variant: YulFunctionCallExpression | YulLiteral['variant'] | YulPath;
3233

3334
constructor(ast: ast.YulExpression, options: ParserOptions<AstNode>) {
3435
super(ast);

src/slang-nodes/YulLiteral.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import {
33
NonterminalKind,
44
TerminalNode as SlangTerminalNode
55
} from '@nomicfoundation/slang/cst';
6-
import { PolymorphicNode } from './PolymorphicNode.js';
6+
import { SlangNode } from './SlangNode.js';
77
import { HexStringLiteral } from './HexStringLiteral.js';
88
import { StringLiteral } from './StringLiteral.js';
99
import { TerminalNode } from './TerminalNode.js';
@@ -25,7 +25,7 @@ function createNonterminalVariant(
2525
return exhaustiveCheck;
2626
}
2727

28-
export class YulLiteral extends PolymorphicNode {
28+
export class YulLiteral extends SlangNode {
2929
readonly kind = NonterminalKind.YulLiteral;
3030

3131
variant: HexStringLiteral | StringLiteral | TerminalNode;

src/slang-nodes/YulStackAssignmentOperator.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@ import {
22
NonterminalKind,
33
TerminalNode as SlangTerminalNode
44
} from '@nomicfoundation/slang/cst';
5-
import { PolymorphicNode } from './PolymorphicNode.js';
5+
import { SlangNode } from './SlangNode.js';
66
import { YulEqualAndColon } from './YulEqualAndColon.js';
77
import { TerminalNode } from './TerminalNode.js';
88

99
import type * as ast from '@nomicfoundation/slang/ast';
1010

11-
export class YulStackAssignmentOperator extends PolymorphicNode {
11+
export class YulStackAssignmentOperator extends SlangNode {
1212
readonly kind = NonterminalKind.YulStackAssignmentOperator;
1313

1414
variant: YulEqualAndColon | TerminalNode;

src/slang-nodes/YulStackAssignmentStatement.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { NonterminalKind } from '@nomicfoundation/slang/cst';
22
import { doc } from 'prettier';
33
import { printSeparatedItem } from '../slang-printers/print-separated-item.js';
4-
import { printVariant } from '../slang-printers/print-variant.js';
4+
import { extractVariant } from '../slang-utils/extract-variant.js';
55
import { SlangNode } from './SlangNode.js';
66
import { YulStackAssignmentOperator } from './YulStackAssignmentOperator.js';
77
import { TerminalNode } from './TerminalNode.js';
@@ -15,22 +15,24 @@ const { line } = doc.builders;
1515
export class YulStackAssignmentStatement extends SlangNode {
1616
readonly kind = NonterminalKind.YulStackAssignmentStatement;
1717

18-
assignment: YulStackAssignmentOperator;
18+
assignment: YulStackAssignmentOperator['variant'];
1919

2020
variable: TerminalNode;
2121

2222
constructor(ast: ast.YulStackAssignmentStatement) {
2323
super(ast);
2424

25-
this.assignment = new YulStackAssignmentOperator(ast.assignment);
25+
this.assignment = extractVariant(
26+
new YulStackAssignmentOperator(ast.assignment)
27+
);
2628
this.variable = new TerminalNode(ast.variable);
2729

2830
this.updateMetadata(this.assignment);
2931
}
3032

3133
print(path: AstPath<YulStackAssignmentStatement>, print: PrintFunction): Doc {
3234
return [
33-
path.call(printVariant(print), 'assignment'),
35+
path.call(print, 'assignment'),
3436
printSeparatedItem(path.call(print, 'variable'), {
3537
firstSeparator: line,
3638
lastSeparator: ''

src/slang-nodes/YulSwitchCase.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import * as ast from '@nomicfoundation/slang/ast';
22
import { NonterminalKind } from '@nomicfoundation/slang/cst';
3-
import { PolymorphicNode } from './PolymorphicNode.js';
3+
import { SlangNode } from './SlangNode.js';
44
import { YulDefaultCase } from './YulDefaultCase.js';
55
import { YulValueCase } from './YulValueCase.js';
66

@@ -21,7 +21,7 @@ function createNonterminalVariant(
2121
return exhaustiveCheck;
2222
}
2323

24-
export class YulSwitchCase extends PolymorphicNode {
24+
export class YulSwitchCase extends SlangNode {
2525
readonly kind = NonterminalKind.YulSwitchCase;
2626

2727
variant: YulDefaultCase | YulValueCase;

src/slang-nodes/YulSwitchCases.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { NonterminalKind } from '@nomicfoundation/slang/cst';
22
import { doc } from 'prettier';
3-
import { printVariant } from '../slang-printers/print-variant.js';
3+
import { extractVariant } from '../slang-utils/extract-variant.js';
44
import { SlangNode } from './SlangNode.js';
55
import { YulSwitchCase } from './YulSwitchCase.js';
66

@@ -14,15 +14,17 @@ const { hardline, join } = doc.builders;
1414
export class YulSwitchCases extends SlangNode {
1515
readonly kind = NonterminalKind.YulSwitchCases;
1616

17-
items: YulSwitchCase[];
17+
items: YulSwitchCase['variant'][];
1818

1919
constructor(ast: ast.YulSwitchCases, options: ParserOptions<AstNode>) {
2020
super(ast, true);
2121

22-
this.items = ast.items.map((item) => new YulSwitchCase(item, options));
22+
this.items = ast.items.map((item) =>
23+
extractVariant(new YulSwitchCase(item, options))
24+
);
2325
}
2426

2527
print(path: AstPath<YulSwitchCases>, print: PrintFunction): Doc {
26-
return join(hardline, path.map(printVariant(print), 'items'));
28+
return join(hardline, path.map(print, 'items'));
2729
}
2830
}

src/slang-nodes/YulValueCase.ts

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { NonterminalKind } from '@nomicfoundation/slang/cst';
2-
import { printVariant } from '../slang-printers/print-variant.js';
2+
import { extractVariant } from '../slang-utils/extract-variant.js';
33
import { SlangNode } from './SlangNode.js';
44
import { YulLiteral } from './YulLiteral.js';
55
import { YulBlock } from './YulBlock.js';
@@ -12,25 +12,20 @@ import type { AstNode } from './types.d.ts';
1212
export class YulValueCase extends SlangNode {
1313
readonly kind = NonterminalKind.YulValueCase;
1414

15-
value: YulLiteral;
15+
value: YulLiteral['variant'];
1616

1717
body: YulBlock;
1818

1919
constructor(ast: ast.YulValueCase, options: ParserOptions<AstNode>) {
2020
super(ast);
2121

22-
this.value = new YulLiteral(ast.value, options);
22+
this.value = extractVariant(new YulLiteral(ast.value, options));
2323
this.body = new YulBlock(ast.body, options);
2424

2525
this.updateMetadata(this.value, this.body);
2626
}
2727

2828
print(path: AstPath<YulValueCase>, print: PrintFunction): Doc {
29-
return [
30-
'case ',
31-
path.call(printVariant(print), 'value'),
32-
' ',
33-
path.call(print, 'body')
34-
];
29+
return ['case ', path.call(print, 'value'), ' ', path.call(print, 'body')];
3530
}
3631
}

src/slang-nodes/YulVariableAssignmentStatement.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { NonterminalKind } from '@nomicfoundation/slang/cst';
22
import { doc } from 'prettier';
33
import { printVariant } from '../slang-printers/print-variant.js';
4+
import { extractVariant } from '../slang-utils/extract-variant.js';
45
import { SlangNode } from './SlangNode.js';
56
import { YulPaths } from './YulPaths.js';
67
import { YulAssignmentOperator } from './YulAssignmentOperator.js';
@@ -18,7 +19,7 @@ export class YulVariableAssignmentStatement extends SlangNode {
1819

1920
variables: YulPaths;
2021

21-
assignment: YulAssignmentOperator;
22+
assignment: YulAssignmentOperator['variant'];
2223

2324
expression: YulExpression;
2425

@@ -29,7 +30,7 @@ export class YulVariableAssignmentStatement extends SlangNode {
2930
super(ast);
3031

3132
this.variables = new YulPaths(ast.variables);
32-
this.assignment = new YulAssignmentOperator(ast.assignment);
33+
this.assignment = extractVariant(new YulAssignmentOperator(ast.assignment));
3334
this.expression = new YulExpression(ast.expression, options);
3435

3536
this.updateMetadata(this.variables, this.assignment, this.expression);
@@ -41,7 +42,7 @@ export class YulVariableAssignmentStatement extends SlangNode {
4142
): Doc {
4243
return join(' ', [
4344
path.call(print, 'variables'),
44-
path.call(printVariant(print), 'assignment'),
45+
path.call(print, 'assignment'),
4546
path.call(printVariant(print), 'expression')
4647
]);
4748
}

src/slang-nodes/YulVariableDeclarationValue.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { NonterminalKind } from '@nomicfoundation/slang/cst';
22
import { printVariant } from '../slang-printers/print-variant.js';
3+
import { extractVariant } from '../slang-utils/extract-variant.js';
34
import { SlangNode } from './SlangNode.js';
45
import { YulAssignmentOperator } from './YulAssignmentOperator.js';
56
import { YulExpression } from './YulExpression.js';
@@ -12,7 +13,7 @@ import type { AstNode } from './types.d.ts';
1213
export class YulVariableDeclarationValue extends SlangNode {
1314
readonly kind = NonterminalKind.YulVariableDeclarationValue;
1415

15-
assignment: YulAssignmentOperator;
16+
assignment: YulAssignmentOperator['variant'];
1617

1718
expression: YulExpression;
1819

@@ -22,15 +23,15 @@ export class YulVariableDeclarationValue extends SlangNode {
2223
) {
2324
super(ast);
2425

25-
this.assignment = new YulAssignmentOperator(ast.assignment);
26+
this.assignment = extractVariant(new YulAssignmentOperator(ast.assignment));
2627
this.expression = new YulExpression(ast.expression, options);
2728

2829
this.updateMetadata(this.assignment, this.expression);
2930
}
3031

3132
print(path: AstPath<YulVariableDeclarationValue>, print: PrintFunction): Doc {
3233
return [
33-
path.call(printVariant(print), 'assignment'),
34+
path.call(print, 'assignment'),
3435
' ',
3536
path.call(printVariant(print), 'expression')
3637
];

0 commit comments

Comments
 (0)