summary refs log tree commit diff stats
path: root/tools/nimgrind.supp
blob: 0dffdc37f9bc175c7bf54bc28b4b47ebc6166859 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
{
    markstackandregisters_Cond
    Memcheck:Cond
    ...
    fun:markStackAndRegisters*
    ...
}
{
    markstackandregisters_Value8
    Memcheck:Value8
    ...
    fun:markStackAndRegisters*
    ...
}
{
    unmarkStackAndRegisters_Value8
    Memcheck:Value8
    ...
    fun:unmarkStackAndRegisters_zoTIuavlrCHyw3B8MBaLJA_6
    ...
}
riable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
discard """
  output: ""
"""

type
  TMsgKind = enum
    mLine, mEof
  TMsg = object {.pure, final.}
    case k: TMsgKind
    of mEof: backTo: TThreadId[int]
    of mLine: data: string

var
  consumer: TThread[TMsg]
  printedLines = 0

proc consume() {.thread.} =
  while true:
    var x = recv[TMsg]()
    if x.k == mEof: 
      x.backTo.send(printedLines)
      break
    echo x.data
    atomicInc(printedLines)

proc produce() =
  var m: TMsg
  var input = open("readme.txt")
  while not endOfFile(input):
    if consumer.ready:
      m.data = input.readLine()
      consumer.send(m)
  close(input)
  m.k = mEof
  m.backTo = mainThreadId[int]()
  consumer.send(m)
  var result = recv[int]()
  echo result
  
createThread(consumer, consume)
produce()
joinThread(consumer)

echo printedLines