summary refs log tree commit diff stats
path: root/tinyc/tests
ModeNameSize
-rw-r--r--42test.h407log stats plain blame
-rw-r--r--abitest.c23277log stats plain blame
-rw-r--r--asmtest.S14602log stats plain blame
-rw-r--r--boundtest.c4425log stats plain blame
-rw-r--r--gcctestsuite.sh752log stats plain blame
-rw-r--r--libtcc_test.c2273log stats plain blame
d---------pp1534log stats plain
-rw-r--r--tcctest.c92227log stats plain blame
-rw-r--r--tcctest.h162log stats plain blame
-rw-r--r--testfp.c13578log stats plain blame
d---------tests28236log stats plain
-rw-r--r--vla_test.c1617log stats plain blame
f3ad5a8'>f3b8d9221 ^
aa88e150d ^
55e7d91b3 ^
aa88e150d ^
def61c9fc ^
8ca5b71c6 ^
def61c9fc ^
aa88e150d ^
b6b5a11be ^
8ca5b71c6 ^
b6b5a11be ^

9e6fb3f69 ^
9eb909baf ^
9eb909baf ^

9e6fb3f69 ^
9eb909baf ^

33b69f0ed ^
def61c9fc ^
33b69f0ed ^
9e6fb3f69 ^
def61c9fc ^
aa88e150d ^

92b8fac94 ^
9eb909baf ^

8ca5b71c6 ^
9eb909baf ^

aa88e150d ^
33b69f0ed ^
9e6fb3f69 ^
aa88e150d ^
9e6fb3f69 ^


aa88e150d ^

0b84ee167 ^


2fcc16374 ^
328e7a100 ^
2fcc16374 ^





046ed4ed2 ^
9e6fb3f69 ^
8ca5b71c6 ^
29db0d858 ^
9e6fb3f69 ^








8ca5b71c6 ^
9e6fb3f69 ^







33b69f0ed ^
9e6fb3f69 ^
aa88e150d ^
5526252fa ^
9e6fb3f69 ^

e9eab32e5 ^

0b84ee167 ^
8ca5b71c6 ^


aa88e150d ^
33b69f0ed ^
9e6fb3f69 ^
b7116a28e ^
9e6fb3f69 ^
33b69f0ed ^
aa88e150d ^
9e6fb3f69 ^
8ca5b71c6 ^
342e50e26 ^
9e6fb3f69 ^
aa88e150d ^
8ca5b71c6 ^

342e50e26 ^

7f7b13a45 ^
45accd613 ^


9e6fb3f69 ^
33b69f0ed ^
342e50e26 ^



074f276c8 ^
92b8fac94 ^
9e6fb3f69 ^
aa88e150d ^
9e6fb3f69 ^

aa88e150d ^
9e6fb3f69 ^
342e50e26 ^
69b32637b ^

9e6fb3f69 ^
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147

 
                            
                                         




                                                   
                                                                    

      
                                                                                 

                                                                          
 

                                            
 
                                                              
                                                                        
                                                                          
             
                                                        
                        
                                   
                                                  
                                        
                                                                                   
 
                                          
     
                                                

                                              
                                                   
                    

                                                                 
                                          

                        
                               
 
                                      
                                         
 

                            
                                                         

                                                                          
                                                                                                                                                         

                                           
 
                                                                                                        
                                   
                   


                                                    

                                       


                                      
               
                                                                             





                                                                           
                                                         
                                        
                                                                                             
                








                                                         
                                                                                             







                                                     
                                                                   
                                                         
                                                 
                            

                                                   

                                                                 
                                       


                                                                    
 
                                                                    
                                                           
                                                           
                          
                                                    
 
                                                                  
                               
                                                                                  
                                                                       
 

                                       

                                                                                                    
 


                                   
                                                           
                                                       



                                                                                                            
                                   
                                  
                                                                                   
       

                                                                   
 
                                                              
                                                               

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

## Implements the module handling, including the caching of modules.

import
  ast, astalgo, magicsys, std / sha1, rodread, msgs, cgendata, sigmatch, options,
  idents, os, lexer, idgen, passes, syntaxes, llstream, modulegraphs, rod,
  configuration

proc resetSystemArtifacts*(g: ModuleGraph) =
  magicsys.resetSysTypes(g)

proc newModule(graph: ModuleGraph; fileIdx: FileIndex): PSym =
  # We cannot call ``newSym`` here, because we have to circumvent the ID
  # mechanism, which we do in order to assign each module a persistent ID.
  new(result)
  result.id = -1             # for better error checking
  result.kind = skModule
  let filename = fileIdx.toFullPath
  result.name = getIdent(splitFile(filename).name)
  if not isNimIdentifier(result.name.s):
    rawMessage(graph.config, errGenerated, "invalid module name: " & result.name.s)

  result.info = newLineInfo(fileIdx, 1, 1)
  let
    pck = getPackageName(graph.config, filename)
    pck2 = if pck.len > 0: pck else: "unknown"
    pack = getIdent(pck2)
  var packSym = graph.packageSyms.strTableGet(pack)
  if packSym == nil:
    packSym = newSym(skPackage, getIdent(pck2), nil, result.info)
    initStrTable(packSym.tab)
    graph.packageSyms.strTableAdd(packSym)

  result.owner = packSym
  result.position = int fileIdx

  growCache graph.modules, int fileIdx
  graph.modules[result.position] = result

  incl(result.flags, sfUsed)
  initStrTable(result.tab)
  strTableAdd(result.tab, result) # a module knows itself
  let existing = strTableGet(packSym.tab, result.name)
  if existing != nil and existing.info.fileIndex != result.info.fileIndex:
    localError(graph.config, result.info, "module names need to be unique per Nimble package; module clashes with " & existing.info.fileIndex.toFullPath)
  # strTableIncl() for error corrections:
  discard strTableIncl(packSym.tab, result)

