Skip to content

Commit af06298

Browse files
authored
removing the rest of the Polymorphic nodes from the AST tree (#1296)
1 parent 6863c60 commit af06298

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

64 files changed

+240
-314
lines changed

src/slang-nodes/ArrayTypeName.ts

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { NonterminalKind } from '@nomicfoundation/slang/cst';
2-
import { printVariant } from '../slang-printers/print-variant.js';
32
import { extractVariant } from '../slang-utils/extract-variant.js';
43
import { SlangNode } from './SlangNode.js';
54
import { TypeName } from './TypeName.js';
@@ -13,14 +12,14 @@ import type { AstNode } from './types.d.ts';
1312
export class ArrayTypeName extends SlangNode {
1413
readonly kind = NonterminalKind.ArrayTypeName;
1514

16-
operand: TypeName;
15+
operand: TypeName['variant'];
1716

1817
index?: Expression['variant'];
1918

2019
constructor(ast: ast.ArrayTypeName, options: ParserOptions<AstNode>) {
2120
super(ast);
2221

23-
this.operand = new TypeName(ast.operand, options);
22+
this.operand = extractVariant(new TypeName(ast.operand, options));
2423
if (ast.index) {
2524
this.index = extractVariant(new Expression(ast.index, options));
2625
}
@@ -29,11 +28,6 @@ export class ArrayTypeName extends SlangNode {
2928
}
3029

3130
print(path: AstPath<ArrayTypeName>, print: PrintFunction): Doc {
32-
return [
33-
path.call(printVariant(print), 'operand'),
34-
'[',
35-
path.call(print, 'index'),
36-
']'
37-
];
31+
return [path.call(print, 'operand'), '[', path.call(print, 'index'), ']'];
3832
}
3933
}

src/slang-nodes/ConstantDefinition.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { NonterminalKind } from '@nomicfoundation/slang/cst';
2-
import { printVariant } from '../slang-printers/print-variant.js';
32
import { extractVariant } from '../slang-utils/extract-variant.js';
43
import { SlangNode } from './SlangNode.js';
54
import { TypeName } from './TypeName.js';
@@ -14,7 +13,7 @@ import type { AstNode } from './types.d.ts';
1413
export class ConstantDefinition extends SlangNode {
1514
readonly kind = NonterminalKind.ConstantDefinition;
1615

17-
typeName: TypeName;
16+
typeName: TypeName['variant'];
1817

1918
name: TerminalNode;
2019

@@ -23,7 +22,7 @@ export class ConstantDefinition extends SlangNode {
2322
constructor(ast: ast.ConstantDefinition, options: ParserOptions<AstNode>) {
2423
super(ast);
2524

26-
this.typeName = new TypeName(ast.typeName, options);
25+
this.typeName = extractVariant(new TypeName(ast.typeName, options));
2726
this.name = new TerminalNode(ast.name);
2827
this.value = extractVariant(new Expression(ast.value, options));
2928

@@ -32,7 +31,7 @@ export class ConstantDefinition extends SlangNode {
3231

3332
print(path: AstPath<ConstantDefinition>, print: PrintFunction): Doc {
3433
return [
35-
path.call(printVariant(print), 'typeName'),
34+
path.call(print, 'typeName'),
3635
' constant ',
3736
path.call(print, 'name'),
3837
' = ',

src/slang-nodes/ContractDefinition.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ export class ContractDefinition extends SlangNode {
4444
for (const member of this.members.items) {
4545
if (
4646
member.kind === NonterminalKind.FunctionDefinition &&
47-
member.name.variant.value !== this.name.value
47+
member.name.value !== this.name.value
4848
) {
4949
member.cleanModifierInvocationArguments();
5050
}

src/slang-nodes/ErrorParameter.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { NonterminalKind } from '@nomicfoundation/slang/cst';
22
import { joinExisting } from '../slang-utils/join-existing.js';
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 { TypeName } from './TypeName.js';
66
import { TerminalNode } from './TerminalNode.js';
@@ -13,14 +13,14 @@ import type { AstNode } from './types.d.ts';
1313
export class ErrorParameter extends SlangNode {
1414
readonly kind = NonterminalKind.ErrorParameter;
1515

16-
typeName: TypeName;
16+
typeName: TypeName['variant'];
1717

1818
name?: TerminalNode;
1919

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

23-
this.typeName = new TypeName(ast.typeName, options);
23+
this.typeName = extractVariant(new TypeName(ast.typeName, options));
2424
if (ast.name) {
2525
this.name = new TerminalNode(ast.name);
2626
}
@@ -30,7 +30,7 @@ export class ErrorParameter extends SlangNode {
3030

3131
print(path: AstPath<ErrorParameter>, print: PrintFunction): Doc {
3232
return joinExisting(' ', [
33-
path.call(printVariant(print), 'typeName'),
33+
path.call(print, 'typeName'),
3434
path.call(print, 'name')
3535
]);
3636
}

src/slang-nodes/EventParameter.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { NonterminalKind } from '@nomicfoundation/slang/cst';
22
import { joinExisting } from '../slang-utils/join-existing.js';
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 { TypeName } from './TypeName.js';
66
import { TerminalNode } from './TerminalNode.js';
@@ -13,7 +13,7 @@ import type { AstNode } from './types.d.ts';
1313
export class EventParameter extends SlangNode {
1414
readonly kind = NonterminalKind.EventParameter;
1515

16-
typeName: TypeName;
16+
typeName: TypeName['variant'];
1717

1818
indexedKeyword?: string;
1919

@@ -22,7 +22,7 @@ export class EventParameter extends SlangNode {
2222
constructor(ast: ast.EventParameter, options: ParserOptions<AstNode>) {
2323
super(ast);
2424

25-
this.typeName = new TypeName(ast.typeName, options);
25+
this.typeName = extractVariant(new TypeName(ast.typeName, options));
2626
this.indexedKeyword = ast.indexedKeyword?.unparse();
2727
if (ast.name) {
2828
this.name = new TerminalNode(ast.name);
@@ -33,7 +33,7 @@ export class EventParameter extends SlangNode {
3333

3434
print(path: AstPath<EventParameter>, print: PrintFunction): Doc {
3535
return joinExisting(' ', [
36-
path.call(printVariant(print), 'typeName'),
36+
path.call(print, 'typeName'),
3737
this.indexedKeyword,
3838
path.call(print, 'name')
3939
]);

src/slang-nodes/Expression.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ function createNonterminalVariant(
117117
return new DecimalNumberExpression(variant);
118118
}
119119
if (variant instanceof ast.StringExpression) {
120-
return new StringExpression(variant, options);
120+
return extractVariant(new StringExpression(variant, options));
121121
}
122122
if (variant instanceof ast.ElementaryType) {
123123
return extractVariant(new ElementaryType(variant));
@@ -155,7 +155,7 @@ export class Expression extends SlangNode {
155155
| ArrayExpression
156156
| HexNumberExpression
157157
| DecimalNumberExpression
158-
| StringExpression
158+
| StringExpression['variant']
159159
| ElementaryType['variant']
160160
| TerminalNode;
161161

src/slang-nodes/FallbackFunctionDefinition.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { NonterminalKind } from '@nomicfoundation/slang/cst';
22
import { printFunctionWithBody } from '../slang-printers/print-function.js';
3+
import { extractVariant } from '../slang-utils/extract-variant.js';
34
import { SlangNode } from './SlangNode.js';
45
import { ParametersDeclaration } from './ParametersDeclaration.js';
56
import { FallbackFunctionAttributes } from './FallbackFunctionAttributes.js';
@@ -20,7 +21,7 @@ export class FallbackFunctionDefinition extends SlangNode {
2021

2122
returns?: ReturnsDeclaration;
2223

23-
body: FunctionBody;
24+
body: FunctionBody['variant'];
2425

2526
constructor(
2627
ast: ast.FallbackFunctionDefinition,
@@ -33,7 +34,7 @@ export class FallbackFunctionDefinition extends SlangNode {
3334
if (ast.returns) {
3435
this.returns = new ReturnsDeclaration(ast.returns, options);
3536
}
36-
this.body = new FunctionBody(ast.body, options);
37+
this.body = extractVariant(new FunctionBody(ast.body, options));
3738

3839
this.updateMetadata(
3940
this.parameters,

src/slang-nodes/ForStatement.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst';
22
import { doc } from 'prettier';
33
import { printSeparatedList } from '../slang-printers/print-separated-list.js';
44
import { printIndentedGroupOrSpacedDocument } from '../slang-printers/print-indented-group-or-spaced-document.js';
5-
import { printVariant } from '../slang-printers/print-variant.js';
65
import { extractVariant } from '../slang-utils/extract-variant.js';
76
import { SlangNode } from './SlangNode.js';
87
import { ForStatementInitialization } from './ForStatementInitialization.js';
@@ -20,9 +19,9 @@ const { line } = doc.builders;
2019
export class ForStatement extends SlangNode {
2120
readonly kind = NonterminalKind.ForStatement;
2221

23-
initialization: ForStatementInitialization;
22+
initialization: ForStatementInitialization['variant'];
2423

25-
condition: ForStatementCondition;
24+
condition: ForStatementCondition['variant'];
2625

2726
iterator?: Expression['variant'];
2827

@@ -31,11 +30,12 @@ export class ForStatement extends SlangNode {
3130
constructor(ast: ast.ForStatement, options: ParserOptions<AstNode>) {
3231
super(ast);
3332

34-
this.initialization = new ForStatementInitialization(
35-
ast.initialization,
36-
options
33+
this.initialization = extractVariant(
34+
new ForStatementInitialization(ast.initialization, options)
35+
);
36+
this.condition = extractVariant(
37+
new ForStatementCondition(ast.condition, options)
3738
);
38-
this.condition = new ForStatementCondition(ast.condition, options);
3939
if (ast.iterator) {
4040
this.iterator = extractVariant(new Expression(ast.iterator, options));
4141
}
@@ -50,8 +50,8 @@ export class ForStatement extends SlangNode {
5050
}
5151

5252
print(path: AstPath<ForStatement>, print: PrintFunction): Doc {
53-
const initialization = path.call(printVariant(print), 'initialization');
54-
const condition = path.call(printVariant(print), 'condition');
53+
const initialization = path.call(print, 'initialization');
54+
const condition = path.call(print, 'condition');
5555
const iterator = path.call(print, 'iterator');
5656

5757
return [

src/slang-nodes/ForStatementCondition.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@ 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 { ExpressionStatement } from './ExpressionStatement.js';
77
import { TerminalNode } from './TerminalNode.js';
88

99
import type * as ast from '@nomicfoundation/slang/ast';
1010
import type { ParserOptions } from 'prettier';
1111
import type { AstNode } from './types.d.ts';
1212

13-
export class ForStatementCondition extends PolymorphicNode {
13+
export class ForStatementCondition extends SlangNode {
1414
readonly kind = NonterminalKind.ForStatementCondition;
1515

1616
variant: ExpressionStatement | TerminalNode;

src/slang-nodes/ForStatementInitialization.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 { ExpressionStatement } from './ExpressionStatement.js';
88
import { VariableDeclarationStatement } from './VariableDeclarationStatement.js';
99
import { TupleDeconstructionStatement } from './TupleDeconstructionStatement.js';
@@ -32,7 +32,7 @@ function createNonterminalVariant(
3232
return exhaustiveCheck;
3333
}
3434

35-
export class ForStatementInitialization extends PolymorphicNode {
35+
export class ForStatementInitialization extends SlangNode {
3636
readonly kind = NonterminalKind.ForStatementInitialization;
3737

3838
variant:

0 commit comments

Comments
 (0)