summary refs log tree commit diff stats
path: root/compiler/ropes.nim
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/ropes.nim')
-rw-r--r--compiler/ropes.nim66
1 files changed, 35 insertions, 31 deletions
diff --git a/compiler/ropes.nim b/compiler/ropes.nim
index ce81aae37..fcf5dd202 100644
--- a/compiler/ropes.nim
+++ b/compiler/ropes.nim
@@ -91,13 +91,13 @@ proc writeRopeIfNotEqual*(r: PRope, filename: string): bool
 proc ropeToStr*(p: PRope): string
 proc ropef*(frmt: TFormatStr, args: varargs[PRope]): PRope
 proc appf*(c: var PRope, frmt: TFormatStr, args: varargs[PRope])
-proc RopeEqualsFile*(r: PRope, f: string): bool
+proc ropeEqualsFile*(r: PRope, f: string): bool
   # returns true if the rope r is the same as the contents of file f
-proc RopeInvariant*(r: PRope): bool
+proc ropeInvariant*(r: PRope): bool
   # exported for debugging
 # implementation
 
-var ErrorHandler*: proc(err: TRopesError, msg: string, useWarning = false)
+var errorHandler*: proc(err: TRopesError, msg: string, useWarning = false)
   # avoid dependency on msgs.nim
   
 proc ropeLen(a: PRope): int = 
@@ -126,7 +126,7 @@ proc resetRopeCache* =
   for i in low(cache)..high(cache):
     cache[i] = nil
 
-proc RopeInvariant(r: PRope): bool = 
+proc ropeInvariant(r: PRope): bool = 
   if r == nil: 
     result = true
   else: 
@@ -157,14 +157,14 @@ proc toRope(s: string): PRope =
     result = nil
   else:
     result = insertInCache(s)
-  assert(RopeInvariant(result))
+  assert(ropeInvariant(result))
 
-proc RopeSeqInsert(rs: var TRopeSeq, r: PRope, at: Natural) = 
+proc ropeSeqInsert(rs: var TRopeSeq, r: PRope, at: Natural) = 
   var length = len(rs)
   if at > length: 
-    setlen(rs, at + 1)
+    setLen(rs, at + 1)
   else: 
-    setlen(rs, length + 1)    # move old rope elements:
+    setLen(rs, length + 1)    # move old rope elements:
   for i in countdown(length, at + 1): 
     rs[i] = rs[i - 1] # this is correct, I used pen and paper to validate it
   rs[at] = r
@@ -177,8 +177,8 @@ proc newRecRopeToStr(result: var string, resultLen: var int, r: PRope) =
       add(stack, it.right)
       it = it.left
     assert(it.data != nil)
-    CopyMem(addr(result[resultLen]), addr(it.data[0]), it.length)
-    Inc(resultLen, it.length)
+    copyMem(addr(result[resultLen]), addr(it.data[0]), it.length)
+    inc(resultLen, it.length)
     assert(resultLen <= len(result))
 
 proc ropeToStr(p: PRope): string = 
@@ -227,13 +227,13 @@ proc writeRope*(f: TFile, c: PRope) =
     assert(it.data != nil)
     write(f, it.data)
 
-proc WriteRope*(head: PRope, filename: string, useWarning = false) =
-  var f: tfile
+proc writeRope*(head: PRope, filename: string, useWarning = false) =
+  var f: TFile
   if open(f, filename, fmWrite):
-    if head != nil: WriteRope(f, head)
+    if head != nil: writeRope(f, head)
     close(f)
   else:
-    ErrorHandler(rCannotOpenFile, filename, useWarning)
+    errorHandler(rCannotOpenFile, filename, useWarning)
 
 var
   rnl* = tnl.newRope
@@ -258,12 +258,12 @@ proc ropef(frmt: TFormatStr, args: varargs[PRope]): PRope =
       of '0'..'9': 
         var j = 0
         while true: 
-          j = (j * 10) + Ord(frmt[i]) - ord('0')
+          j = (j * 10) + ord(frmt[i]) - ord('0')
           inc(i)
           if (i > length + 0 - 1) or not (frmt[i] in {'0'..'9'}): break 
         num = j
         if j > high(args) + 1:
-          ErrorHandler(rInvalidFormatStr, $(j))
+          errorHandler(rInvalidFormatStr, $(j))
         else:
           app(result, args[j - 1])
       of 'n':
@@ -273,21 +273,25 @@ proc ropef(frmt: TFormatStr, args: varargs[PRope]): PRope =
         app(result, rnl)
         inc(i)
       else:
-        ErrorHandler(rInvalidFormatStr, $(frmt[i]))
+        errorHandler(rInvalidFormatStr, $(frmt[i]))
     var start = i
     while i < length:
       if frmt[i] != '$': inc(i)
       else: break
     if i - 1 >= start: 
       app(result, substr(frmt, start, i - 1))
-  assert(RopeInvariant(result))
-
-{.push stack_trace: off, line_trace: off.}
-proc `~`*(r: string): PRope =
-  # this is the new optimized "to rope" operator
-  # the mnemonic is that `~` looks a bit like a rope :)
-  return r.ropef
-{.pop.}
+  assert(ropeInvariant(result))
+
+when true:
+  template `~`*(r: string): PRope = r.ropef
+else:
+  {.push stack_trace: off, line_trace: off.}
+  proc `~`*(r: static[string]): PRope =
+    # this is the new optimized "to rope" operator
+    # the mnemonic is that `~` looks a bit like a rope :)
+    var r {.global.} = r.ropef
+    return r
+  {.pop.}
 
 proc appf(c: var PRope, frmt: TFormatStr, args: varargs[PRope]) = 
   app(c, ropef(frmt, args))
@@ -295,10 +299,10 @@ proc appf(c: var PRope, frmt: TFormatStr, args: varargs[PRope]) =
 const 
   bufSize = 1024              # 1 KB is reasonable
 
-proc auxRopeEqualsFile(r: PRope, bin: var tfile, buf: Pointer): bool = 
+proc auxRopeEqualsFile(r: PRope, bin: var TFile, buf: pointer): bool = 
   if r.data != nil:
     if r.length > bufSize:
-      ErrorHandler(rTokenTooLong, r.data)
+      errorHandler(rTokenTooLong, r.data)
       return
     var readBytes = readBuffer(bin, buf, r.length)
     result = readBytes == r.length and
@@ -307,12 +311,12 @@ proc auxRopeEqualsFile(r: PRope, bin: var tfile, buf: Pointer): bool =
     result = auxRopeEqualsFile(r.left, bin, buf)
     if result: result = auxRopeEqualsFile(r.right, bin, buf)
   
-proc RopeEqualsFile(r: PRope, f: string): bool = 
-  var bin: tfile
+proc ropeEqualsFile(r: PRope, f: string): bool = 
+  var bin: TFile
   result = open(bin, f)
   if not result: 
     return                    # not equal if file does not exist
-  var buf = alloc(BufSize)
+  var buf = alloc(bufSize)
   result = auxRopeEqualsFile(r, bin, buf)
   if result: 
     result = readBuffer(bin, buf, bufSize) == 0 # really at the end of file?
@@ -345,7 +349,7 @@ proc newCrcFromRopeAux(r: PRope, startVal: TCrc32): TCrc32 =
       inc(i)
 
 proc crcFromRope(r: PRope): TCrc32 = 
-  result = newCrcFromRopeAux(r, initCrc32)
+  result = newCrcFromRopeAux(r, InitCrc32)
 
 proc writeRopeIfNotEqual(r: PRope, filename: string): bool = 
   # returns true if overwritten