summary refs log tree commit diff stats
path: root/tests/async/tasync_gcsafe.nim
Commit message (Expand)AuthorAgeFilesLines
* Fixes #5738 (#6059)Yuriy Glukhov2017-07-151-0/+36
bb9cc0fda686ca403f5abd0ae2f06d364c74'>9c47bb9cc ^
b654aa399 ^




72af7e682 ^


b654aa399 ^
3b43cff0f ^

b654aa399 ^
b654aa399 ^

3b43cff0f ^
b654aa399 ^

3b43cff0f ^
b654aa399 ^








3b43cff0f ^
b654aa399 ^






3b43cff0f ^
b654aa399 ^
61700861d ^
b654aa399 ^

61700861d ^
b654aa399 ^
61700861d ^
b654aa399 ^
3b43cff0f ^
61700861d ^
b654aa399 ^

61700861d ^

b654aa399 ^
61700861d ^



b654aa399 ^





61700861d ^
b654aa399 ^



61700861d ^
b654aa399 ^
61700861d ^
b654aa399 ^



61700861d ^
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78


                            
                                         




                                                   


                                                                             
 

                
    

                           
                     

                    
                   








                                
                                               






                           
                                                                     
                                  
                      

                                                        
                           
           
                                                                                
 
                                                                              
                       

                                                                          

                                                       
 



                                 





                          
                                                         



                                      
                                                                     
 
                                                        



                                     
                                                                   
#
#
#           The Nim Compiler
#        (c) Copyright 2017 Andreas Rumpf
#
#    See the file "copying.txt", included in this
#    distribution, for details about the copyright.
#

## The compiler can generate debuginfo to help debuggers in translating back
## from C/C++/JS code to Nim. The data structure has been designed to produce
## something useful with Nim's marshal module.

import sighashes

type
  FilenameMapping* = object
    package*, file*: string
    mangled*: SigHash
  EnumDesc* = object
    size*: int
    owner*: SigHash
    id*: int
    name*: string
    values*: seq[(string, int)]
  DebugInfo* = object
    version*: int
    files*: seq[FilenameMapping]
    enums*: seq[EnumDesc]
    conflicts*: bool

proc sdbmHash(package, file: string): SigHash =
  result = 0
  for i in 0..<package.len:
    result &= package[i]
  result &= '.'
  for i in 0..<file.len:
    result &= file[i]

proc register*(self: var DebugInfo; package, file: string): SigHash =
  result = sdbmHash(package, file)
  for f in self.files:
    if f.mangled == result:
      if f.package == package and f.file == file: return
      self.conflicts = true
      break
  self.files.add(FilenameMapping(package: package, file: file, mangled: result))

proc hasEnum*(self: DebugInfo; ename: string; id: int; owner: SigHash): bool =
  for en in self.enums:
    if en.owner == owner and en.name == ename and en.id == id: return true

proc registerEnum*(self: var DebugInfo; ed: EnumDesc) =
  self.enums.add ed

proc init*(self: var DebugInfo) =
  self.version = 1
  self.files = @[]
  self.enums = @[]

var gDebugInfo*: DebugInfo
debuginfo.init gDebugInfo

import marshal, streams

proc writeDebugInfo*(self: var DebugInfo; file: string) =
  let s = newFileStream(file, fmWrite)
  store(s, self)
  s.close

proc writeDebugInfo*(file: string) = writeDebugInfo(gDebugInfo, file)

proc loadDebugInfo*(self: var DebugInfo; file: string) =
  let s = newFileStream(file, fmRead)
  load(s, self)
  s.close

proc loadDebugInfo*(file: string) = loadDebugInfo(gDebugInfo, file)