1- import * as ast from '@nomicfoundation/slang/ast' ;
1+ import * as slangAst from '@nomicfoundation/slang/ast' ;
22import {
33 NonterminalKind ,
44 TerminalNode as SlangTerminalNode
@@ -39,39 +39,39 @@ import type { CollectedMetadata } from '../types.d.ts';
3939import type { AstNode } from './types.d.ts' ;
4040
4141const createNonterminalVariant = createNonterminalVariantCreator <
42- ast . Expression ,
42+ slangAst . Expression ,
4343 Expression
4444> (
4545 [
46- [ ast . AssignmentExpression , AssignmentExpression ] ,
47- [ ast . ConditionalExpression , ConditionalExpression ] ,
48- [ ast . OrExpression , OrExpression ] ,
49- [ ast . AndExpression , AndExpression ] ,
50- [ ast . EqualityExpression , EqualityExpression ] ,
51- [ ast . InequalityExpression , InequalityExpression ] ,
52- [ ast . BitwiseOrExpression , BitwiseOrExpression ] ,
53- [ ast . BitwiseXorExpression , BitwiseXorExpression ] ,
54- [ ast . BitwiseAndExpression , BitwiseAndExpression ] ,
55- [ ast . ShiftExpression , ShiftExpression ] ,
56- [ ast . AdditiveExpression , AdditiveExpression ] ,
57- [ ast . MultiplicativeExpression , MultiplicativeExpression ] ,
58- [ ast . ExponentiationExpression , ExponentiationExpression ] ,
59- [ ast . PostfixExpression , PostfixExpression ] ,
60- [ ast . PrefixExpression , PrefixExpression ] ,
61- [ ast . FunctionCallExpression , FunctionCallExpression ] ,
62- [ ast . CallOptionsExpression , CallOptionsExpression ] ,
63- [ ast . MemberAccessExpression , MemberAccessExpression ] ,
64- [ ast . IndexAccessExpression , IndexAccessExpression ] ,
65- [ ast . NewExpression , NewExpression ] ,
66- [ ast . TupleExpression , TupleExpression ] ,
67- [ ast . TypeExpression , TypeExpression ] ,
68- [ ast . ArrayExpression , ArrayExpression ] ,
69- [ ast . HexNumberExpression , HexNumberExpression ] ,
70- [ ast . DecimalNumberExpression , DecimalNumberExpression ]
46+ [ slangAst . AssignmentExpression , AssignmentExpression ] ,
47+ [ slangAst . ConditionalExpression , ConditionalExpression ] ,
48+ [ slangAst . OrExpression , OrExpression ] ,
49+ [ slangAst . AndExpression , AndExpression ] ,
50+ [ slangAst . EqualityExpression , EqualityExpression ] ,
51+ [ slangAst . InequalityExpression , InequalityExpression ] ,
52+ [ slangAst . BitwiseOrExpression , BitwiseOrExpression ] ,
53+ [ slangAst . BitwiseXorExpression , BitwiseXorExpression ] ,
54+ [ slangAst . BitwiseAndExpression , BitwiseAndExpression ] ,
55+ [ slangAst . ShiftExpression , ShiftExpression ] ,
56+ [ slangAst . AdditiveExpression , AdditiveExpression ] ,
57+ [ slangAst . MultiplicativeExpression , MultiplicativeExpression ] ,
58+ [ slangAst . ExponentiationExpression , ExponentiationExpression ] ,
59+ [ slangAst . PostfixExpression , PostfixExpression ] ,
60+ [ slangAst . PrefixExpression , PrefixExpression ] ,
61+ [ slangAst . FunctionCallExpression , FunctionCallExpression ] ,
62+ [ slangAst . CallOptionsExpression , CallOptionsExpression ] ,
63+ [ slangAst . MemberAccessExpression , MemberAccessExpression ] ,
64+ [ slangAst . IndexAccessExpression , IndexAccessExpression ] ,
65+ [ slangAst . NewExpression , NewExpression ] ,
66+ [ slangAst . TupleExpression , TupleExpression ] ,
67+ [ slangAst . TypeExpression , TypeExpression ] ,
68+ [ slangAst . ArrayExpression , ArrayExpression ] ,
69+ [ slangAst . HexNumberExpression , HexNumberExpression ] ,
70+ [ slangAst . DecimalNumberExpression , DecimalNumberExpression ]
7171 ] ,
7272 [
73- [ ast . StringExpression , StringExpression ] ,
74- [ ast . ElementaryType , ElementaryType ]
73+ [ slangAst . StringExpression , StringExpression ] ,
74+ [ slangAst . ElementaryType , ElementaryType ]
7575 ]
7676) ;
7777
@@ -109,7 +109,7 @@ export class Expression extends SlangNode {
109109 | TerminalNode ;
110110
111111 constructor (
112- ast : ast . Expression ,
112+ ast : slangAst . Expression ,
113113 collected : CollectedMetadata ,
114114 options : ParserOptions < AstNode >
115115 ) {
@@ -120,6 +120,41 @@ export class Expression extends SlangNode {
120120 this . variant = new TerminalNode ( variant , collected ) ;
121121 return ;
122122 }
123+ if ( process . env . NODE_ENV === 'test' ) {
124+ // This is to ensure that we have handled all variants of
125+ // `Expression` in the `createNonterminalVariant` function above.
126+ ( (
127+ variant : Exclude < slangAst . Expression [ 'variant' ] , SlangTerminalNode >
128+ ) : void => {
129+ if ( variant instanceof slangAst . AssignmentExpression ) return ;
130+ if ( variant instanceof slangAst . ConditionalExpression ) return ;
131+ if ( variant instanceof slangAst . OrExpression ) return ;
132+ if ( variant instanceof slangAst . AndExpression ) return ;
133+ if ( variant instanceof slangAst . EqualityExpression ) return ;
134+ if ( variant instanceof slangAst . InequalityExpression ) return ;
135+ if ( variant instanceof slangAst . BitwiseOrExpression ) return ;
136+ if ( variant instanceof slangAst . BitwiseXorExpression ) return ;
137+ if ( variant instanceof slangAst . BitwiseAndExpression ) return ;
138+ if ( variant instanceof slangAst . ShiftExpression ) return ;
139+ if ( variant instanceof slangAst . AdditiveExpression ) return ;
140+ if ( variant instanceof slangAst . MultiplicativeExpression ) return ;
141+ if ( variant instanceof slangAst . ExponentiationExpression ) return ;
142+ if ( variant instanceof slangAst . PostfixExpression ) return ;
143+ if ( variant instanceof slangAst . PrefixExpression ) return ;
144+ if ( variant instanceof slangAst . FunctionCallExpression ) return ;
145+ if ( variant instanceof slangAst . CallOptionsExpression ) return ;
146+ if ( variant instanceof slangAst . MemberAccessExpression ) return ;
147+ if ( variant instanceof slangAst . IndexAccessExpression ) return ;
148+ if ( variant instanceof slangAst . NewExpression ) return ;
149+ if ( variant instanceof slangAst . TupleExpression ) return ;
150+ if ( variant instanceof slangAst . TypeExpression ) return ;
151+ if ( variant instanceof slangAst . ArrayExpression ) return ;
152+ if ( variant instanceof slangAst . HexNumberExpression ) return ;
153+ if ( variant instanceof slangAst . DecimalNumberExpression ) return ;
154+ if ( variant instanceof slangAst . StringExpression ) return ;
155+ if ( variant instanceof slangAst . ElementaryType ) return ;
156+ } ) ( variant ) ;
157+ }
123158 this . variant = createNonterminalVariant ( variant , collected , options ) ;
124159
125160 this . updateMetadata ( this . variant ) ;
0 commit comments