Add function to remove function bodies
This commit is contained in:
parent
69b9ee9083
commit
d6f8d140cc
4 changed files with 39 additions and 2 deletions
|
|
@ -28,6 +28,9 @@ proc c2nim*(fl, outfile: string, c2nimConfig: c2nimConfigObj) =
|
||||||
cfile = "temp-$#.c" % [outfile.extractFilename()]
|
cfile = "temp-$#.c" % [outfile.extractFilename()]
|
||||||
writeFileFlush(cfile, runCtags(file))
|
writeFileFlush(cfile, runCtags(file))
|
||||||
|
|
||||||
|
if c2nimConfig.removeBodies:
|
||||||
|
removeBodies(cfile)
|
||||||
|
|
||||||
if c2nimConfig.defines and (c2nimConfig.preprocess or c2nimConfig.ctags):
|
if c2nimConfig.defines and (c2nimConfig.preprocess or c2nimConfig.ctags):
|
||||||
prepend(cfile, getDefines(file, c2nimConfig.inline))
|
prepend(cfile, getDefines(file, c2nimConfig.inline))
|
||||||
|
|
||||||
|
|
@ -103,6 +106,8 @@ proc c2nim*(fl, outfile: string, c2nimConfig: c2nimConfigObj) =
|
||||||
except:
|
except:
|
||||||
discard
|
discard
|
||||||
else:
|
else:
|
||||||
|
if c2nimConfig.removeBodies:
|
||||||
|
reAddBodies(cfile)
|
||||||
reAddStatic(cfile)
|
reAddStatic(cfile)
|
||||||
|
|
||||||
# Nim doesn't like {.cdecl.} for type proc()
|
# Nim doesn't like {.cdecl.} for type proc()
|
||||||
|
|
|
||||||
|
|
@ -91,6 +91,36 @@ proc removeStatic*(filename: string) =
|
||||||
result.add(body.replace(re"(?m)^(.*\n?)", "//$1"))
|
result.add(body.replace(re"(?m)^(.*\n?)", "//$1"))
|
||||||
)
|
)
|
||||||
|
|
||||||
|
proc removeBodies*(filename: string) =
|
||||||
|
## Replace function bodies with a semicolon and commented
|
||||||
|
## out body
|
||||||
|
withFile(filename):
|
||||||
|
content = content.replace(
|
||||||
|
re"(?m)(.*?\))(\s*\{(\s*?.*?$)*?[\n\r]\})",
|
||||||
|
proc (m: RegexMatch, s: string): string =
|
||||||
|
let funcDecl = s[m.group(0)[0]]
|
||||||
|
let body = s[m.group(1)[0]].strip()
|
||||||
|
result = ""
|
||||||
|
|
||||||
|
result.add("$#;" % [funcDecl])
|
||||||
|
result.add(body.replace(re"(?m)^(.*\n?)", "//$1"))
|
||||||
|
)
|
||||||
|
|
||||||
|
proc reAddBodies*(filename: string) =
|
||||||
|
## Uncomment out the body and remove the semicolon. Undoes
|
||||||
|
## removeBodies
|
||||||
|
withFile(filename):
|
||||||
|
content = content.replace(
|
||||||
|
re"(?m)(.*?\))(\s*\{(\s*?.*?$)*?[\n\r]\})",
|
||||||
|
proc (m: RegexMatch, s: string): string =
|
||||||
|
let funcDecl = s[m.group(0)[0]]
|
||||||
|
let body = s[m.group(1)[0]].strip()
|
||||||
|
result = ""
|
||||||
|
|
||||||
|
result.add("$# " % [funcDecl])
|
||||||
|
result.add(body.replace(re"(?m)^\/\/(.*\n?)", "$1"))
|
||||||
|
)
|
||||||
|
|
||||||
proc reAddStatic*(filename: string) =
|
proc reAddStatic*(filename: string) =
|
||||||
## Uncomment out the body and remove the semicolon. Undoes
|
## Uncomment out the body and remove the semicolon. Undoes
|
||||||
## removeStatic
|
## removeStatic
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,7 @@ var
|
||||||
type
|
type
|
||||||
c2nimConfigObj* = object
|
c2nimConfigObj* = object
|
||||||
flags*, ppflags*: string
|
flags*, ppflags*: string
|
||||||
recurse*, inline*, preprocess*, ctags*, defines*: bool
|
recurse*, inline*, preprocess*, removeBodies*, ctags*, defines*: bool
|
||||||
dynlib*, compile*, pragma*: seq[string]
|
dynlib*, compile*, pragma*: seq[string]
|
||||||
|
|
||||||
const gDoc* = """
|
const gDoc* = """
|
||||||
|
|
|
||||||
|
|
@ -130,6 +130,8 @@ proc runFile*(file: string, cfgin: OrderedTableRef = newOrderedTable[string, str
|
||||||
c2nimConfig.inline = true
|
c2nimConfig.inline = true
|
||||||
elif action == "preprocess":
|
elif action == "preprocess":
|
||||||
c2nimConfig.preprocess = true
|
c2nimConfig.preprocess = true
|
||||||
|
elif action == "removeBodies":
|
||||||
|
c2nimConfig.removeBodies = true
|
||||||
elif action == "ctags":
|
elif action == "ctags":
|
||||||
c2nimConfig.ctags = true
|
c2nimConfig.ctags = true
|
||||||
elif action == "defines":
|
elif action == "defines":
|
||||||
|
|
@ -406,4 +408,4 @@ proc runCli*() =
|
||||||
uniq += 1
|
uniq += 1
|
||||||
|
|
||||||
for file in files:
|
for file in files:
|
||||||
runFile(file, cfg)
|
runFile(file, cfg)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue