aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoey Yakimowich-Payne <jyapayne@gmail.com>2018-07-10 20:09:51 +0900
committerJoey Yakimowich-Payne <jyapayne@gmail.com>2018-07-10 20:19:51 +0900
commit0d0506675c6fc91de1fd6ac59faeece0f248ac4a (patch)
treee2be2656e25753f5f5937c26fe7357b1c358517f
parent5321014983a5dff827cecf37392b7ee99985b738 (diff)
downloadnimgen-0d0506675c6fc91de1fd6ac59faeece0f248ac4a.tar.gz
nimgen-0d0506675c6fc91de1fd6ac59faeece0f248ac4a.zip
Make static bodies replacement use regex
-rw-r--r--nimgen.nim64
1 files changed, 5 insertions, 59 deletions
diff --git a/nimgen.nim b/nimgen.nim
index 7a053bb..e520309 100644
--- a/nimgen.nim
+++ b/nimgen.nim
@@ -325,65 +325,11 @@ proc comment(file: string, pattern: string, numlines: string) =
break
proc removeStatic(filename: string) =
-
- if not fileExists(filename):
- echo "Missing file: " & filename
- return
-
- # This function should ideally be a regex. However, I could not
- # get it to work as intended with the current re implementation
- # in Nim.
- #
- # withFile(filename):
- # content = content.replacef(
- # re"(static inline.*?\))([ \r\n]*?\{([ \r\n]*?.*?)*[\n\r]\})", "$1;")
- # )
- #
- # This currently won't even run, but if the replacef function is modified
- # to not have nil checks, it will run on 1/3 of the input file. Maybe there's
- # a buffer length issue.
-
- var
- file = open(filename)
- stack: seq[string] = @[]
- foundBrace = false
- foundStatic = false
- writeOutput = true
- output = newStringofCap(getFileSize(filename))
-
- for line in file.lines():
- var modLine = line
-
- if not foundStatic:
- writeOutput = true
- if line.startswith("static inline"):
- foundStatic = true
- let index = modLine.find("{")
- if index != -1:
- foundBrace = true
- modLine.setLen(index)
- elif not foundBrace:
- writeOutput = true
- if modLine.strip().startswith("{"):
- foundBrace = true
- writeOutput = false
- else:
- if modLine.startswith("}"):
- foundBrace = false
- foundStatic = false
- output[^1] = ';'
- output &= "\n"
-
- if writeOutput:
- output &= modLine
- output &= "\n"
- writeOutput = false
-
- file.close()
-
- var f = open(filename, fmWrite)
- write(f, output)
- f.close()
+ ## Replace static function bodies with a semicolon
+ withFile(filename):
+ content = content.replace(
+ re"(?m)(static inline.*?\))(\s*\{(\s*?.*?$)*[\n\r]\})", "$1;"
+ )
proc rename(file: string, renfile: string) =
if file.splitFile().ext == ".nim":