@@ -38,50 +38,90 @@ import type { ParserOptions } from 'prettier';
3838import type { CollectedMetadata } from '../types.d.ts' ;
3939import type { AstNode } from './types.d.ts' ;
4040
41- const variantConstructors = {
42- [ ast . AssignmentExpression . name ] : AssignmentExpression ,
43- [ ast . ConditionalExpression . name ] : ConditionalExpression ,
44- [ ast . OrExpression . name ] : OrExpression ,
45- [ ast . AndExpression . name ] : AndExpression ,
46- [ ast . EqualityExpression . name ] : EqualityExpression ,
47- [ ast . InequalityExpression . name ] : InequalityExpression ,
48- [ ast . BitwiseOrExpression . name ] : BitwiseOrExpression ,
49- [ ast . BitwiseXorExpression . name ] : BitwiseXorExpression ,
50- [ ast . BitwiseAndExpression . name ] : BitwiseAndExpression ,
51- [ ast . ShiftExpression . name ] : ShiftExpression ,
52- [ ast . AdditiveExpression . name ] : AdditiveExpression ,
53- [ ast . MultiplicativeExpression . name ] : MultiplicativeExpression ,
54- [ ast . ExponentiationExpression . name ] : ExponentiationExpression ,
55- [ ast . PostfixExpression . name ] : PostfixExpression ,
56- [ ast . PrefixExpression . name ] : PrefixExpression ,
57- [ ast . FunctionCallExpression . name ] : FunctionCallExpression ,
58- [ ast . CallOptionsExpression . name ] : CallOptionsExpression ,
59- [ ast . MemberAccessExpression . name ] : MemberAccessExpression ,
60- [ ast . IndexAccessExpression . name ] : IndexAccessExpression ,
61- [ ast . NewExpression . name ] : NewExpression ,
62- [ ast . TupleExpression . name ] : TupleExpression ,
63- [ ast . TypeExpression . name ] : TypeExpression ,
64- [ ast . ArrayExpression . name ] : ArrayExpression ,
65- [ ast . HexNumberExpression . name ] : HexNumberExpression ,
66- [ ast . DecimalNumberExpression . name ] : DecimalNumberExpression
67- } ;
41+ const keys = [
42+ ast . AssignmentExpression ,
43+ ast . ConditionalExpression ,
44+ ast . OrExpression ,
45+ ast . AndExpression ,
46+ ast . EqualityExpression ,
47+ ast . InequalityExpression ,
48+ ast . BitwiseOrExpression ,
49+ ast . BitwiseXorExpression ,
50+ ast . BitwiseAndExpression ,
51+ ast . ShiftExpression ,
52+ ast . AdditiveExpression ,
53+ ast . MultiplicativeExpression ,
54+ ast . ExponentiationExpression ,
55+ ast . PostfixExpression ,
56+ ast . PrefixExpression ,
57+ ast . FunctionCallExpression ,
58+ ast . CallOptionsExpression ,
59+ ast . MemberAccessExpression ,
60+ ast . IndexAccessExpression ,
61+ ast . NewExpression ,
62+ ast . TupleExpression ,
63+ ast . TypeExpression ,
64+ ast . ArrayExpression ,
65+ ast . HexNumberExpression ,
66+ ast . DecimalNumberExpression
67+ ] ;
68+ const constructors = [
69+ AssignmentExpression ,
70+ ConditionalExpression ,
71+ OrExpression ,
72+ AndExpression ,
73+ EqualityExpression ,
74+ InequalityExpression ,
75+ BitwiseOrExpression ,
76+ BitwiseXorExpression ,
77+ BitwiseAndExpression ,
78+ ShiftExpression ,
79+ AdditiveExpression ,
80+ MultiplicativeExpression ,
81+ ExponentiationExpression ,
82+ PostfixExpression ,
83+ PrefixExpression ,
84+ FunctionCallExpression ,
85+ CallOptionsExpression ,
86+ MemberAccessExpression ,
87+ IndexAccessExpression ,
88+ NewExpression ,
89+ TupleExpression ,
90+ TypeExpression ,
91+ ArrayExpression ,
92+ HexNumberExpression ,
93+ DecimalNumberExpression
94+ ] ;
6895
69- const variantWithVariantsConstructors = {
70- [ ast . StringExpression . name ] : StringExpression ,
71- [ ast . ElementaryType . name ] : ElementaryType
72- } ;
96+ const variantConstructors = new Map < string , ( typeof constructors ) [ number ] > (
97+ keys . map ( ( key , index ) => [ key . name , constructors [ index ] ] )
98+ ) ;
99+
100+ const keysWithVariants = [ ast . StringExpression , ast . ElementaryType ] ;
101+ const constructorsWithVariants = [ StringExpression , ElementaryType ] ;
102+
103+ const variantWithVariantsConstructors = new Map <
104+ string ,
105+ ( typeof constructorsWithVariants ) [ number ]
106+ > (
107+ keysWithVariants . map ( ( key , index ) => [
108+ key . name ,
109+ constructorsWithVariants [ index ]
110+ ] )
111+ ) ;
73112
74113function createNonterminalVariant (
75114 variant : Exclude < ast . Expression [ 'variant' ] , SlangTerminalNode > ,
76115 collected : CollectedMetadata ,
77116 options : ParserOptions < AstNode >
78117) : Expression [ 'variant' ] {
79- const variantConstructor = variantConstructors [ variant . constructor . name ] ;
118+ const variantConstructor = variantConstructors . get ( variant . constructor . name ) ;
80119 if ( variantConstructor !== undefined )
81120 return new variantConstructor ( variant as never , collected , options ) ;
82121
83- const variantWithVariantsConstructor =
84- variantWithVariantsConstructors [ variant . constructor . name ] ;
122+ const variantWithVariantsConstructor = variantWithVariantsConstructors . get (
123+ variant . constructor . name
124+ ) ;
85125 if ( variantWithVariantsConstructor !== undefined )
86126 return extractVariant (
87127 new variantWithVariantsConstructor ( variant as never , collected , options )
0 commit comments