1+ import * as ast from '@nomicfoundation/slang/ast' ;
12import { NonterminalKind , TerminalNode } from '@nomicfoundation/slang/cst' ;
23import { SlangNode } from './SlangNode.js' ;
34import { AssignmentExpression } from './AssignmentExpression.js' ;
@@ -29,7 +30,6 @@ import { StringExpression } from './StringExpression.js';
2930import { ElementaryType } from './ElementaryType.js' ;
3031import { Identifier } from './Identifier.js' ;
3132
32- import type * as ast from '@nomicfoundation/slang/ast' ;
3333import type { AstPath , Doc , ParserOptions } from 'prettier' ;
3434import type { AstNode } from './types.d.ts' ;
3535import type { PrintFunction } from '../types.d.ts' ;
@@ -38,102 +38,89 @@ function createNonterminalVariant(
3838 variant : Exclude < ast . Expression [ 'variant' ] , TerminalNode > ,
3939 options : ParserOptions < AstNode >
4040) : Exclude < Expression [ 'variant' ] , Identifier > {
41- switch ( variant . cst . kind ) {
42- case NonterminalKind . AssignmentExpression :
43- return new AssignmentExpression (
44- variant as ast . AssignmentExpression ,
45- options
46- ) ;
47- case NonterminalKind . ConditionalExpression :
48- return new ConditionalExpression (
49- variant as ast . ConditionalExpression ,
50- options
51- ) ;
52- case NonterminalKind . OrExpression :
53- return new OrExpression ( variant as ast . OrExpression , options ) ;
54- case NonterminalKind . AndExpression :
55- return new AndExpression ( variant as ast . AndExpression , options ) ;
56- case NonterminalKind . EqualityExpression :
57- return new EqualityExpression ( variant as ast . EqualityExpression , options ) ;
58- case NonterminalKind . InequalityExpression :
59- return new InequalityExpression (
60- variant as ast . InequalityExpression ,
61- options
62- ) ;
63- case NonterminalKind . BitwiseOrExpression :
64- return new BitwiseOrExpression (
65- variant as ast . BitwiseOrExpression ,
66- options
67- ) ;
68- case NonterminalKind . BitwiseXorExpression :
69- return new BitwiseXorExpression (
70- variant as ast . BitwiseXorExpression ,
71- options
72- ) ;
73- case NonterminalKind . BitwiseAndExpression :
74- return new BitwiseAndExpression (
75- variant as ast . BitwiseAndExpression ,
76- options
77- ) ;
78- case NonterminalKind . ShiftExpression :
79- return new ShiftExpression ( variant as ast . ShiftExpression , options ) ;
80- case NonterminalKind . AdditiveExpression :
81- return new AdditiveExpression ( variant as ast . AdditiveExpression , options ) ;
82- case NonterminalKind . MultiplicativeExpression :
83- return new MultiplicativeExpression (
84- variant as ast . MultiplicativeExpression ,
85- options
86- ) ;
87- case NonterminalKind . ExponentiationExpression :
88- return new ExponentiationExpression (
89- variant as ast . ExponentiationExpression ,
90- options
91- ) ;
92- case NonterminalKind . PostfixExpression :
93- return new PostfixExpression ( variant as ast . PostfixExpression , options ) ;
94- case NonterminalKind . PrefixExpression :
95- return new PrefixExpression ( variant as ast . PrefixExpression , options ) ;
96- case NonterminalKind . FunctionCallExpression :
97- return new FunctionCallExpression (
98- variant as ast . FunctionCallExpression ,
99- options
100- ) ;
101- case NonterminalKind . CallOptionsExpression :
102- return new CallOptionsExpression (
103- variant as ast . CallOptionsExpression ,
104- options
105- ) ;
106- case NonterminalKind . MemberAccessExpression :
107- return new MemberAccessExpression (
108- variant as ast . MemberAccessExpression ,
109- options
110- ) ;
111- case NonterminalKind . IndexAccessExpression :
112- return new IndexAccessExpression (
113- variant as ast . IndexAccessExpression ,
114- options
115- ) ;
116- case NonterminalKind . NewExpression :
117- return new NewExpression ( variant as ast . NewExpression , options ) ;
118- case NonterminalKind . TupleExpression :
119- return new TupleExpression ( variant as ast . TupleExpression , options ) ;
120- case NonterminalKind . TypeExpression :
121- return new TypeExpression ( variant as ast . TypeExpression , options ) ;
122- case NonterminalKind . ArrayExpression :
123- return new ArrayExpression ( variant as ast . ArrayExpression , options ) ;
124- case NonterminalKind . HexNumberExpression :
125- return new HexNumberExpression ( variant as ast . HexNumberExpression ) ;
126- case NonterminalKind . DecimalNumberExpression :
127- return new DecimalNumberExpression (
128- variant as ast . DecimalNumberExpression
129- ) ;
130- case NonterminalKind . StringExpression :
131- return new StringExpression ( variant as ast . StringExpression , options ) ;
132- case NonterminalKind . ElementaryType :
133- return new ElementaryType ( variant as ast . ElementaryType ) ;
134- default :
135- throw new Error ( `Unexpected variant: ${ variant . cst . kind } ` ) ;
41+ if ( variant instanceof ast . AssignmentExpression ) {
42+ return new AssignmentExpression ( variant , options ) ;
13643 }
44+ if ( variant instanceof ast . ConditionalExpression ) {
45+ return new ConditionalExpression ( variant , options ) ;
46+ }
47+ if ( variant instanceof ast . OrExpression ) {
48+ return new OrExpression ( variant , options ) ;
49+ }
50+ if ( variant instanceof ast . AndExpression ) {
51+ return new AndExpression ( variant , options ) ;
52+ }
53+ if ( variant instanceof ast . EqualityExpression ) {
54+ return new EqualityExpression ( variant , options ) ;
55+ }
56+ if ( variant instanceof ast . InequalityExpression ) {
57+ return new InequalityExpression ( variant , options ) ;
58+ }
59+ if ( variant instanceof ast . BitwiseOrExpression ) {
60+ return new BitwiseOrExpression ( variant , options ) ;
61+ }
62+ if ( variant instanceof ast . BitwiseXorExpression ) {
63+ return new BitwiseXorExpression ( variant , options ) ;
64+ }
65+ if ( variant instanceof ast . BitwiseAndExpression ) {
66+ return new BitwiseAndExpression ( variant , options ) ;
67+ }
68+ if ( variant instanceof ast . ShiftExpression ) {
69+ return new ShiftExpression ( variant , options ) ;
70+ }
71+ if ( variant instanceof ast . AdditiveExpression ) {
72+ return new AdditiveExpression ( variant , options ) ;
73+ }
74+ if ( variant instanceof ast . MultiplicativeExpression ) {
75+ return new MultiplicativeExpression ( variant , options ) ;
76+ }
77+ if ( variant instanceof ast . ExponentiationExpression ) {
78+ return new ExponentiationExpression ( variant , options ) ;
79+ }
80+ if ( variant instanceof ast . PostfixExpression ) {
81+ return new PostfixExpression ( variant , options ) ;
82+ }
83+ if ( variant instanceof ast . PrefixExpression ) {
84+ return new PrefixExpression ( variant , options ) ;
85+ }
86+ if ( variant instanceof ast . FunctionCallExpression ) {
87+ return new FunctionCallExpression ( variant , options ) ;
88+ }
89+ if ( variant instanceof ast . CallOptionsExpression ) {
90+ return new CallOptionsExpression ( variant , options ) ;
91+ }
92+ if ( variant instanceof ast . MemberAccessExpression ) {
93+ return new MemberAccessExpression ( variant , options ) ;
94+ }
95+ if ( variant instanceof ast . IndexAccessExpression ) {
96+ return new IndexAccessExpression ( variant , options ) ;
97+ }
98+ if ( variant instanceof ast . NewExpression ) {
99+ return new NewExpression ( variant , options ) ;
100+ }
101+ if ( variant instanceof ast . TupleExpression ) {
102+ return new TupleExpression ( variant , options ) ;
103+ }
104+ if ( variant instanceof ast . TypeExpression ) {
105+ return new TypeExpression ( variant , options ) ;
106+ }
107+ if ( variant instanceof ast . ArrayExpression ) {
108+ return new ArrayExpression ( variant , options ) ;
109+ }
110+ if ( variant instanceof ast . HexNumberExpression ) {
111+ return new HexNumberExpression ( variant ) ;
112+ }
113+ if ( variant instanceof ast . DecimalNumberExpression ) {
114+ return new DecimalNumberExpression ( variant ) ;
115+ }
116+ if ( variant instanceof ast . StringExpression ) {
117+ return new StringExpression ( variant , options ) ;
118+ }
119+ if ( variant instanceof ast . ElementaryType ) {
120+ return new ElementaryType ( variant ) ;
121+ }
122+ const exhaustiveCheck : never = variant ;
123+ return exhaustiveCheck ;
137124}
138125
139126export class Expression extends SlangNode {
0 commit comments