@@ -53,38 +53,35 @@ const milestoneVersions = [
5353 ( milestone ) => maxSatisfying ( supportedVersions , `<${ milestone } ` ) !
5454) ;
5555
56+ function parserAndOutput (
57+ text : string ,
58+ version : string
59+ ) : { parser : Parser ; parseOutput : ParseOutput } {
60+ const parser = Parser . create ( version ) ;
61+ return {
62+ parser,
63+ parseOutput : parser . parseNonterminal ( NonterminalKind . SourceUnit , text )
64+ } ;
65+ }
66+
5667export function createParser (
5768 text : string ,
5869 options : ParserOptions < AstNode >
5970) : { parser : Parser ; parseOutput : ParseOutput } {
6071 const compiler = maxSatisfying ( supportedVersions , options . compiler ) ;
61- if ( compiler ) {
62- const parser = Parser . create ( compiler ) ;
63- return {
64- parser,
65- parseOutput : parser . parseNonterminal ( NonterminalKind . SourceUnit , text )
66- } ;
67- }
72+ if ( compiler ) return parserAndOutput ( text , compiler ) ;
6873
6974 const inferredRanges : string [ ] = LanguageFacts . inferLanguageVersions ( text ) ;
70- const parser = Parser . create ( inferredRanges [ inferredRanges . length - 1 ] ) ;
71- const result = {
72- parser,
73- parseOutput : parser . parseNonterminal ( NonterminalKind . SourceUnit , text )
74- } ;
7575
76+ let result = parserAndOutput ( text , inferredRanges [ inferredRanges . length - 1 ] ) ;
7677 if ( result . parseOutput . isValid ( ) ) return result ;
7778
7879 const inferredMilestones = milestoneVersions . filter ( ( milestone ) =>
7980 inferredRanges . includes ( milestone )
8081 ) ;
8182
8283 for ( let i = inferredMilestones . length - 1 ; i >= 0 ; i -= 1 ) {
83- result . parser = Parser . create ( inferredMilestones [ i ] ) ;
84- result . parseOutput = result . parser . parseNonterminal (
85- NonterminalKind . SourceUnit ,
86- text
87- ) ;
84+ result = parserAndOutput ( text , inferredMilestones [ i ] ) ;
8885 if ( result . parseOutput . isValid ( ) ) break ;
8986 }
9087
0 commit comments