summary refs log tree commit diff stats
path: root/compiler/ndi.nim
blob: a7ca02193cda7c6881db39524a2745b9f264a36d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#
#
#           The Nim Compiler
#        (c) Copyright 2017 Andreas Rumpf
#
#    See the file "copying.txt", included in this
#    distribution, for details about the copyright.
#

## This module implements the generation of ``.ndi`` files for better debugging
## support of Nim code. "ndi" stands for "Nim debug info".

import ast, msgs, ropes

type
  NdiFile* = object
    enabled: bool
    f: File
    buf: string

proc doWrite(f: var NdiFile; s: PSym) =
  f.buf.setLen 0
  f.buf.add s.info.line.int
  f.buf.add "\t"
  f.buf.add s.info.col.int
  f.f.write(s.name.s, "\t")
  f.f.writeRope(s.loc.r)
  f.f.writeLine("\t", s.info.toFullPath, "\t", f.buf)

template writeMangledName*(f: NdiFile; s: PSym) =
  if f.enabled: doWrite(f, s)

proc open*(f: var NdiFile; filename: string) =
  f.enabled = filename.len > 0
  if f.enabled:
    f.f = open(filename, fmWrite, 8000)
    f.buf = newStringOfCap(20)

proc close*(f: var NdiFile) =
  if f.enabled: close(f.f)