Skip to content

Commit 93e7194

Browse files
committed
storing variant before switch statement
1 parent 8b7763e commit 93e7194

35 files changed

Lines changed: 279 additions & 270 deletions

src/slang-nodes/ArgumentsDeclaration.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,21 +16,23 @@ export class ArgumentsDeclaration extends SlangNode {
1616
constructor(ast: ast.ArgumentsDeclaration, options: ParserOptions<AstNode>) {
1717
super(ast);
1818

19-
switch (ast.variant.cst.kind) {
19+
const variant = ast.variant;
20+
const variantKind = variant.cst.kind;
21+
switch (variantKind) {
2022
case NonterminalKind.PositionalArgumentsDeclaration:
2123
this.variant = new PositionalArgumentsDeclaration(
22-
ast.variant as ast.PositionalArgumentsDeclaration,
24+
variant as ast.PositionalArgumentsDeclaration,
2325
options
2426
);
2527
break;
2628
case NonterminalKind.NamedArgumentsDeclaration:
2729
this.variant = new NamedArgumentsDeclaration(
28-
ast.variant as ast.NamedArgumentsDeclaration,
30+
variant as ast.NamedArgumentsDeclaration,
2931
options
3032
);
3133
break;
3234
default:
33-
throw new Error(`Unexpected variant: ${ast.variant.cst.kind}`);
35+
throw new Error(`Unexpected variant: ${variantKind}`);
3436
}
3537

3638
this.updateMetadata(this.variant);

src/slang-nodes/ConstructorAttribute.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,12 @@ export class ConstructorAttribute extends SlangNode {
1616
constructor(ast: ast.ConstructorAttribute, options: ParserOptions<AstNode>) {
1717
super(ast);
1818

19-
if (ast.variant instanceof TerminalNode) {
20-
this.variant = ast.variant.unparse();
19+
const variant = ast.variant;
20+
if (variant instanceof TerminalNode) {
21+
this.variant = variant.unparse();
2122
return;
2223
}
23-
this.variant = new ModifierInvocation(ast.variant, options);
24+
this.variant = new ModifierInvocation(variant, options);
2425

2526
this.updateMetadata(this.variant);
2627
}

src/slang-nodes/ContractMember.ts

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -40,83 +40,85 @@ export class ContractMember extends SlangNode {
4040
constructor(ast: ast.ContractMember, options: ParserOptions<AstNode>) {
4141
super(ast);
4242

43-
switch (ast.variant.cst.kind) {
43+
const variant = ast.variant;
44+
const variantKind = variant.cst.kind;
45+
switch (variantKind) {
4446
case NonterminalKind.UsingDirective:
4547
this.variant = new UsingDirective(
46-
ast.variant as ast.UsingDirective,
48+
variant as ast.UsingDirective,
4749
options
4850
);
4951
break;
5052
case NonterminalKind.FunctionDefinition:
5153
this.variant = new FunctionDefinition(
52-
ast.variant as ast.FunctionDefinition,
54+
variant as ast.FunctionDefinition,
5355
options
5456
);
5557
break;
5658
case NonterminalKind.ConstructorDefinition:
5759
this.variant = new ConstructorDefinition(
58-
ast.variant as ast.ConstructorDefinition,
60+
variant as ast.ConstructorDefinition,
5961
options
6062
);
6163
break;
6264
case NonterminalKind.ReceiveFunctionDefinition:
6365
this.variant = new ReceiveFunctionDefinition(
64-
ast.variant as ast.ReceiveFunctionDefinition,
66+
variant as ast.ReceiveFunctionDefinition,
6567
options
6668
);
6769
break;
6870
case NonterminalKind.FallbackFunctionDefinition:
6971
this.variant = new FallbackFunctionDefinition(
70-
ast.variant as ast.FallbackFunctionDefinition,
72+
variant as ast.FallbackFunctionDefinition,
7173
options
7274
);
7375
break;
7476
case NonterminalKind.UnnamedFunctionDefinition:
7577
this.variant = new UnnamedFunctionDefinition(
76-
ast.variant as ast.UnnamedFunctionDefinition,
78+
variant as ast.UnnamedFunctionDefinition,
7779
options
7880
);
7981
break;
8082
case NonterminalKind.ModifierDefinition:
8183
this.variant = new ModifierDefinition(
82-
ast.variant as ast.ModifierDefinition,
84+
variant as ast.ModifierDefinition,
8385
options
8486
);
8587
break;
8688
case NonterminalKind.StructDefinition:
8789
this.variant = new StructDefinition(
88-
ast.variant as ast.StructDefinition,
90+
variant as ast.StructDefinition,
8991
options
9092
);
9193
break;
9294
case NonterminalKind.EnumDefinition:
93-
this.variant = new EnumDefinition(ast.variant as ast.EnumDefinition);
95+
this.variant = new EnumDefinition(variant as ast.EnumDefinition);
9496
break;
9597
case NonterminalKind.EventDefinition:
9698
this.variant = new EventDefinition(
97-
ast.variant as ast.EventDefinition,
99+
variant as ast.EventDefinition,
98100
options
99101
);
100102
break;
101103
case NonterminalKind.StateVariableDefinition:
102104
this.variant = new StateVariableDefinition(
103-
ast.variant as ast.StateVariableDefinition,
105+
variant as ast.StateVariableDefinition,
104106
options
105107
);
106108
break;
107109
case NonterminalKind.ErrorDefinition:
108110
this.variant = new ErrorDefinition(
109-
ast.variant as ast.ErrorDefinition,
111+
variant as ast.ErrorDefinition,
110112
options
111113
);
112114
break;
113115
case NonterminalKind.UserDefinedValueTypeDefinition:
114116
this.variant = new UserDefinedValueTypeDefinition(
115-
ast.variant as ast.UserDefinedValueTypeDefinition
117+
variant as ast.UserDefinedValueTypeDefinition
116118
);
117119
break;
118120
default:
119-
throw new Error(`Unexpected variant: ${ast.variant.cst.kind}`);
121+
throw new Error(`Unexpected variant: ${variantKind}`);
120122
}
121123

122124
this.updateMetadata(this.variant);

src/slang-nodes/ContractSpecifier.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,21 +16,23 @@ export class ContractSpecifier extends SlangNode {
1616
constructor(ast: ast.ContractSpecifier, options: ParserOptions<AstNode>) {
1717
super(ast);
1818

19-
switch (ast.variant.cst.kind) {
19+
const variant = ast.variant;
20+
const variantKind = variant.cst.kind;
21+
switch (variantKind) {
2022
case NonterminalKind.InheritanceSpecifier:
2123
this.variant = new InheritanceSpecifier(
22-
ast.variant as ast.InheritanceSpecifier,
24+
variant as ast.InheritanceSpecifier,
2325
options
2426
);
2527
break;
2628
case NonterminalKind.StorageLayoutSpecifier:
2729
this.variant = new StorageLayoutSpecifier(
28-
ast.variant as ast.StorageLayoutSpecifier,
30+
variant as ast.StorageLayoutSpecifier,
2931
options
3032
);
3133
break;
3234
default:
33-
throw new Error(`Unexpected variant: ${ast.variant.cst.kind}`);
35+
throw new Error(`Unexpected variant: ${variantKind}`);
3436
}
3537
this.updateMetadata(this.variant);
3638
}

src/slang-nodes/ElementaryType.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,12 @@ export class ElementaryType extends SlangNode {
1515
constructor(ast: ast.ElementaryType) {
1616
super(ast);
1717

18-
if (ast.variant instanceof TerminalNode) {
19-
this.variant = ast.variant.unparse();
18+
const variant = ast.variant;
19+
if (variant instanceof TerminalNode) {
20+
this.variant = variant.unparse();
2021
return;
2122
}
22-
this.variant = new AddressType(ast.variant);
23+
this.variant = new AddressType(variant);
2324

2425
this.updateMetadata(this.variant);
2526
}

src/slang-nodes/ExperimentalFeature.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,12 @@ export class ExperimentalFeature extends SlangNode {
1616
constructor(ast: ast.ExperimentalFeature, options: ParserOptions<AstNode>) {
1717
super(ast);
1818

19-
if (ast.variant instanceof TerminalNode) {
20-
this.variant = new Identifier(ast.variant);
19+
const variant = ast.variant;
20+
if (variant instanceof TerminalNode) {
21+
this.variant = new Identifier(variant);
2122
return;
2223
}
23-
this.variant = new StringLiteral(ast.variant, options);
24+
this.variant = new StringLiteral(variant, options);
2425

2526
this.updateMetadata(this.variant);
2627
}

0 commit comments

Comments
 (0)