proc compileModule*(graph: ModuleGraph; fileIdx: FileIndex; cache: IdentCache, flags: TSymFlags): PSym =
  result = graph.getModule(fileIdx)
  if result == nil:
    #growCache gMemCacheData, fileIdx
    #gMemCacheData[fileIdx].needsRecompile = Probing
    result = newModule(graph, fileIdx)
    var rd: PRodReader
    result.flags = result.flags + flags
    if sfMainModule in result.flags:
      gMainPackageId = result.owner.id

    when false:
      if conf.cmd in {cmdCompileToC, cmdCompileToCpp, cmdCheck, cmdIdeTools}:
        rd = handleSymbolFile(result, cache)
        if result.id < 0:
          internalError("handleSymbolFile should have set the module's ID")
          return
      else:
        discard
    result.id = getModuleId(fileIdx, toFullPath(fileIdx))
    discard processModule(graph, result,
      if sfMainModule in flags and graph.config.projectIsStdin: stdin.llStreamOpen else: nil,
      rd, cache)
    #if optCaasEnabled in gGlobalOptions:
    #  gMemCacheData[fileIdx].needsRecompile = Recompiled
    #  if validFile: doHash fileIdx
  elif graph.isDirty(result):
    result.flags.excl sfDirty
    # reset module fields:
    initStrTable(result.tab)
    result.ast = nil
    discard processModule(graph, result,
      if sfMainModule in flags and graph.config.projectIsStdin: stdin.llStreamOpen else: nil,
      nil, cache)
    graph.markClientsDirty(fileIdx)
    when false:
      if checkDepMem(fileIdx) == Yes:
        result = compileModule(fileIdx, cache, flags)
      else:
        result = gCompiledModules[fileIdx]

proc importModule*(graph: ModuleGraph; s: PSym, fileIdx: FileIndex;
                   cache: IdentCache): PSym {.procvar.} =
  # this is called by the semantic checking phase
  assert graph.config != nil
  result = compileModule(graph, fileIdx, cache, {})
  graph.addDep(s, fileIdx)
  #if sfSystemModule in result.flags:
  #  localError(result.info, errAttemptToRedefine, result.name.s)
  # restore the notes for outer module:
  graph.config.notes =
      if s.owner.id == gMainPackageId: graph.config.mainPackageNotes
      else: graph.config.foreignPackageNotes

proc includeModule*(graph: ModuleGraph; s: PSym, fileIdx: FileIndex;
                    cache: IdentCache): PNode {.procvar.} =
  result = syntaxes.parseFile(fileIdx, cache, graph.config)
  graph.addDep(s, fileIdx)
  graph.addIncludeDep(s.position.FileIndex, fileIdx)

proc compileSystemModule*(graph: ModuleGraph; cache: IdentCache) =
  if graph.systemModule == nil:
    systemFileIdx = fileInfoIdx(graph.config, graph.config.libpath / "system.nim")
    discard graph.compileModule(systemFileIdx, cache, {sfSystemModule})

proc wantMainModule*(conf: ConfigRef) =
  if conf.projectFull.len == 0:
    fatal(conf, newLineInfo(conf, "command line", 1, 1), errGenerated, "command expects a filename")
  conf.projectMainIdx = int32 fileInfoIdx(conf, addFileExt(conf.projectFull, NimExt))

passes.gIncludeFile = includeModule
passes.gImportModule = importModule

proc compileProject*(graph: ModuleGraph; cache: IdentCache;
                     projectFileIdx = InvalidFileIDX) =
  let conf = graph.config
  wantMainModule(conf)
  let systemFileIdx = fileInfoIdx(conf, conf.libpath / "system.nim")
  let projectFile = if projectFileIdx == InvalidFileIDX: FileIndex(conf.projectMainIdx) else: projectFileIdx
  graph.importStack.add projectFile
  if projectFile == systemFileIdx:
    discard graph.compileModule(projectFile, cache, {sfMainModule, sfSystemModule})
  else:
    graph.compileSystemModule(cache)
    discard graph.compileModule(projectFile, cache, {sfMainModule})

proc makeModule*(graph: ModuleGraph; filename: string): PSym =
  result = graph.newModule(fileInfoIdx(graph.config, filename))
  result.id = getID()

proc makeStdinModule*(graph: ModuleGraph): PSym = graph.makeModule"stdin"