summary refs log tree commit diff stats
path: root/tests/notnil
ModeNameSize
-rw-r--r--tmust_compile.nim914log stats plain blame
-rw-r--r--tnotnil.nim179log stats plain blame
-rw-r--r--tnotnil1.nim298log stats plain blame
-rw-r--r--tnotnil2.nim288log stats plain blame
-rw-r--r--tnotnil3.nim569log stats plain blame
-rw-r--r--tnotnil4.nim358log stats plain blame
-rw-r--r--tnotnil_in_generic.nim334log stats plain blame
-rw-r--r--tnotnil_in_objconstr.nim298log stats plain blame
989803591dd6d5cf'>00a4e19e8 ^
0ea4b71ee ^

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

                                                      
                     
 











                                                              



                                                             

                                                                         





                                 

                                     
                                         
                                                                 




                                               
                                        

                                                 
# Simple tool to merge C projects into a single C file

import os, sets, pegs

type
  TProcessResult = enum prSkipIncludeDir, prAddIncludeDir

proc process(dir, infile: string, outfile: TFile, 
             processed: var TSet[string]): TProcessResult =
  if processed.containsOrIncl(infile): return prSkipIncludeDir
  let toProcess = dir / infile
  if not existsFile(toProcess):
    echo "Warning: could not process: ", toProcess
    return prAddIncludeDir
  echo "adding: ", toProcess
  for line in lines(toProcess):
    if line =~ peg"""s <- ig '#include' ig '"' {[^"]+} '"' ig
                     comment <- '/*' !'*/'* '*/' / '//' .*
                     ig <- (comment / \s+)* """:
      # follow the include file:
      if process(dir, matches[0], outfile, processed) == prAddIncludeDir:
        writeln(outfile, line)
    else:
      writeln(outfile, line)

proc main(dir, outfile: string) =
  var o: TFile
  if open(o, outfile, fmWrite):
    var processed = initSet[string]()
    processed.incl(outfile)
    for infile in walkfiles(dir / "*.c"):
      discard process(dir, extractFilename(infile), o, processed)
    close(o)
  else:
    quit("Cannot open for writing: " & outfile)

if ParamCount() != 2:
  quit "Usage: cmerge directory outfile"
else:
  main(ParamStr(1), addFileExt(ParamStr(2), "c"))