diff options
Diffstat (limited to 'compiler/ndi.nim')
-rw-r--r-- | compiler/ndi.nim | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/compiler/ndi.nim b/compiler/ndi.nim index 41f04cf0d..cc18ab39f 100644 --- a/compiler/ndi.nim +++ b/compiler/ndi.nim @@ -12,11 +12,16 @@ import ast, msgs, ropes, options, pathutils +when defined(nimPreviewSlimSystem): + import std/[syncio, assertions] + type NdiFile* = object enabled: bool f: File buf: string + filename: AbsoluteFile + syms: seq[PSym] proc doWrite(f: var NdiFile; s: PSym; conf: ConfigRef) = f.buf.setLen 0 @@ -24,17 +29,24 @@ proc doWrite(f: var NdiFile; s: PSym; conf: ConfigRef) = f.buf.add "\t" f.buf.addInt s.info.col.int f.f.write(s.name.s, "\t") - f.f.writeRope(s.loc.r) + f.f.writeRope(s.loc.snippet) f.f.writeLine("\t", toFullPath(conf, s.info), "\t", f.buf) template writeMangledName*(f: NdiFile; s: PSym; conf: ConfigRef) = - if f.enabled: doWrite(f, s, conf) + if f.enabled: f.syms.add s proc open*(f: var NdiFile; filename: AbsoluteFile; conf: ConfigRef) = f.enabled = not filename.isEmpty if f.enabled: - f.f = open(filename.string, fmWrite, 8000) + f.filename = filename f.buf = newStringOfCap(20) -proc close*(f: var NdiFile) = - if f.enabled: close(f.f) +proc close*(f: var NdiFile, conf: ConfigRef) = + if f.enabled: + f.f = open(f.filename.string, fmWrite, 8000) + doAssert f.f != nil, f.filename.string + for s in f.syms: + doWrite(f, s, conf) + close(f.f) + f.syms.reset + f.filename.reset |