More fixes to the import system and incremental compilation
This commit is contained in:
parent
3636c74a6a
commit
9a19fad1ad
|
@ -2014,20 +2014,23 @@ proc compile*(self: Compiler, ast: seq[Declaration], file: string, lines: seq[tu
|
||||||
self.lines = lines
|
self.lines = lines
|
||||||
self.source = source
|
self.source = source
|
||||||
let pos = self.beginProgram(incremental)
|
let pos = self.beginProgram(incremental)
|
||||||
if incremental:
|
if incremental and self.replMode:
|
||||||
for i in countup(1, 2):
|
for i in countup(1, 2):
|
||||||
discard self.chunk.code.pop()
|
discard self.chunk.code.pop()
|
||||||
while not self.done():
|
while not self.done():
|
||||||
self.declaration(Declaration(self.step()))
|
self.declaration(Declaration(self.step()))
|
||||||
self.terminateProgram(pos, terminateScope)
|
self.terminateProgram(pos, terminateScope)
|
||||||
result = self.chunk
|
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) =
|
proc compileModule(self: Compiler, filename: string) =
|
||||||
## Compiles an imported module into an existing chunk.
|
## Compiles an imported module into an existing chunk.
|
||||||
## A temporary compiler object is initialized internally
|
## A temporary compiler object is initialized internally
|
||||||
let path = joinPath(splitPath(self.file).head, filename)
|
let path = joinPath(splitPath(self.file).head, filename)
|
||||||
if self.modules.containsOrIncl(path):
|
if self.modules.contains(path):
|
||||||
return
|
return
|
||||||
var lexer = newLexer()
|
var lexer = newLexer()
|
||||||
var parser = newParser()
|
var parser = newParser()
|
||||||
|
@ -2038,6 +2041,10 @@ proc compileModule(self: Compiler, filename: string) =
|
||||||
let ast = parser.parse(tokens, filename, lexer.getLines(), source)
|
let ast = parser.parse(tokens, filename, lexer.getLines(), source)
|
||||||
compiler.names.add(self.names[0])
|
compiler.names.add(self.names[0])
|
||||||
discard compiler.compile(ast, filename, lexer.getLines(), source, chunk=self.chunk, incremental=true)
|
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
|
self.closedOver &= compiler.closedOver
|
||||||
compiler.endScope()
|
compiler.endScope()
|
Loading…
Reference in New Issue