From 9a19fad1adf65adeda1241dd76908eeaf4971a4a Mon Sep 17 00:00:00 2001 From: Mattia Giambirtone Date: Tue, 16 Aug 2022 13:37:09 +0200 Subject: [PATCH] More fixes to the import system and incremental compilation --- src/frontend/compiler.nim | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/frontend/compiler.nim b/src/frontend/compiler.nim index a1800d4..f6602d9 100644 --- a/src/frontend/compiler.nim +++ b/src/frontend/compiler.nim @@ -2014,20 +2014,23 @@ proc compile*(self: Compiler, ast: seq[Declaration], file: string, lines: seq[tu self.lines = lines self.source = source let pos = self.beginProgram(incremental) - if incremental: + if incremental and self.replMode: for i in countup(1, 2): discard self.chunk.code.pop() while not self.done(): self.declaration(Declaration(self.step())) self.terminateProgram(pos, terminateScope) result = self.chunk + if incremental and not self.replMode: + for i in countup(1, 2): + discard self.chunk.code.pop() proc compileModule(self: Compiler, filename: string) = ## Compiles an imported module into an existing chunk. ## A temporary compiler object is initialized internally let path = joinPath(splitPath(self.file).head, filename) - if self.modules.containsOrIncl(path): + if self.modules.contains(path): return var lexer = newLexer() var parser = newParser() @@ -2038,6 +2041,10 @@ proc compileModule(self: Compiler, filename: string) = let ast = parser.parse(tokens, filename, lexer.getLines(), source) compiler.names.add(self.names[0]) discard compiler.compile(ast, filename, lexer.getLines(), source, chunk=self.chunk, incremental=true) - self.names &= compiler.names + for name in compiler.names: + if name.owner in self.modules: + continue + self.names.add(name) + self.modules.incl(path) self.closedOver &= compiler.closedOver compiler.endScope() \ No newline at end of file