@@ -12,8 +12,7 @@ import type {
1212 SlangAstNodeClass
1313} from '../types.d.ts' ;
1414
15- type Constructor < T > = new ( ast : any , collected : CollectedMetadata ) => T ;
16- type ConstructorsFromInstances < U > = U extends any ? Constructor < U > : never ;
15+ type NodeConstructor < T > = new ( ast : any , collected : CollectedMetadata ) => T ;
1716type SlangPolymorphicNode = Extract < SlangAstNode , { variant : unknown } > ;
1817
1918type NonterminalVariantFactory <
@@ -29,7 +28,10 @@ export function createNonterminalVariantSimpleCreator<
2928 U extends SlangPolymorphicNode ,
3029 T extends StrictPolymorphicNode
3130> (
32- constructors : [ SlangAstNodeClass , ConstructorsFromInstances < T [ 'variant' ] > ] [ ]
31+ constructors : [
32+ SlangAstNodeClass ,
33+ NodeConstructor < Exclude < T [ 'variant' ] , StrictPolymorphicNode > >
34+ ] [ ]
3335) : NonterminalVariantFactory < U , T > {
3436 return ( variant , collected ) => {
3537 for ( const [ slangAstClass , constructor ] of constructors ) {
@@ -45,10 +47,13 @@ export function createNonterminalVariantCreator<
4547 U extends SlangPolymorphicNode ,
4648 T extends StrictPolymorphicNode
4749> (
48- constructors : [ SlangAstNodeClass , ConstructorsFromInstances < T [ 'variant' ] > ] [ ] ,
50+ constructors : [
51+ SlangAstNodeClass ,
52+ NodeConstructor < Exclude < T [ 'variant' ] , StrictPolymorphicNode > >
53+ ] [ ] ,
4954 extractVariantConstructors : [
5055 SlangAstNodeClass ,
51- ConstructorsFromInstances < StrictPolymorphicNode >
56+ NodeConstructor < StrictPolymorphicNode >
5257 ] [ ]
5358) : NonterminalVariantFactory < U , T > {
5459 const simpleCreator = createNonterminalVariantSimpleCreator < U , T > (
0 commit comments