From 1b5e4649b46ec071b6145695357b4ab2a0ad6ec9 Mon Sep 17 00:00:00 2001 From: Joshua Tenner Date: Sun, 12 Apr 2020 20:25:47 -0400 Subject: [PATCH 1/3] decouple parser from program --- src/parser.ts | 20 +++++++++++--------- src/program.ts | 2 +- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/parser.ts b/src/parser.ts index 0c0ac7d9c0..749366fdc7 100644 --- a/src/parser.ts +++ b/src/parser.ts @@ -28,7 +28,8 @@ import { import { DiagnosticCode, - DiagnosticEmitter + DiagnosticEmitter, + DiagnosticMessage } from "./diagnostics"; import { @@ -95,8 +96,6 @@ import { /** Parser interface. */ export class Parser extends DiagnosticEmitter { - /** Program being created. */ - program: Program; /** Source file names to be requested next. */ backlog: string[] = new Array(); /** Source file names already seen, that is processed or backlogged. */ @@ -111,9 +110,12 @@ export class Parser extends DiagnosticEmitter { dependees: Map = new Map(); /** Constructs a new parser. */ - constructor(program: Program) { - super(program.diagnostics); - this.program = program; + constructor( + public diagnostics: DiagnosticMessage[] = [], + public sources: Source[] = [] + ) { + super(diagnostics); + } /** Parses a file and adds its definitions to the program. */ @@ -145,12 +147,12 @@ export class Parser extends DiagnosticEmitter { : SourceKind.LIBRARY : SourceKind.USER ); - var program = this.program; - program.sources.push(source); + + this.sources.push(source); this.currentSource = source; // tokenize and parse - var tn = new Tokenizer(source, program.diagnostics); + var tn = new Tokenizer(source, this.diagnostics); tn.onComment = this.onComment; var statements = source.statements; while (!tn.skip(Token.ENDOFFILE)) { diff --git a/src/program.ts b/src/program.ts index c44578fbfe..79b30307d3 100644 --- a/src/program.ts +++ b/src/program.ts @@ -537,7 +537,7 @@ export class Program extends DiagnosticEmitter { var nativeFile = new File(this, nativeSource); this.nativeFile = nativeFile; this.filesByName.set(nativeFile.internalName, nativeFile); - this.parser = new Parser(this); + this.parser = new Parser(this.diagnostics, this.sources); this.resolver = new Resolver(this); } From b62a3208cea257311511f9edf0f6fe7b859ec732 Mon Sep 17 00:00:00 2001 From: Joshua Tenner Date: Mon, 13 Apr 2020 12:19:54 -0400 Subject: [PATCH 2/3] cleanups, make sources setting explicit --- src/parser.ts | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/parser.ts b/src/parser.ts index 749366fdc7..2ab65f8443 100644 --- a/src/parser.ts +++ b/src/parser.ts @@ -13,10 +13,6 @@ import { PATH_DELIMITER } from "./common"; -import { - Program -} from "./program"; - import { Tokenizer, Token, @@ -108,14 +104,16 @@ export class Parser extends DiagnosticEmitter { currentSource: Source; /** Dependency map **/ dependees: Map = new Map(); + /** An array of parsed sources. */ + sources: Source[]; /** Constructs a new parser. */ constructor( - public diagnostics: DiagnosticMessage[] = [], - public sources: Source[] = [] + diagnostics: DiagnosticMessage[] | null = null, + sources: Source[] | null = null ) { super(diagnostics); - + this.sources = sources == null ? new Array() : sources; } /** Parses a file and adds its definitions to the program. */ From f9cf6b65b11f847aad1c9be6e48e3df93c4cbc7e Mon Sep 17 00:00:00 2001 From: jtenner Date: Mon, 13 Apr 2020 12:37:56 -0400 Subject: [PATCH 3/3] Update src/parser.ts Make suggested change. Co-Authored-By: Daniel Wirtz --- src/parser.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/parser.ts b/src/parser.ts index 2ab65f8443..bfbc857053 100644 --- a/src/parser.ts +++ b/src/parser.ts @@ -113,7 +113,7 @@ export class Parser extends DiagnosticEmitter { sources: Source[] | null = null ) { super(diagnostics); - this.sources = sources == null ? new Array() : sources; + this.sources = sources ? sources : new Array(); } /** Parses a file and adds its definitions to the program. */