From f7f14081682a24cf110ed7acd907ab2e17834b97 Mon Sep 17 00:00:00 2001 From: Grzegorz Adam Hankiewicz Date: Fri, 14 Jun 2013 20:01:57 +0200 Subject: [PATCH 01/30] Adds idetools --suggest test case. Refs #484. 1) There are too many suggestions for the given prefix. 2) The suggestions don't take into account the preceeding type. 3) trackDirty only works on caas mode. --- .gitignore | 1 + tests/caas/completion_dot_syntax.txt | 8 +++++++ tests/caas/completion_dot_syntax_dirty.nim | 25 ++++++++++++++++++++++ tests/caas/completion_dot_syntax_main.nim | 24 +++++++++++++++++++++ 4 files changed, 58 insertions(+) create mode 100644 tests/caas/completion_dot_syntax.txt create mode 100644 tests/caas/completion_dot_syntax_dirty.nim create mode 100644 tests/caas/completion_dot_syntax_main.nim diff --git a/.gitignore b/.gitignore index 03e7c35cc4..536ec9d24e 100644 --- a/.gitignore +++ b/.gitignore @@ -169,6 +169,7 @@ examples/cross_calculator/android/tags /testresults.json /tests/caas/SymbolProcRun.*/ /tests/caas/absurd_nesting +/tests/caas/completion_dot_syntax_main /tests/caas/forward_declarations /tests/caas/idetools_api /tests/caas/imported diff --git a/tests/caas/completion_dot_syntax.txt b/tests/caas/completion_dot_syntax.txt new file mode 100644 index 0000000000..dbffe265cc --- /dev/null +++ b/tests/caas/completion_dot_syntax.txt @@ -0,0 +1,8 @@ +completion_dot_syntax_main.nim +> idetools --track:$TESTNIM,24,15 --def +def\tskProc\t$MODULE.echoRemainingDollars +> idetools --trackDirty:completion_dot_syntax_dirty.nim,$TESTNIM,25,12 --suggest +sug\tskProc\tcompletion_dot_syntax_dirty.echoRemainingDollars +# The suggestion should not mention the other echoRemaining* variants. +!sug\tskProc\tcompletion_dot_syntax_dirty.echoRemainingEuros +!sug\tskProc\tcompletion_dot_syntax_dirty.echoRemainingBugs diff --git a/tests/caas/completion_dot_syntax_dirty.nim b/tests/caas/completion_dot_syntax_dirty.nim new file mode 100644 index 0000000000..6237c4e79e --- /dev/null +++ b/tests/caas/completion_dot_syntax_dirty.nim @@ -0,0 +1,25 @@ +import strutils + +# Verifies if the --suggestion switch differentiates types for dot notation. + +type + TDollar = distinct int + TEuro = distinct int + +proc echoRemainingDollars(amount: TDollar) = + echo "You have $1 dollars" % [$int(amount)] + +proc echoRemainingEuros(amount: TEuro) = + echo "You have $1 euros" % [$int(amount)] + +proc echoRemainingBugs() = + echo "You still have bugs" + +proc main = + var + d: TDollar + e: TEuro + d = TDollar(23) + e = TEuro(32) + d.echoRemainingDollars() + e.echoRemai diff --git a/tests/caas/completion_dot_syntax_main.nim b/tests/caas/completion_dot_syntax_main.nim new file mode 100644 index 0000000000..0be8c7f4fb --- /dev/null +++ b/tests/caas/completion_dot_syntax_main.nim @@ -0,0 +1,24 @@ +import strutils + +# Verifies if the --suggestion switch differentiates types for dot notation. + +type + TDollar = distinct int + TEuro = distinct int + +proc echoRemainingDollars(amount: TDollar) = + echo "You have $1 dollars" % [$int(amount)] + +proc echoRemainingEuros(amount: TEuro) = + echo "You have $1 euros" % [$int(amount)] + +proc echoRemainingBugs() = + echo "You still have bugs" + +proc main = + var + d: TDollar + e: TEuro + d = TDollar(23) + e = TEuro(32) + d.echoRemainingDollars() From 85dbc2d3065e50f7abeaee733ef309124f927688 Mon Sep 17 00:00:00 2001 From: Robert Persson Date: Tue, 2 Jul 2013 16:01:41 +0200 Subject: [PATCH 02/30] Added poly and numeric modules --- lib/pure/numeric.nim | 113 ++++++++++++ lib/pure/poly.nim | 411 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 524 insertions(+) create mode 100644 lib/pure/numeric.nim create mode 100644 lib/pure/poly.nim diff --git a/lib/pure/numeric.nim b/lib/pure/numeric.nim new file mode 100644 index 0000000000..902dadea39 --- /dev/null +++ b/lib/pure/numeric.nim @@ -0,0 +1,113 @@ +# +# +# Nimrod's Runtime Library +# (c) Copyright 2013 Robert Persson +# +# See the file "copying.txt", included in this +# distribution, for details about the copyright. +# + + +type TOneVarFunction* =proc (x:float):float + +proc brent*(xmin,xmax:float ,function:TOneVarFunction, rootx,rooty:var float,tol:float,maxiter=1000):bool= + ## Searches `function` for a root between `xmin` and `xmax` + ## using brents method. If the function value at `xmin`and `xmax` has the + ## same sign, `rootx`/`rooty` is set too the extrema value closest to x-axis + ## and false is returned. + ## Otherwise there exists at least one root and true is always returned. + ## This root is searched for at most `maxiter` iterations. + ## If `tol` tolerance is reached within `maxiter` iterations + ## the root refinement stops and true is returned. + + # see http://en.wikipedia.org/wiki/Brent%27s_method + var + a=xmin + b=xmax + c=a + d=1.0e308 + fa=function(a) + fb=function(b) + fc=fa + s=0.0 + fs=0.0 + mflag:bool + i=0 + tmp2:float + + if fa*fb>=0: + if abs(fa)tol: + if fa!=fc and fb!=fc: # inverse quadratic interpolation + s = a * fb * fc / (fa - fb) / (fa - fc) + b * fa * fc / (fb - fa) / (fb - fc) + c * fa * fb / (fc - fa) / (fc - fb) + else: #secant rule + s = b - fb * (b - a) / (fb - fa) + tmp2 = (3.0 * a + b) / 4.0 + if (not(((s > tmp2) and (s < b)) or ((s < tmp2) and (s > b)))) or + (mflag and (abs(s - b) >= (abs(b - c) / 2.0))) or + (not mflag and (abs(s - b) >= (abs(c - d) / 2.0))): + s=(a+b)/2.0 + mflag=true + else: + if ((mflag and (abs(b - c) < tol)) or (not mflag and (abs(c - d) < tol))): + s=(a+b)/2.0 + mflag=true + else: + mflag=false + fs = function(s) + d = c + c = b + fc = fb + if fa * fs<0.0: + b=s + fb=fs + else: + a=s + fa=fs + if abs(fa)maxiter: + break + + rootx=b + rooty=fb + return true + + + +when isMainModule: + var rootx=0.0 + var rooty=0.0 + var err=0.0 + + var cnt=0 + proc myf(x:float):float= + inc cnt + echo ($cnt & " : " & $x) + return x*x-200 + + + var suc=brent(-10000.0,0.2,myf,rootx,rooty,1.0e-3) + + + echo suc + echo rootx + echo rooty + + + + discard(readline(stdin)) diff --git a/lib/pure/poly.nim b/lib/pure/poly.nim new file mode 100644 index 0000000000..8333398e55 --- /dev/null +++ b/lib/pure/poly.nim @@ -0,0 +1,411 @@ +# +# +# Nimrod's Runtime Library +# (c) Copyright 2013 Robert Persson +# +# See the file "copying.txt", included in this +# distribution, for details about the copyright. +# + +import math +import strutils +import numeric + + +type + TPoly* = object + cofs:seq[float] + + +proc initPolyFromDegree(n:int):TPoly= + ## internal usage only + ## caller must initialize coefficients of poly + ## and possibly `clean` away zero exponents + var numcof=n+1 #num. coefficients is one more than degree + result.cofs=newSeq[float](numcof) + +proc degree*(p:TPoly):int= + ## Returns the degree of the polynomial, + ## that is the number of coefficients-1 + return p.cofs.len-1 + + +proc eval*(p:TPoly,x:float):float= + ## Evaluates a polynomial function value for `x` + ## quickly using Horners method + var n=p.degree + result=p.cofs[n] + dec n + while n>=0: + result = result*x+p.cofs[n] + dec n + +proc `[]` *(p:TPoly;idx:int):float= + ## Gets a coefficient of the polynomial. + ## p[2] will returns the quadric term, p[3] the cubic etc. + ## Out of bounds index will return 0.0. + if idx<0 or idx>p.degree: + return 0.0 + return p.cofs[idx] + +proc `[]=` *(p:var TPoly;idx:int,v:float)= + ## Sets an coefficient of the polynomial by index. + ## p[2] set the quadric term, p[3] the cubic etc. + ## If index is out of range for the coefficients, + ## the polynomial grows to the smallest needed degree. + if idx<0: + return + + if idx>p.degree: #polynomial must grow + echo("GROW!") + var oldlen=p.cofs.len + p.cofs.setLen(idx+1) + for q in oldlen.. =0: + yield p[i] + dec i + +proc clean*(p:var TPoly;zerotol=0.0)= + ## Removes leading zero coefficients of the polynomial. + ## An optional tolerance can be given for what's considered zero. + var n=p.degree + var relen=false + + while n>0 and abs(p[n])<=zerotol: # >0 => keep at least one coefficient + dec n + relen=true + + if relen: p.cofs.setLen(n+1) + + +proc `$` *(p:TPoly):string = + ## Gets a somewhat reasonable string representation of the polynomial + ## The format should be compatible with most online function plotters, + ## for example directly in google search + result="" + var first=true #might skip + sign if first coefficient + + for idx in countdown(p.degree,0): + var a=p[idx] + + if a==0.0: + continue + + if a>= 0.0 and not first: + result.add('+') + first=false + + if a!=1.0 or idx==0: + result=result & formatFloat(a,ffDefault,0) + if idx>=2: + result.add("x^" & $idx) + elif idx==1: + result.add("x") + + if result=="": + result="0" + + +proc derivative*(p:TPoly):TPoly= + ## Returns a new polynomial, which is the derivative of `p` + newSeq[float](result.cofs,p.degree) + for idx in 0..high(result.cofs): + result.cofs[idx]=p.cofs[idx+1]*float(idx+1) + +proc diff*(p:TPoly,x:float):float= + ## Evaluates the differentiation of a polynomial with + ## respect to `x` quickly using a modifed Horners method + var n=p.degree + result=p[n]*float(n) + dec n + while n>=1: + result = result*x+p[n]*float(n) + dec n + +proc integral*(p:TPoly):TPoly= + ## Returns a new polynomial which is the indefinite + ## integral of `p`. The constant term is set to 0.0 + result=initPolyFromDegree(p.degree+1) + result.cofs[0]=0.0 #constant arbitrary term, use 0.0 + for i in 1..high(result.cofs): + result.cofs[i]=p.cofs[i-1]/float(i) + + +proc integrate*(p:TPoly;xmin,xmax:float):float= + ## Computes the definite integral of `p` between `xmin` and `xmax` + # TODO: this can be done faster using a modified horners method, + # see 'diff' function above. + var igr=p.integral + result=igr.eval(xmax)-igr.eval(xmin) + +proc initPoly*(cofs:varargs[float]):TPoly= + ## Initializes a polynomial with given coefficients. + ## The most significant coefficient is first, so to create x^2-2x+3: + ## intiPoly(1.0,-2.0,3.0) + if len(cofs)<=0: + result.cofs= @[0.0] #need at least one coefficient + else: + # reverse order of coefficients so indexing matches degree of + # coefficient... + result.cofs= @[] + for idx in countdown(cofs.len-1,0): + result.cofs.add(cofs[idx]) + + result.clean #remove leading zero terms + + +proc divMod*(p,d:TPoly;q,r:var TPoly)= + ## Divides `p` with `d`, and stores the quotinent in `q` and + ## the remainder in `d` + var + pdeg=p.degree + ddeg=d.degree + power=p.degree-d.degree + ratio:float + + if power<0: #denominator is larger than numerator + q=initPoly(0.0) #division result is 0 + r=p #remainder is numerator + return + + q=initPolyFromDegree(power) + r=p + + for i in countdown(pdeg,ddeg): + ratio=r[i]/d[ddeg] + + q[i-ddeg]=ratio + r[i]=0.0 + + for j in countup(0,=res[high(res)]+mergetol: res.add(rootx) #dont add equal roots. + else: + #this might be a 'touching' case, check function value against + #zero tolerance + if abs(rooty)<=zerotol: + if res==nil: res= @[rootx] + elif rootx>=res[high(res)]+mergetol: res.add(rootx) #dont add equal roots. + + +proc roots*(p:TPoly,tol=1.0e-9,zerotol=1.0e-6,mergetol=1.0e-12):seq[float]= + ## Computes the real roots of the polynomial `p` + ## `tol` is the tolerance use to break searching for each root when reached. + ## `zerotol` is the tolerance, which is 'close enough' to zero to be considered a root + ## and is used to find roots for curves that only 'touch' the x-axis. + ## `mergetol` is the tolerance, of which two x-values are considered beeing the same root. + ## Returns a sequence with the solutions, or nil in case of no solutions. + var deg=p.degree + var res:seq[float]=nil + if deg<=0: + return nil + elif p.degree==1: + var linrt= -p.cofs[0]/p.cofs[1] + if linrt==inf or linrt==neginf: + return nil #constant only => no roots + return @[linrt] + elif p.degree==2: + return solveQuadric(p.cofs[2],p.cofs[1],p.cofs[0],zerotol) + else: + # degree >=3 , find min/max points of polynomial with recursive + # derivative and do a numerical search for root between each min/max + var x0,x1:float + p.getRangeForRoots(x0,x1) + var minmax=p.derivative.roots(tol,zerotol,mergetol) + if minmax!=nil: #ie. we have minimas/maximas in this function + for x in minmax.items: + addRoot(p,res,x0,x,tol,zerotol,mergetol) + x0=x + addRoot(p,res,x0,x1,tol,zerotol,mergetol) + + return res + +when isMainModule: + var ply=initPoly(1.0,-6.0,5.0,2.0) + var ply2 =initPoly(4.0,5.0,6.0) + + echo ply + echo ply2 + echo ply2-ply + + + + + var rts=ply.roots + if rts!=nil: + for i in rts: + echo formatFloat(i,ffDefault,0) + + + discard readLine(stdin) + + + + + + + + + + + + + + + + + + + \ No newline at end of file From c1155cd2a523c62da40d581a6ac79c6bca771fb0 Mon Sep 17 00:00:00 2001 From: Araq Date: Tue, 2 Jul 2013 19:32:12 +0200 Subject: [PATCH 03/30] fixes #503 --- compiler/sem.nim | 22 ++++++++++++---------- tests/reject/twrongconst.nim | 10 ++++++++++ 2 files changed, 22 insertions(+), 10 deletions(-) create mode 100644 tests/reject/twrongconst.nim diff --git a/compiler/sem.nim b/compiler/sem.nim index bcdfc7939d..4396a90931 100644 --- a/compiler/sem.nim +++ b/compiler/sem.nim @@ -141,21 +141,23 @@ proc semDirectOp(c: PContext, n: PNode, flags: TExprFlags): PNode proc semWhen(c: PContext, n: PNode, semCheck: bool = true): PNode -proc evalTypedExpr(c: PContext, e: PNode): PNode = - result = getConstExpr(c.module, e) - if result == nil: - result = evalConstExpr(c.module, e) - if result == nil or result.kind == nkEmpty: - LocalError(e.info, errConstExprExpected) - # error correction: - result = e - proc semConstExpr(c: PContext, n: PNode): PNode = var e = semExprWithType(c, n) if e == nil: LocalError(n.info, errConstExprExpected) return n - result = evalTypedExpr(c, e) + result = getConstExpr(c.module, e) + if result == nil: + result = evalConstExpr(c.module, e) + if result == nil or result.kind == nkEmpty: + if e.info != n.info: + pushInfoContext(n.info) + LocalError(e.info, errConstExprExpected) + popInfoContext() + else: + LocalError(e.info, errConstExprExpected) + # error correction: + result = e include hlo, seminst, semcall diff --git a/tests/reject/twrongconst.nim b/tests/reject/twrongconst.nim new file mode 100644 index 0000000000..16fe3bff65 --- /dev/null +++ b/tests/reject/twrongconst.nim @@ -0,0 +1,10 @@ +discard """ + output: "Error: constant expression expected" + line: 7 +""" + +var x: array[100, char] +template Foo : expr = x[42] + + +const myConst = foo From bfca977d5fc2f38c04edef2647ef01c80a810c23 Mon Sep 17 00:00:00 2001 From: Araq Date: Tue, 2 Jul 2013 19:44:40 +0200 Subject: [PATCH 04/30] fixes #505 --- compiler/semexprs.nim | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/compiler/semexprs.nim b/compiler/semexprs.nim index ff68d6b8e0..57457c1013 100644 --- a/compiler/semexprs.nim +++ b/compiler/semexprs.nim @@ -750,8 +750,11 @@ proc semEcho(c: PContext, n: PNode): PNode = checkMinSonsLen(n, 1) for i in countup(1, sonsLen(n) - 1): var arg = semExprWithType(c, n.sons[i]) - n.sons[i] = semExpr(c, buildStringify(c, arg)) - + n.sons[i] = semExprWithType(c, buildStringify(c, arg)) + let t = n.sons[i].typ + if t == nil or t.skipTypes(abstractInst).kind != tyString: + LocalError(n.info, errGenerated, + "implicitly invoked '$' does not return string") let t = n.sons[0].typ if tfNoSideEffect notin t.flags: incl(c.p.owner.flags, sfSideEffect) result = n From d1a90c6ec6c64f3fcdf39da2e54ffd67b70339c4 Mon Sep 17 00:00:00 2001 From: Robert Persson Date: Tue, 2 Jul 2013 20:55:27 +0200 Subject: [PATCH 05/30] Cleanup of poly an numeric modules Removed some test code --- lib/pure/numeric.nim | 25 ------------------------- lib/pure/poly.nim | 38 -------------------------------------- 2 files changed, 63 deletions(-) diff --git a/lib/pure/numeric.nim b/lib/pure/numeric.nim index 902dadea39..593370fbbe 100644 --- a/lib/pure/numeric.nim +++ b/lib/pure/numeric.nim @@ -86,28 +86,3 @@ proc brent*(xmin,xmax:float ,function:TOneVarFunction, rootx,rooty:var float,tol rootx=b rooty=fb return true - - - -when isMainModule: - var rootx=0.0 - var rooty=0.0 - var err=0.0 - - var cnt=0 - proc myf(x:float):float= - inc cnt - echo ($cnt & " : " & $x) - return x*x-200 - - - var suc=brent(-10000.0,0.2,myf,rootx,rooty,1.0e-3) - - - echo suc - echo rootx - echo rooty - - - - discard(readline(stdin)) diff --git a/lib/pure/poly.nim b/lib/pure/poly.nim index 8333398e55..e90bc96e84 100644 --- a/lib/pure/poly.nim +++ b/lib/pure/poly.nim @@ -371,41 +371,3 @@ proc roots*(p:TPoly,tol=1.0e-9,zerotol=1.0e-6,mergetol=1.0e-12):seq[float]= addRoot(p,res,x0,x1,tol,zerotol,mergetol) return res - -when isMainModule: - var ply=initPoly(1.0,-6.0,5.0,2.0) - var ply2 =initPoly(4.0,5.0,6.0) - - echo ply - echo ply2 - echo ply2-ply - - - - - var rts=ply.roots - if rts!=nil: - for i in rts: - echo formatFloat(i,ffDefault,0) - - - discard readLine(stdin) - - - - - - - - - - - - - - - - - - - \ No newline at end of file From 2cae55ae042c17c66ca1831092a3b0929d5566b7 Mon Sep 17 00:00:00 2001 From: Robert Persson Date: Wed, 3 Jul 2013 01:15:31 +0200 Subject: [PATCH 06/30] Fixed a mixed bag of stuff poly and numeric --- lib/pure/numeric.nim | 29 +++++++++----------- lib/pure/poly.nim | 64 +++++++++++++++++++++----------------------- 2 files changed, 42 insertions(+), 51 deletions(-) diff --git a/lib/pure/numeric.nim b/lib/pure/numeric.nim index 593370fbbe..8ef5fabda4 100644 --- a/lib/pure/numeric.nim +++ b/lib/pure/numeric.nim @@ -10,15 +10,16 @@ type TOneVarFunction* =proc (x:float):float -proc brent*(xmin,xmax:float ,function:TOneVarFunction, rootx,rooty:var float,tol:float,maxiter=1000):bool= +proc brent*(xmin,xmax:float ,function:TOneVarFunction, tol:float,maxiter=1000): + tuple[rootx, rooty: float, success: bool]= ## Searches `function` for a root between `xmin` and `xmax` ## using brents method. If the function value at `xmin`and `xmax` has the ## same sign, `rootx`/`rooty` is set too the extrema value closest to x-axis - ## and false is returned. - ## Otherwise there exists at least one root and true is always returned. + ## and succes is set to false. + ## Otherwise there exists at least one root and success is set to true. ## This root is searched for at most `maxiter` iterations. ## If `tol` tolerance is reached within `maxiter` iterations - ## the root refinement stops and true is returned. + ## the root refinement stops and success=true. # see http://en.wikipedia.org/wiki/Brent%27s_method var @@ -37,13 +38,9 @@ proc brent*(xmin,xmax:float ,function:TOneVarFunction, rootx,rooty:var float,tol if fa*fb>=0: if abs(fa) tmp2) and (s < b)) or ((s < tmp2) and (s > b)))) or - (mflag and (abs(s - b) >= (abs(b - c) / 2.0))) or - (not mflag and (abs(s - b) >= (abs(c - d) / 2.0))): + if not((s > tmp2 and s < b) or (s < tmp2 and s > b)) or + (mflag and abs(s - b) >= (abs(b - c) / 2.0)) or + (not mflag and abs(s - b) >= abs(c - d) / 2.0): s=(a+b)/2.0 mflag=true else: - if ((mflag and (abs(b - c) < tol)) or (not mflag and (abs(c - d) < tol))): + if (mflag and (abs(b - c) < tol)) or (not mflag and (abs(c - d) < tol)): s=(a+b)/2.0 mflag=true else: @@ -83,6 +80,4 @@ proc brent*(xmin,xmax:float ,function:TOneVarFunction, rootx,rooty:var float,tol if i>maxiter: break - rootx=b - rooty=fb - return true + return (b,fb,true) diff --git a/lib/pure/poly.nim b/lib/pure/poly.nim index e90bc96e84..cc77205653 100644 --- a/lib/pure/poly.nim +++ b/lib/pure/poly.nim @@ -53,11 +53,9 @@ proc `[]=` *(p:var TPoly;idx:int,v:float)= ## p[2] set the quadric term, p[3] the cubic etc. ## If index is out of range for the coefficients, ## the polynomial grows to the smallest needed degree. - if idx<0: - return + assert(idx>=0) if idx>p.degree: #polynomial must grow - echo("GROW!") var oldlen=p.cofs.len p.cofs.setLen(idx+1) for q in oldlen.. =0: @@ -94,7 +92,7 @@ proc `$` *(p:TPoly):string = var first=true #might skip + sign if first coefficient for idx in countdown(p.degree,0): - var a=p[idx] + let a=p[idx] if a==0.0: continue @@ -104,7 +102,7 @@ proc `$` *(p:TPoly):string = first=false if a!=1.0 or idx==0: - result=result & formatFloat(a,ffDefault,0) + result.add(formatFloat(a,ffDefault,0)) if idx>=2: result.add("x^" & $idx) elif idx==1: @@ -248,7 +246,7 @@ proc `-` *(p1:TPoly,p2:TPoly):TPoly= result.clean # drop zero coefficients in remainder proc `/`*(p:TPoly,f:float):TPoly= - ## Divides polynomial `p`with real number `f` + ## Divides polynomial `p` with a real number `f` result=initPolyFromDegree(p.degree) for i in 0..high(p.cofs): result[i]=p.cofs[i]/f @@ -260,7 +258,7 @@ proc `/` *(p,q:TPoly):TPoly= p.divMod(q,result,dummy) proc `mod` *(p,q:TPoly):TPoly= - ## computes the polynomial modulo operation, + ## Computes the polynomial modulo operation, ## that is the remainder op `p`/`q` var dummy:TPoly p.divMod(q,dummy,result) @@ -277,9 +275,7 @@ proc normalize*(p:var TPoly)= proc solveQuadric*(a,b,c:float;zerotol=0.0):seq[float]= ## Solves the quadric equation `ax^2+bx+c`, with a possible ## tolerance `zerotol` to find roots of curves just 'touching' - ## the x axis. Returns sequence with 1 or 2 solutions, or nil - ## in case of no real solution. - result=nil + ## the x axis. Returns sequence with 0,1 or 2 solutions. var p,q,d:float @@ -288,7 +284,7 @@ proc solveQuadric*(a,b,c:float;zerotol=0.0):seq[float]= if p==inf or p==neginf: #linear equation.. var linrt= -c/b if linrt==inf or linrt==neginf: #constant only - return nil + return @[] return @[linrt] q=c/a @@ -298,12 +294,12 @@ proc solveQuadric*(a,b,c:float;zerotol=0.0):seq[float]= #check for inside zerotol range for neg. roots var err=a*p*p-b*p+c #evaluate error at parabola center axis if(err<=zerotol): return @[-p] - return nil + return @[] else: var sr=sqrt(d) result= @[-sr-p,sr-p] -proc getRangeForRoots(p:TPoly;xmin,xmax:var float)= +proc getRangeForRoots(p:TPoly):tuple[xmin,xmax:float]= ## helper function for `roots` function ## quickly computes a range, guaranteed to contain ## all the real roots of the polynomial @@ -319,36 +315,36 @@ proc getRangeForRoots(p:TPoly;xmin,xmax:var float)= bound2=bound2+c bound2=max(1.0,bound2) - xmax=min(bound1,bound2) - xmin= -xmax + result.xmax=min(bound1,bound2) + result.xmin= -result.xmax -proc addRoot(p:TPoly,res:var seq[float],xp0,xp1,tol,zerotol,mergetol:float)= +proc addRoot(p:TPoly,res:var seq[float],xp0,xp1,tol,zerotol,mergetol:float,maxiter:int)= ## helper function for `roots` function ## try to do a numeric search for a single root in range xp0-xp1, ## adding it to `res` (allocating `res` if nil) - var rootx,rooty:float - - if brent(xp0,xp1, proc(x:float):float=p.eval(x),rootx,rooty,tol): - if res==nil: res= @[rootx] - elif rootx>=res[high(res)]+mergetol: res.add(rootx) #dont add equal roots. + var br=brent(xp0,xp1, proc(x:float):float=p.eval(x),tol) + if br.success: + if res.len==0 or br.rootx>=res[high(res)]+mergetol: #dont add equal roots. + res.add(br.rootx) else: #this might be a 'touching' case, check function value against #zero tolerance - if abs(rooty)<=zerotol: - if res==nil: res= @[rootx] - elif rootx>=res[high(res)]+mergetol: res.add(rootx) #dont add equal roots. + if abs(br.rooty)<=zerotol: + if res.len==0 or br.rootx>=res[high(res)]+mergetol: #dont add equal roots. + res.add(br.rootx) -proc roots*(p:TPoly,tol=1.0e-9,zerotol=1.0e-6,mergetol=1.0e-12):seq[float]= +proc roots*(p:TPoly,tol=1.0e-9,zerotol=1.0e-6,mergetol=1.0e-12,maxiter=1000):seq[float]= ## Computes the real roots of the polynomial `p` ## `tol` is the tolerance use to break searching for each root when reached. ## `zerotol` is the tolerance, which is 'close enough' to zero to be considered a root ## and is used to find roots for curves that only 'touch' the x-axis. ## `mergetol` is the tolerance, of which two x-values are considered beeing the same root. - ## Returns a sequence with the solutions, or nil in case of no solutions. + ## `maxiter` can be used to limit the number of iterations for each root. + ## Returns a (possibly empty) sorted sequence with the solutions. var deg=p.degree - var res:seq[float]=nil + result= @[] if deg<=0: return nil elif p.degree==1: @@ -361,13 +357,13 @@ proc roots*(p:TPoly,tol=1.0e-9,zerotol=1.0e-6,mergetol=1.0e-12):seq[float]= else: # degree >=3 , find min/max points of polynomial with recursive # derivative and do a numerical search for root between each min/max - var x0,x1:float - p.getRangeForRoots(x0,x1) + var range=p.getRangeForRoots() var minmax=p.derivative.roots(tol,zerotol,mergetol) if minmax!=nil: #ie. we have minimas/maximas in this function for x in minmax.items: - addRoot(p,res,x0,x,tol,zerotol,mergetol) - x0=x - addRoot(p,res,x0,x1,tol,zerotol,mergetol) + addRoot(p,result,range.xmin,x,tol,zerotol,mergetol,maxiter) + range.xmin=x + addRoot(p,result,range.xmin,range.xmax,tol,zerotol,mergetol,maxiter) - return res + + \ No newline at end of file From ce1399db2d60c085bfd97d64dc97f5c5754e60b7 Mon Sep 17 00:00:00 2001 From: Robert Persson Date: Wed, 3 Jul 2013 12:44:26 +0200 Subject: [PATCH 07/30] Optimized divMod in poly Made a huge speed improvement in debug mode. Only a few % in release, but the memory load should be somewhat lower. --- lib/pure/poly.nim | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/lib/pure/poly.nim b/lib/pure/poly.nim index cc77205653..d5f59cfa16 100644 --- a/lib/pure/poly.nim +++ b/lib/pure/poly.nim @@ -12,6 +12,8 @@ import strutils import numeric +import times #todo: remove + type TPoly* = object cofs:seq[float] @@ -169,28 +171,25 @@ proc divMod*(p,d:TPoly;q,r:var TPoly)= power=p.degree-d.degree ratio:float + r.cofs = p.cofs #initial remainder=numerator if power<0: #denominator is larger than numerator - q=initPoly(0.0) #division result is 0 - r=p #remainder is numerator - return + q.cofs= @ [0.0] #quotinent is 0.0 + return # keep remainder as numerator - q=initPolyFromDegree(power) - r=p + q.cofs=newSeq[float](power+1) for i in countdown(pdeg,ddeg): - ratio=r[i]/d[ddeg] + ratio=r.cofs[i]/d.cofs[ddeg] - q[i-ddeg]=ratio - r[i]=0.0 + q.cofs[i-ddeg]=ratio + r.cofs[i]=0.0 for j in countup(0, Date: Thu, 4 Jul 2013 16:18:36 +0200 Subject: [PATCH 08/30] Silences debug echo. --- lib/pure/htmlparser.nim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pure/htmlparser.nim b/lib/pure/htmlparser.nim index e1a0096f6e..d60d2e5830 100644 --- a/lib/pure/htmlparser.nim +++ b/lib/pure/htmlparser.nim @@ -460,7 +460,7 @@ proc untilElementEnd(x: var TXmlParser, result: PXmlNode, if cmpIgnoreCase(x.elemName, result.tag) == 0: next(x) else: - echo "5; expected: ", result.htmltag, " ", x.elemName + #echo "5; expected: ", result.htmltag, " ", x.elemName errors.add(expected(x, result)) # do not skip it here! break From 72ec035eba04cd50e7e6216b0d83d93898f74dea Mon Sep 17 00:00:00 2001 From: Erik Johansson Andersson Date: Thu, 4 Jul 2013 20:41:35 +0200 Subject: [PATCH 09/30] Modify babelpath Babel looks in this dir now. --- config/nimrod.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/nimrod.cfg b/config/nimrod.cfg index 18c746213e..c50051086b 100644 --- a/config/nimrod.cfg +++ b/config/nimrod.cfg @@ -33,7 +33,7 @@ path="$lib/js" path="$lib/pure/unidecode" @if nimbabel: - babelpath="$home/.babel/libs/" + babelpath="$home/.babel/pkgs/" @end @if release or quick: From 6bab7a5bda8149110d542701cb8c86c5335df816 Mon Sep 17 00:00:00 2001 From: Grzegorz Adam Hankiewicz Date: Fri, 5 Jul 2013 16:28:51 +0200 Subject: [PATCH 10/30] Documents passC/passL pragmas. Refs #506. --- doc/advopt.txt | 4 ++-- doc/nimrodc.txt | 29 +++++++++++++++++++++++++++++ lib/system.nim | 12 +++++++++--- 3 files changed, 40 insertions(+), 5 deletions(-) diff --git a/doc/advopt.txt b/doc/advopt.txt index fc3e1e4e66..baf67cc678 100644 --- a/doc/advopt.txt +++ b/doc/advopt.txt @@ -48,8 +48,8 @@ Advanced options: --cpu:SYMBOL set the target processor (cross-compilation) --debuginfo enables debug information --debugger:on|off turn Embedded Nimrod Debugger on|off - -t, --passc:OPTION pass an option to the C compiler - -l, --passl:OPTION pass an option to the linker + -t, --passC:OPTION pass an option to the C compiler + -l, --passL:OPTION pass an option to the linker --cincludes:DIR modify the C compiler header search path --clibdir:DIR modify the linker library search path --clib:LIBNAME link an additional C library diff --git a/doc/nimrodc.txt b/doc/nimrodc.txt index 4ae5eae691..5e2bfb09b1 100644 --- a/doc/nimrodc.txt +++ b/doc/nimrodc.txt @@ -292,6 +292,35 @@ The `link`:idx: pragma can be used to link an additional file with the project: {.link: "myfile.o".} +PassC pragma +------------ +The `passC`:idx: pragma can be used to pass additional parameters to the C +compiler like you would using the commandline switch ``--passC``: + +.. code-block:: Nimrod + {.passC: "-Wall -Werror".} + +Note that you can use ``gorge`` from the `system module `_ to +embed parameters from an external command at compile time: + +.. code-block:: Nimrod + {.passC: gorge("pkg-config --cflags sdl").} + +PassL pragma +------------ +The `passL`:idx: pragma can be used to pass additional parameters to the linker +like you would using the commandline switch ``--passL``: + +.. code-block:: Nimrod + {.passL: "-lSDLmain -lSDL".} + +Note that you can use ``gorge`` from the `system module `_ to +embed parameters from an external command at compile time: + +.. code-block:: Nimrod + {.passL: gorge("pkg-config --libs sdl").} + + Emit pragma ----------- The `emit`:idx: pragma can be used to directly affect the output of the diff --git a/lib/system.nim b/lib/system.nim index b60ccc306f..6750a2d22a 100644 --- a/lib/system.nim +++ b/lib/system.nim @@ -2392,8 +2392,10 @@ proc `[]=`*[T](s: var seq[T], x: TSlice[int], b: openArray[T]) = spliceImpl(s, a, L, b) proc slurp*(filename: string): string {.magic: "Slurp".} + ## This is an alias for ``staticRead``. + proc staticRead*(filename: string): string {.magic: "Slurp".} - ## compile-time ``readFile`` proc for easy `resource`:idx: embedding: + ## Compile-time ``readFile`` proc for easy `resource`:idx: embedding: ## ## .. code-block:: nimrod ## const myResource = staticRead"mydatafile.bin" @@ -2402,9 +2404,11 @@ proc staticRead*(filename: string): string {.magic: "Slurp".} proc gorge*(command: string, input = ""): string {. magic: "StaticExec".} = nil + ## This is an alias for ``staticExec``. + proc staticExec*(command: string, input = ""): string {. magic: "StaticExec".} = nil - ## executes an external process at compile-time. + ## Executes an external process at compile-time. ## if `input` is not an empty string, it will be passed as a standard input ## to the executed program. ## @@ -2412,7 +2416,9 @@ proc staticExec*(command: string, input = ""): string {. ## const buildInfo = "Revision " & staticExec("git rev-parse HEAD") & ## "\nCompiled on " & staticExec("uname -v") ## - ## ``gorge`` is an alias for ``staticExec``. + ## ``gorge`` is an alias for ``staticExec``. Note that you can use this proc + ## inside a pragma like `passC `_ or `passL + ## `_. proc `+=`*[T: TOrdinal](x: var T, y: T) {.magic: "Inc", noSideEffect.} ## Increments an ordinal From 65b899030d819c3b91f23d3085b8e6fdf1a133bd Mon Sep 17 00:00:00 2001 From: Grzegorz Adam Hankiewicz Date: Fri, 5 Jul 2013 21:37:30 +0200 Subject: [PATCH 11/30] Extends align proc with default padding parameter. --- lib/pure/strutils.nim | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/lib/pure/strutils.nim b/lib/pure/strutils.nim index 6f34b19961..e76bfab8bc 100644 --- a/lib/pure/strutils.nim +++ b/lib/pure/strutils.nim @@ -440,16 +440,23 @@ proc repeatStr*(count: int, s: string): string {.noSideEffect, result = newStringOfCap(count*s.len) for i in 0..count-1: result.add(s) -proc align*(s: string, count: int): string {. +proc align*(s: string, count: int, padding = ' '): string {. noSideEffect, rtl, extern: "nsuAlignString".} = - ## Aligns a string `s` with spaces, so that is of length `count`. Spaces are - ## added before `s` resulting in right alignment. If ``s.len >= count``, no - ## spaces are added and `s` is returned unchanged. If you need to left align - ## a string use the repeatChar proc. + ## Aligns a string `s` with `padding`, so that is of length `count`. + ## `padding` characters (by default spaces) are added before `s` resulting in + ## right alignment. If ``s.len >= count``, no spaces are added and `s` is + ## returned unchanged. If you need to left align a string use the + ## ``repeatChar`` proc. Example: + ## + ## .. code-block:: nimrod + ## assert align("abc", 4) == " abc" + ## assert align("a", 0) == "a" + ## assert align("1232", 6) == " 1232" + ## assert align("1232", 6, '#') == "##1232" if s.len < count: result = newString(count) var spaces = count - s.len - for i in 0..spaces-1: result[i] = ' ' + for i in 0..spaces-1: result[i] = padding for i in spaces..count-1: result[i] = s[i-spaces] else: result = s @@ -1211,6 +1218,7 @@ when isMainModule: doAssert align("abc", 4) == " abc" doAssert align("a", 0) == "a" doAssert align("1232", 6) == " 1232" + doAssert align("1232", 6, '#') == "##1232" echo wordWrap(""" this is a long text -- muchlongerthan10chars and here it goes""", 10, false) doAssert formatBiggestFloat(0.00000000001, ffDecimal, 11) == "0.00000000001" From e5ed6aec0e16ef833c7605f24529ce0d7962371c Mon Sep 17 00:00:00 2001 From: Yury Benesh Date: Sat, 6 Jul 2013 10:40:32 +0300 Subject: [PATCH 12/30] Moved linker flags to the end of cmd line in build.sh and bat templates --- tools/niminst/buildbat.tmpl | 4 ++-- tools/niminst/buildsh.tmpl | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/tools/niminst/buildbat.tmpl b/tools/niminst/buildbat.tmpl index 11fa97a5a0..a8dfd597fd 100644 --- a/tools/niminst/buildbat.tmpl +++ b/tools/niminst/buildbat.tmpl @@ -17,8 +17,8 @@ ECHO %CC% %COMP_FLAGS% -Ibuild -c ?{f} -o ?{changeFileExt(f, "o")} # linkCmd.add(" " & changeFileExt(f, "o")) # end for -ECHO %LINKER% %LINK_FLAGS% -o ?{firstBinPath(c)\toLower(c.name)}.exe ?linkCmd -%LINKER% %LINK_FLAGS% -o ?{firstBinPath(c)\toLower(c.name)}.exe ?linkCmd +ECHO %LINKER% -o ?{firstBinPath(c)\toLower(c.name)}.exe ?linkCmd %LINK_FLAGS% +%LINKER% -o ?{firstBinPath(c)\toLower(c.name)}.exe ?linkCmd %LINK_FLAGS% # end block diff --git a/tools/niminst/buildsh.tmpl b/tools/niminst/buildsh.tmpl index b4b830d9d7..da9c40f557 100644 --- a/tools/niminst/buildsh.tmpl +++ b/tools/niminst/buildsh.tmpl @@ -121,8 +121,8 @@ case $myos in $CC $COMP_FLAGS -Ibuild -c ?{f} -o ?{changeFileExt(f, "o")} # add(linkCmd, " \\\n" & changeFileExt(f, "o")) # end for - echo "$LINKER $LINK_FLAGS -o ?{firstBinPath(c)/toLower(c.name)} ?linkCmd" - $LINKER $LINK_FLAGS -o ?{firstBinPath(c)/toLower(c.name)} ?linkCmd + echo "$LINKER -o ?{firstBinPath(c)/toLower(c.name)} ?linkCmd $LINK_FLAGS" + $LINKER -o ?{firstBinPath(c)/toLower(c.name)} ?linkCmd $LINK_FLAGS ;; # end for *) From 4583c4ea0a9dbf8805b0e84f21a9ecd7da68146d Mon Sep 17 00:00:00 2001 From: Grzegorz Adam Hankiewicz Date: Sat, 6 Jul 2013 16:51:32 +0200 Subject: [PATCH 13/30] Adds more idetools suggest failure cases. --- tests/caas/suggest-compile.txt | 6 ++++++ tests/caas/suggest-invalid-source.txt | 26 ++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 tests/caas/suggest-invalid-source.txt diff --git a/tests/caas/suggest-compile.txt b/tests/caas/suggest-compile.txt index 66ae795ed6..a322908ac6 100644 --- a/tests/caas/suggest-compile.txt +++ b/tests/caas/suggest-compile.txt @@ -1,7 +1,13 @@ main.nim +# This example shows how the suggest feature can be used on a partial file +# using the --trackDirty switch. > idetools --trackDirty:main_dirty.nim,$TESTNIM,12,7 --suggest $SILENT skField\tx skField\ty +# Repeating the query in caas should work always and retrieve same output. +CaasRun > idetools --trackDirty:main_dirty.nim,$TESTNIM,12,7 --suggest $SILENT +CaasRun skField\tx +CaasRun skField\ty > c --verbosity:0 --hints:on SuccessX diff --git a/tests/caas/suggest-invalid-source.txt b/tests/caas/suggest-invalid-source.txt new file mode 100644 index 0000000000..7f8f1213da --- /dev/null +++ b/tests/caas/suggest-invalid-source.txt @@ -0,0 +1,26 @@ +main_dirty.nim +# A variant of the suggest-compile.txt, instead of using a "base" correct +# source, this one uses the "broken" main_dirty.nim which won't compile. The +# test tries to stress idetools to still provide a valid answer if possible, +# and at least provide the same output with repeated queries rather than dying +# after the first compilation error. + +# The first query should work and provide valid suggestions. +> idetools --track:$TESTNIM,12,6 --suggest $SILENT +skField\tx +skField\ty + +# Repeating the query should work too. +> idetools --track:$TESTNIM,12,6 --suggest $SILENT +skField\tx +skField\ty + +# Expect now a compilation failure. +> c +!SuccessX +invalid indentation + +# Repeating suggestions *after broken compilation* should work too. +> idetools --track:$TESTNIM,12,6 --suggest $SILENT +skField\tx +skField\ty From b22af9776d501f75d205358eedec790baa0d32b2 Mon Sep 17 00:00:00 2001 From: Grzegorz Adam Hankiewicz Date: Sat, 6 Jul 2013 17:04:22 +0200 Subject: [PATCH 14/30] Forces removal of nimcache dir for all caas runs. Now some test cases fail because they can't use a previous nimcache directory (which potentially could have wrong compiled code anyway). --- tests/caasdriver.nim | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/caasdriver.nim b/tests/caasdriver.nim index f6f3d4e384..2ec4c888d7 100644 --- a/tests/caasdriver.nim +++ b/tests/caasdriver.nim @@ -84,6 +84,8 @@ proc startNimrodSession(project, script: string, mode: TRunMode): if mode == SymbolProcRun: removeDir(nimcacheDir / result.nimcache) + else: + removeDir(nimcacheDir / "nimcache") if mode == CaasRun: result.nim = startProcess(NimrodBin, workingDir = dir, From 9b76435280ae143d2903da4adbdfd57457bade7a Mon Sep 17 00:00:00 2001 From: Grzegorz Adam Hankiewicz Date: Sat, 6 Jul 2013 17:56:07 +0200 Subject: [PATCH 15/30] Adds caas and idetools keywords to The One And Only Great Index. --- doc/idetools.txt | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/doc/idetools.txt b/doc/idetools.txt index 0ae29e8240..4ba4a4511e 100644 --- a/doc/idetools.txt +++ b/doc/idetools.txt @@ -11,8 +11,8 @@ Nimrod differs from many other compilers in that it is really fast, and being so fast makes it suited to provide external queries for text editors about the source code being written. Through the -``idetools`` command of `the compiler `_, any IDE can -query a ``.nim`` source file and obtain useful information like +`idetools`:idx: command of `the compiler `_, any IDE +can query a ``.nim`` source file and obtain useful information like definition of symbols or suggestions for completion. This document will guide you through the available options. If you @@ -162,12 +162,12 @@ clicks it and after a second or two the IDE displays where that symbol is defined. Such latencies would be terrible for features like symbol suggestion, plus why wait at all if we can avoid it? -The idetools command can be run as a compiler service, where you -first launch the compiler and it will stay online as a server, -accepting queries in a telnet like fashion. The advantage of staying -on is that for many queries the compiler can cache the results of -the compilation, and subsequent queries should be fast in the -millisecond range, thus being responsive enough for IDEs. +The idetools command can be run as a compiler service (`caas`:idx:), +where you first launch the compiler and it will stay online as a +server, accepting queries in a telnet like fashion. The advantage +of staying on is that for many queries the compiler can cache the +results of the compilation, and subsequent queries should be fast +in the millisecond range, thus being responsive enough for IDEs. If you want to start the server using stdin/stdout as communication you need to type:: From 9e649ffdf288d09e80ca727c8f444be548b1a571 Mon Sep 17 00:00:00 2001 From: Grzegorz Adam Hankiewicz Date: Sat, 6 Jul 2013 17:59:26 +0200 Subject: [PATCH 16/30] Mentions expected order of idetools suggest results. --- doc/idetools.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/doc/idetools.txt b/doc/idetools.txt index 4ba4a4511e..ce6062e635 100644 --- a/doc/idetools.txt +++ b/doc/idetools.txt @@ -119,7 +119,9 @@ separators!). The typical usage scenario for this option is to call it after the user has typed the dot character for `the object oriented call -syntax `_. +syntax `_. Idetools will try to return +the suggestions sorted first by scope (from innermost to outermost) +and then by item name. Invokation context From 4ed44fc6348cc09a8c809a76b6f21a456fa0d0c7 Mon Sep 17 00:00:00 2001 From: Grzegorz Adam Hankiewicz Date: Sat, 6 Jul 2013 18:51:37 +0200 Subject: [PATCH 17/30] Moves caasdriver comments into idetools document. --- doc/idetools.txt | 97 +++++++++++++++++++++++++++++++++++++++++++- tests/caasdriver.nim | 40 +----------------- 2 files changed, 96 insertions(+), 41 deletions(-) diff --git a/doc/idetools.txt b/doc/idetools.txt index ce6062e635..59e2ee49e3 100644 --- a/doc/idetools.txt +++ b/doc/idetools.txt @@ -17,7 +17,7 @@ definition of symbols or suggestions for completion. This document will guide you through the available options. If you want to look at practical examples of idetools support you can look -at the test files found in ``tests/caas/*.txt`` or `various editor +at the test files found in the `Test suite`_ or `various editor integrations `_ already available. @@ -190,7 +190,7 @@ of text it thinks necessary plus an empty line to indicate the end of the answer. You can find examples of client/server communication in the idetools -tests found in ``tests/caas/*.txt``. +tests found in the `Test suite`_. Parsing idetools output @@ -467,3 +467,96 @@ skVar --> col 2: $MODULE.writeTempFile.output col 3: TFile col 7: "" + + +Test suite +========== + +To verify that idetools is working properly there are files in the +``tests/caas/`` directory which provide unit testing. If you find +odd idetools behaviour and are able to reproduce it, you are welcome +to report it as a bug and add a test to the suite to avoid future +regressions. + + +Running the test suite +---------------------- + +At the moment idetools support is still in development so the test +suite is not integrated with the main test suite and you have to +run it manually. First you have to compile the tester:: + + $ cd my/nimrod/checkout + $ nimrod c tests/tester.nim + +Running the tester without parameters will display some options. +To run the caas test suite (and other special tests) you need to +use the `special` command. You need to run this command from the +root of the checkout or it won't be able to open the required files:: + + $ ./tests/tester special + +However this is a roundabout way of running the test suite. You can +also compile and run ``tests/caasdriver.nim`` manually. In fact, +running it manually will allow you to specify special parameters +too. Example:: + + $ cd my/nimrod/checkout/tests + $ nimrod c caasdriver.nim + +Running the ``caasdriver`` without parameters will attempt to process +all the test cases in all three operation modes. If a test succeeds +nothing will be printed and the process will exit with zero. If any +test fails, the specific line of the test preceeding the failure +and the failure itself will be dumped to stdout, along with a final +indicator of the success state and operation mode. You can pass the +parameter ``verbose`` to force all output even on successfull tests. + +The normal operation mode is called ``ProcRun`` and it involves +starting a process for each command or query, similar to running +manually the Nimrod compiler from the commandline. The ``CaasRun`` +mode starts a server process to answer all queries. The ``SymbolProcRun`` +mode is used by compiler developers. This means that running all +tests involves processing all ``*.txt`` files three times, which +can be quite time consuming. + +If you don't want to run all the test case files you can pass any +substring as a parameter to ``caasdriver``. Only files matching the +passed substring will be run. The filtering doesn't use any globbing +metacharacters, it's a plain match. For example, to run only +``*-compile*.txt`` tests in verbose mode:: + + ./caasdriver verbose -compile + + +Test case file format +--------------------- + +All the ``tests/caas/*.txt`` files encode a session with the compiler: + +* The first line indicates the main project file. + +* Lines starting with ``>`` indicate a command to be sent to the + compiler and the lines following a command include checks for + expected or forbidden output (``!`` for forbidden). + +* If a line starts with ``#`` it will be ignored completely, so you + can use that for comments. + +* Since some cases are specific to either ``ProcRun`` or ``CaasRun`` + modes, you can prefix a line with the mode and the line will be + processed only in that mode. + +* The rest of the line is treated as a `regular expression `_, + so be careful escaping metacharacters like parenthesis. + +Before the line is processed as a regular expression, some basic +variables are searched for and replaced in the tests. The variables +which will be replaced are: + +* **$TESTNIM**: filename specified in the first line of the script. +* **$MODULE**: like $TESTNIM but without extension, useful for + expected output. + +When adding a test case to the suite it is a good idea to write a +few comments about what the test is meant to verify. diff --git a/tests/caasdriver.nim b/tests/caasdriver.nim index 2ec4c888d7..28f0bae9b9 100644 --- a/tests/caasdriver.nim +++ b/tests/caasdriver.nim @@ -2,45 +2,7 @@ import osproc, streams, os, strutils, re ## Compiler as a service tester. ## -## This test cases uses the txt files in the caas/ subdirectory. -## -## Each of the text files inside encodes a session with the compiler: -## -## The first line indicates the main project file. -## -## Lines starting with '>' indicate a command to be sent to the compiler and -## the lines following a command include checks for expected or forbidden -## output (! for forbidden). -## -## If a line starts with '#' it will be ignored completely, so you can use that -## for comments. -## -## All the tests are run both in ProcRun (each command creates a separate -## process) and CaasRun (first command starts up a server and it is reused for -## the rest) modes. Since some cases are specific to either ProcRun or CaasRun -## modes, you can prefix a line with the mode and the line will be processed -## only in that mode. -## -## The rest of the line is treated as a regular expression, so be careful -## escaping metacharacters like parenthesis. Before the line is processed as a -## regular expression, some basic variables are searched for and replaced in -## the tests. The variables which will be replaced are: -## -## - $TESTNIM: filename specified in the first line of the script. -## - $MODULE: like $TESTNIM but without extension, useful for expected output. -## -## You can optionally pass parameters at the command line to modify the -## behaviour of the test suite. By default only tests which fail will be echoed -## to stdout. If you want to see all the output pass the word "verbose" as a -## parameter. -## -## If you don't want to run all the test case files, you can pass any substring -## as a parameter. Only files matching the passed substring will be run. The -## filtering doesn't use any globbing metacharacters, it's a plain match. -## -## Example to run only "*-compile*.txt" tests in verbose mode: -## -## ./caasdriver verbose -compile +## Please read docs/idetools.txt for information about this. type From 383d047763a4ef336fca7e299dd36d0c71a29d58 Mon Sep 17 00:00:00 2001 From: Grzegorz Adam Hankiewicz Date: Sat, 6 Jul 2013 19:42:36 +0200 Subject: [PATCH 18/30] Documents idetools skLabel with failure test case. --- doc/idetools.txt | 16 ++++++++++++++++ tests/caas/idetools_api.nim | 12 ++++++++++++ tests/caas/idetools_api.txt | 6 ++++++ 3 files changed, 34 insertions(+) diff --git a/doc/idetools.txt b/doc/idetools.txt index 59e2ee49e3..4d2315a0c7 100644 --- a/doc/idetools.txt +++ b/doc/idetools.txt @@ -295,6 +295,22 @@ posterior instances of the iterator. col 7: "iterates over any unicode character of the string `s`." +skLabel +------- + +| **Third column**: module + [n scope nesting] + name. +| **Fourth column**: always the empty string. +| **Docstring**: always the empty string. + +.. code-block:: nimrod + proc test(text: string) = + var found = -1 + block loops: + --> col 2: $MODULE.test.loops + col 3: "" + col 7: "" + + skLet ----- diff --git a/tests/caas/idetools_api.nim b/tests/caas/idetools_api.nim index 6327f4c227..351ec05830 100644 --- a/tests/caas/idetools_api.nim +++ b/tests/caas/idetools_api.nim @@ -41,3 +41,15 @@ proc newLit(x: int): PLiteral = PLiteral(x: x) proc newPlus(a, b: PExpr): PPlusExpr = PPlusExpr(a: a, b: b) echo eval(newPlus(newPlus(newLit(1), newLit(2)), newLit(4))) + +proc findVowelPosition(text: string) = + var found = -1 + block loops: + for i, letter in pairs(text): + for j in ['a', 'e', 'i', 'o', 'u']: + if letter == j: + found = i + break loops # leave both for-loops + echo found + +findVowelPosition("Zerg") # should output 1, position of vowel. diff --git a/tests/caas/idetools_api.txt b/tests/caas/idetools_api.txt index c4c22399e8..f4a2ee69e4 100644 --- a/tests/caas/idetools_api.txt +++ b/tests/caas/idetools_api.txt @@ -42,3 +42,9 @@ def\tskField\t$MODULE.TPerson.name\tbad_string\t > idetools --track:$TESTNIM,43,7 --def $SILENT def\tskMethod\t$MODULE.eval\tproc \(PPlusExpr\): int\t + +> idetools --track:$TESTNIM,47,8 --def $SILENT +def\tskLabel\t$MODULE.findVowelPosition.loops\t\t +# For some reason the use of the label with break displaces its position. +> idetools --track:$TESTNIM,52,16 --def $SILENT +def\tskLabel\t$MODULE.findVowelPosition.loops\t\t From baf4f8c9ebcf542fad62275f1513fd7ed62e777d Mon Sep 17 00:00:00 2001 From: Grzegorz Adam Hankiewicz Date: Sat, 6 Jul 2013 20:00:12 +0200 Subject: [PATCH 19/30] Documents idetools skMacro with failure test case. --- doc/idetools.txt | 20 ++++++++++++++++++++ tests/caas/idetools_api.nim | 30 +++++++++++++++++++++++++++++- tests/caas/idetools_api.txt | 4 ++++ 3 files changed, 53 insertions(+), 1 deletion(-) diff --git a/doc/idetools.txt b/doc/idetools.txt index 4d2315a0c7..fdc4ebde67 100644 --- a/doc/idetools.txt +++ b/doc/idetools.txt @@ -326,6 +326,26 @@ skLet col 7: "" +skMacro +------- + +The fourth column will be the empty string if the macro is being +defined, since at that point in the file the parser hasn't processed +the full line yet. The signature will be returned complete in +posterior instances of the macro. + +| **Third column**: module + [n scope nesting] + macro name. +| **Fourth column**: signature of the macro including return type. +| **Docstring**: docstring if available. + +.. code-block:: nimrod + proc testMacro() = + expect(EArithmetic): + --> col 2: idetools_api.expect + col 3: proc (varargs[expr], stmt): stmt + col 7: "" + + skMethod -------- diff --git a/tests/caas/idetools_api.nim b/tests/caas/idetools_api.nim index 351ec05830..7d27ffdf82 100644 --- a/tests/caas/idetools_api.nim +++ b/tests/caas/idetools_api.nim @@ -1,4 +1,4 @@ -import unicode, sequtils +import unicode, sequtils, macros proc test_enums() = var o: Tfile @@ -53,3 +53,31 @@ proc findVowelPosition(text: string) = echo found findVowelPosition("Zerg") # should output 1, position of vowel. + +macro expect*(exceptions: varargs[expr], body: stmt): stmt {.immediate.} = + ## Expect docstrings + let exp = callsite() + template expectBody(errorTypes, lineInfoLit: expr, + body: stmt): PNimrodNode {.dirty.} = + try: + body + assert false + except errorTypes: + nil + + var body = exp[exp.len - 1] + + var errorTypes = newNimNode(nnkBracket) + for i in countup(1, exp.len - 2): + errorTypes.add(exp[i]) + + result = getAst(expectBody(errorTypes, exp.lineinfo, body)) + +proc err = + raise newException(EArithmetic, "some exception") + +proc testMacro() = + expect(EArithmetic): + err() + +testMacro() diff --git a/tests/caas/idetools_api.txt b/tests/caas/idetools_api.txt index f4a2ee69e4..3a350f60ba 100644 --- a/tests/caas/idetools_api.txt +++ b/tests/caas/idetools_api.txt @@ -48,3 +48,7 @@ def\tskLabel\t$MODULE.findVowelPosition.loops\t\t # For some reason the use of the label with break displaces its position. > idetools --track:$TESTNIM,52,16 --def $SILENT def\tskLabel\t$MODULE.findVowelPosition.loops\t\t + +# Displaced macro usage by one character. +> idetools --track:$TESTNIM,80,2 --def $SILENT +def\tskMacro\t$MODULE.expect\tproc \(varargs\[expr\], stmt\): stmt\t From 2f0f1d0a3fcd462a5ff3273a6d414c6e8944d8ac Mon Sep 17 00:00:00 2001 From: Grzegorz Adam Hankiewicz Date: Sat, 6 Jul 2013 20:20:58 +0200 Subject: [PATCH 20/30] Adds idetools failure case for re"" being reported as a module. --- tests/caas/idetools_api.nim | 3 ++- tests/caas/idetools_api.txt | 5 +++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/tests/caas/idetools_api.nim b/tests/caas/idetools_api.nim index 7d27ffdf82..8f1061e272 100644 --- a/tests/caas/idetools_api.nim +++ b/tests/caas/idetools_api.nim @@ -1,4 +1,4 @@ -import unicode, sequtils, macros +import unicode, sequtils, macros, re proc test_enums() = var o: Tfile @@ -81,3 +81,4 @@ proc testMacro() = err() testMacro() +let notAModule = re"(\w+)=(.*)" diff --git a/tests/caas/idetools_api.txt b/tests/caas/idetools_api.txt index 3a350f60ba..035590dc37 100644 --- a/tests/caas/idetools_api.txt +++ b/tests/caas/idetools_api.txt @@ -52,3 +52,8 @@ def\tskLabel\t$MODULE.findVowelPosition.loops\t\t # Displaced macro usage by one character. > idetools --track:$TESTNIM,80,2 --def $SILENT def\tskMacro\t$MODULE.expect\tproc \(varargs\[expr\], stmt\): stmt\t + +# The syntax for extended raw string literals should not be returned as module +# but as the proc re() inside the re module. +> idetools --track:$TESTNIM,84,17 --def $SILENT +!def\tskModule From 0d2f8d5079fc5f120ba376f57efe3981d83d3270 Mon Sep 17 00:00:00 2001 From: Robert Persson Date: Sun, 7 Jul 2013 01:26:00 +0200 Subject: [PATCH 21/30] Optimized integrate function in module poly Rewrote the integrate function since the old one was quite hacky. The new one is about 7 times faster in release and 3 times faster in debug --- lib/pure/poly.nim | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/lib/pure/poly.nim b/lib/pure/poly.nim index d5f59cfa16..609e58bdce 100644 --- a/lib/pure/poly.nim +++ b/lib/pure/poly.nim @@ -11,9 +11,6 @@ import math import strutils import numeric - -import times #todo: remove - type TPoly* = object cofs:seq[float] @@ -141,11 +138,22 @@ proc integral*(p:TPoly):TPoly= proc integrate*(p:TPoly;xmin,xmax:float):float= ## Computes the definite integral of `p` between `xmin` and `xmax` - # TODO: this can be done faster using a modified horners method, - # see 'diff' function above. - var igr=p.integral - result=igr.eval(xmax)-igr.eval(xmin) + ## quickly using a modified version of Horners method + var + n=p.degree + s1=p[n]/float(n+1) + s2=s1 + fac:float + dec n + while n>=0: + fac=p[n]/float(n+1) + s1 = s1*xmin+fac + s2 = s2*xmax+fac + dec n + + result=s2*xmax-s1*xmin + proc initPoly*(cofs:varargs[float]):TPoly= ## Initializes a polynomial with given coefficients. ## The most significant coefficient is first, so to create x^2-2x+3: @@ -258,7 +266,7 @@ proc `/` *(p,q:TPoly):TPoly= proc `mod` *(p,q:TPoly):TPoly= ## Computes the polynomial modulo operation, - ## that is the remainder op `p`/`q` + ## that is the remainder of `p`/`q` var dummy:TPoly p.divMod(q,dummy,result) @@ -363,5 +371,3 @@ proc roots*(p:TPoly,tol=1.0e-9,zerotol=1.0e-6,mergetol=1.0e-12,maxiter=1000):seq addRoot(p,result,range.xmin,x,tol,zerotol,mergetol,maxiter) range.xmin=x addRoot(p,result,range.xmin,range.xmax,tol,zerotol,mergetol,maxiter) - - \ No newline at end of file From 5a1810081606cb687ec15a5e2efa69cfb74fd460 Mon Sep 17 00:00:00 2001 From: Robert Persson Date: Sun, 7 Jul 2013 01:50:10 +0200 Subject: [PATCH 22/30] Fixed some minor stuff in module poly Removed the stupid initPolyFromDegree which only served ro re-allocate results. Also fixed some minor stuff with nil return values in roots. --- lib/pure/poly.nim | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/lib/pure/poly.nim b/lib/pure/poly.nim index 609e58bdce..45e5286042 100644 --- a/lib/pure/poly.nim +++ b/lib/pure/poly.nim @@ -16,13 +16,6 @@ type cofs:seq[float] -proc initPolyFromDegree(n:int):TPoly= - ## internal usage only - ## caller must initialize coefficients of poly - ## and possibly `clean` away zero exponents - var numcof=n+1 #num. coefficients is one more than degree - result.cofs=newSeq[float](numcof) - proc degree*(p:TPoly):int= ## Returns the degree of the polynomial, ## that is the number of coefficients-1 @@ -130,7 +123,7 @@ proc diff*(p:TPoly,x:float):float= proc integral*(p:TPoly):TPoly= ## Returns a new polynomial which is the indefinite ## integral of `p`. The constant term is set to 0.0 - result=initPolyFromDegree(p.degree+1) + newSeq(result.cofs,p.cofs.len+1) result.cofs[0]=0.0 #constant arbitrary term, use 0.0 for i in 1..high(result.cofs): result.cofs[i]=p.cofs[i-1]/float(i) @@ -227,7 +220,7 @@ proc `*` *(p1:TPoly,p2:TPoly):TPoly= proc `*` *(p:TPoly,f:float):TPoly= ## Multiplies the polynomial `p` with a real number - result=initPolyFromDegree(p.degree) + newSeq(result.cofs,p.cofs.len) for i in 0..high(p.cofs): result[i]=p.cofs[i]*f result.clean @@ -254,7 +247,7 @@ proc `-` *(p1:TPoly,p2:TPoly):TPoly= proc `/`*(p:TPoly,f:float):TPoly= ## Divides polynomial `p` with a real number `f` - result=initPolyFromDegree(p.degree) + newSeq(result.cofs,p.cofs.len) for i in 0..high(p.cofs): result[i]=p.cofs[i]/f result.clean @@ -351,13 +344,12 @@ proc roots*(p:TPoly,tol=1.0e-9,zerotol=1.0e-6,mergetol=1.0e-12,maxiter=1000):seq ## `maxiter` can be used to limit the number of iterations for each root. ## Returns a (possibly empty) sorted sequence with the solutions. var deg=p.degree - result= @[] - if deg<=0: - return nil - elif p.degree==1: + if deg<=0: #constant only => no roots + return @[] + elif p.degree==1: #linear var linrt= -p.cofs[0]/p.cofs[1] if linrt==inf or linrt==neginf: - return nil #constant only => no roots + return @[] #constant only => no roots return @[linrt] elif p.degree==2: return solveQuadric(p.cofs[2],p.cofs[1],p.cofs[0],zerotol) @@ -366,8 +358,10 @@ proc roots*(p:TPoly,tol=1.0e-9,zerotol=1.0e-6,mergetol=1.0e-12,maxiter=1000):seq # derivative and do a numerical search for root between each min/max var range=p.getRangeForRoots() var minmax=p.derivative.roots(tol,zerotol,mergetol) + result= @[] if minmax!=nil: #ie. we have minimas/maximas in this function for x in minmax.items: addRoot(p,result,range.xmin,x,tol,zerotol,mergetol,maxiter) range.xmin=x addRoot(p,result,range.xmin,range.xmax,tol,zerotol,mergetol,maxiter) + From 172945de31d152e362636daca3fb968481d96bdb Mon Sep 17 00:00:00 2001 From: Grzegorz Adam Hankiewicz Date: Tue, 9 Jul 2013 23:31:13 +0200 Subject: [PATCH 23/30] Avoids usefulFact recursion with nil parameter. Fixes #518. --- compiler/guards.nim | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/compiler/guards.nim b/compiler/guards.nim index f02a53684d..c43e918d9c 100644 --- a/compiler/guards.nim +++ b/compiler/guards.nim @@ -187,7 +187,8 @@ proc usefulFact(n: PNode): PNode = # if a: # ... # We make can easily replace 'a' by '2 < x' here: - result = usefulFact(n.sym.ast) + if n.sym.ast != nil: + result = usefulFact(n.sym.ast) elif n.kind == nkStmtListExpr: result = usefulFact(n.lastSon) From b5811cc73c88890d36a7fb1bdf586440fae1725f Mon Sep 17 00:00:00 2001 From: Grzegorz Adam Hankiewicz Date: Sat, 6 Jul 2013 15:14:46 +0200 Subject: [PATCH 24/30] Adds some examples to JoinPath and / procs. --- lib/pure/os.nim | 32 +++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/lib/pure/os.nim b/lib/pure/os.nim index eaa22d351d..47586962f2 100644 --- a/lib/pure/os.nim +++ b/lib/pure/os.nim @@ -474,8 +474,17 @@ proc JoinPath*(head, tail: string): string {. ## .. code-block:: nimrod ## "usr/lib" ## - ## If head is the empty string, tail is returned. - ## If tail is the empty string, head is returned. + ## If head is the empty string, tail is returned. If tail is the empty + ## string, head is returned with a trailing path separator. If tail starts + ## with a path separator it will be removed when concatenated to head. Other + ## path separators not located on boundaries won't be modified. More + ## examples on Unix: + ## + ## .. code-block:: nimrod + ## assert JoinPath("usr", "") == "usr/" + ## assert JoinPath("", "lib") == "lib" + ## assert JoinPath("", "/lib") == "/lib" + ## assert JoinPath("usr/", "/lib") == "usr/lib" if len(head) == 0: result = tail elif head[len(head)-1] in {DirSep, AltSep}: @@ -491,15 +500,24 @@ proc JoinPath*(head, tail: string): string {. proc JoinPath*(parts: varargs[string]): string {.noSideEffect, rtl, extern: "nos$1OpenArray".} = - ## The same as `JoinPath(head, tail)`, but works with any number - ## of directory parts. + ## The same as `JoinPath(head, tail)`, but works with any number of directory + ## parts. You need to pass at least one element or the proc will assert in + ## debug builds and crash on release builds. result = parts[0] for i in 1..high(parts): result = JoinPath(result, parts[i]) proc `/` * (head, tail: string): string {.noSideEffect.} = - ## The same as ``joinPath(head, tail)`` - return joinPath(head, tail) + ## The same as ``JoinPath(head, tail)`` + ## + ## Here are some examples for Unix: + ## + ## .. code-block:: nimrod + ## assert "usr" / "" == "usr/" + ## assert "" / "lib" == "lib" + ## assert "" / "/lib" == "/lib" + ## assert "usr/" / "/lib" == "usr/lib" + return JoinPath(head, tail) proc SplitPath*(path: string): tuple[head, tail: string] {. noSideEffect, rtl, extern: "nos$1".} = @@ -1498,7 +1516,7 @@ proc getAppFilename*(): string {.rtl, extern: "nos$1", tags: [FReadIO].} = if len(result) > 0 and result[0] != DirSep: # not an absolute path? # iterate over any path in the $PATH environment variable for p in split(string(getEnv("PATH")), {PathSep}): - var x = joinPath(p, result) + var x = JoinPath(p, result) if ExistsFile(x): return x proc getApplicationFilename*(): string {.rtl, extern: "nos$1", deprecated.} = From 67cea2b9b5328e636cc90c85050a0bd6b9811945 Mon Sep 17 00:00:00 2001 From: Grzegorz Adam Hankiewicz Date: Tue, 16 Jul 2013 01:11:20 +0200 Subject: [PATCH 25/30] Explains parseHex initialization quirk. --- lib/pure/parseutils.nim | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/lib/pure/parseutils.nim b/lib/pure/parseutils.nim index 1c543e6665..c11265bfdd 100644 --- a/lib/pure/parseutils.nim +++ b/lib/pure/parseutils.nim @@ -27,8 +27,24 @@ proc toLower(c: char): char {.inline.} = proc parseHex*(s: string, number: var int, start = 0): int {. rtl, extern: "npuParseHex", noSideEffect.} = - ## parses a hexadecimal number and stores its value in ``number``. Returns - ## the number of the parsed characters or 0 in case of an error. + ## Parses a hexadecimal number and stores its value in ``number``. + ## + ## Returns the number of the parsed characters or 0 in case of an error. This + ## proc is sensitive to the already existing value of ``number`` and will + ## likely not do what you want unless you make sure ``number`` is zero. You + ## can use this feature to *chain* calls, though the result int will quickly + ## overflow. Example: + ## + ## .. code-block:: nimrod + ## var value = 0 + ## discard parseHex("0x38", value) + ## assert value == 56 + ## discard parseHex("0x34", value) + ## assert value == 56 * 256 + 52 + ## value = -1 + ## discard parseHex("0x38", value) + ## assert value == -200 + ## var i = start var foundDigit = false if s[i] == '0' and (s[i+1] == 'x' or s[i+1] == 'X'): inc(i, 2) @@ -383,6 +399,14 @@ iterator interpolatedFragments*(s: string): tuple[kind: TInterpolatedKind, when isMainModule: for k, v in interpolatedFragments("$test{} $this is ${an{ example}} "): echo "(", k, ", \"", v, "\")" + var value = 0 + discard parseHex("0x38", value) + assert value == 56 + discard parseHex("0x34", value) + assert value == 56 * 256 + 52 + value = -1 + discard parseHex("0x38", value) + assert value == -200 {.pop.} From ec6e26735132fe2a67e4c4bb74f92059d0530ce4 Mon Sep 17 00:00:00 2001 From: Grzegorz Adam Hankiewicz Date: Tue, 16 Jul 2013 02:00:25 +0200 Subject: [PATCH 26/30] Warns to not modify string findAll is iterating over. --- lib/impure/re.nim | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/impure/re.nim b/lib/impure/re.nim index ef02a3b1d3..b92d39bf02 100644 --- a/lib/impure/re.nim +++ b/lib/impure/re.nim @@ -201,7 +201,10 @@ proc find*(s: string, pattern: TRegEx, start = 0): int = return rawMatches[0] iterator findAll*(s: string, pattern: TRegEx, start = 0): string = - ## yields all matching *substrings* of `s` that match `pattern`. + ## Yields all matching *substrings* of `s` that match `pattern`. + ## + ## Note that since this is an iterator you should not modify the string you + ## are iterating over: bad things could happen. var i = int32(start) var rawMatches: array[0..maxSubpatterns * 3 - 1, cint] while true: From 2ee228d5d1b3bb6e83988e8e26d74d6d6b8b260c Mon Sep 17 00:00:00 2001 From: Grzegorz Adam Hankiewicz Date: Tue, 16 Jul 2013 02:56:50 +0200 Subject: [PATCH 27/30] Documents copyFile not copying attributes on posix. --- lib/pure/os.nim | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/lib/pure/os.nim b/lib/pure/os.nim index 47586962f2..bd5e834320 100644 --- a/lib/pure/os.nim +++ b/lib/pure/os.nim @@ -832,8 +832,13 @@ proc sameFileContent*(path1, path2: string): bool {.rtl, extern: "nos$1", proc copyFile*(source, dest: string) {.rtl, extern: "nos$1", tags: [FReadIO, FWriteIO].} = - ## Copies a file from `source` to `dest`. If this fails, - ## `EOS` is raised. + ## Copies a file from `source` to `dest`. + ## + ## If this fails, `EOS` is raised. On the Windows platform this proc will + ## copy the source file's attributes into dest. On other platforms you need + ## to use getFilePermissions and setFilePermissions to copy them by hand, + ## otherwise `dest` will inherit the default permissions of a newly created + ## file for the user. when defined(Windows): when useWinUnicode: let s = newWideCString(source) From 0226cca832f75e156218f6ddfcb9e00027ed0498 Mon Sep 17 00:00:00 2001 From: Dominik Picheta Date: Wed, 17 Jul 2013 22:28:49 +0100 Subject: [PATCH 28/30] Rebuilt csources. --- build.bat | 200 ---------------------------------------------------- build64.bat | 200 ---------------------------------------------------- 2 files changed, 400 deletions(-) delete mode 100644 build.bat delete mode 100644 build64.bat diff --git a/build.bat b/build.bat deleted file mode 100644 index 9e182d0ff8..0000000000 --- a/build.bat +++ /dev/null @@ -1,200 +0,0 @@ -@echo off -REM Generated by niminst -SET CC=gcc -SET LINKER=gcc -SET COMP_FLAGS=-w -O3 -fno-strict-aliasing -SET LINK_FLAGS= - -REM call the compiler: - -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\nimrod.c -o build\1_1\nimrod.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\nimrod.c -o build\1_1\nimrod.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\system.c -o build\1_1\system.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\system.c -o build\1_1\system.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\commands.c -o build\1_1\commands.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\commands.c -o build\1_1\commands.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\os.c -o build\1_1\os.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\os.c -o build\1_1\os.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\strutils.c -o build\1_1\strutils.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\strutils.c -o build\1_1\strutils.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\parseutils.c -o build\1_1\parseutils.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\parseutils.c -o build\1_1\parseutils.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\times.c -o build\1_1\times.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\times.c -o build\1_1\times.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\winlean.c -o build\1_1\winlean.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\winlean.c -o build\1_1\winlean.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\msgs.c -o build\1_1\msgs.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\msgs.c -o build\1_1\msgs.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\options.c -o build\1_1\options.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\options.c -o build\1_1\options.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\lists.c -o build\1_1\lists.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\lists.c -o build\1_1\lists.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\strtabs.c -o build\1_1\strtabs.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\strtabs.c -o build\1_1\strtabs.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\hashes.c -o build\1_1\hashes.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\hashes.c -o build\1_1\hashes.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\tables.c -o build\1_1\tables.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\tables.c -o build\1_1\tables.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\math.c -o build\1_1\math.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\math.c -o build\1_1\math.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\sockets.c -o build\1_1\sockets.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\sockets.c -o build\1_1\sockets.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\ropes.c -o build\1_1\ropes.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\ropes.c -o build\1_1\ropes.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\platform.c -o build\1_1\platform.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\platform.c -o build\1_1\platform.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\crc.c -o build\1_1\crc.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\crc.c -o build\1_1\crc.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\nversion.c -o build\1_1\nversion.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\nversion.c -o build\1_1\nversion.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\condsyms.c -o build\1_1\condsyms.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\condsyms.c -o build\1_1\condsyms.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\ast.c -o build\1_1\ast.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\ast.c -o build\1_1\ast.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\idents.c -o build\1_1\idents.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\idents.c -o build\1_1\idents.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\intsets.c -o build\1_1\intsets.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\intsets.c -o build\1_1\intsets.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\idgen.c -o build\1_1\idgen.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\idgen.c -o build\1_1\idgen.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\astalgo.c -o build\1_1\astalgo.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\astalgo.c -o build\1_1\astalgo.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\rodutils.c -o build\1_1\rodutils.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\rodutils.c -o build\1_1\rodutils.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\extccomp.c -o build\1_1\extccomp.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\extccomp.c -o build\1_1\extccomp.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\osproc.c -o build\1_1\osproc.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\osproc.c -o build\1_1\osproc.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\streams.c -o build\1_1\streams.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\streams.c -o build\1_1\streams.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\wordrecg.c -o build\1_1\wordrecg.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\wordrecg.c -o build\1_1\wordrecg.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\babelcmd.c -o build\1_1\babelcmd.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\babelcmd.c -o build\1_1\babelcmd.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\lexer.c -o build\1_1\lexer.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\lexer.c -o build\1_1\lexer.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\nimlexbase.c -o build\1_1\nimlexbase.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\nimlexbase.c -o build\1_1\nimlexbase.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\llstream.c -o build\1_1\llstream.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\llstream.c -o build\1_1\llstream.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\nimconf.c -o build\1_1\nimconf.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\nimconf.c -o build\1_1\nimconf.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\main.c -o build\1_1\main.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\main.c -o build\1_1\main.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\syntaxes.c -o build\1_1\syntaxes.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\syntaxes.c -o build\1_1\syntaxes.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\parser.c -o build\1_1\parser.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\parser.c -o build\1_1\parser.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\pbraces.c -o build\1_1\pbraces.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\pbraces.c -o build\1_1\pbraces.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\filters.c -o build\1_1\filters.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\filters.c -o build\1_1\filters.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\renderer.c -o build\1_1\renderer.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\renderer.c -o build\1_1\renderer.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\filter_tmpl.c -o build\1_1\filter_tmpl.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\filter_tmpl.c -o build\1_1\filter_tmpl.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\rodread.c -o build\1_1\rodread.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\rodread.c -o build\1_1\rodread.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\types.c -o build\1_1\types.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\types.c -o build\1_1\types.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\trees.c -o build\1_1\trees.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\trees.c -o build\1_1\trees.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\memfiles.c -o build\1_1\memfiles.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\memfiles.c -o build\1_1\memfiles.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\rodwrite.c -o build\1_1\rodwrite.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\rodwrite.c -o build\1_1\rodwrite.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\passes.c -o build\1_1\passes.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\passes.c -o build\1_1\passes.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\magicsys.c -o build\1_1\magicsys.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\magicsys.c -o build\1_1\magicsys.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\nimsets.c -o build\1_1\nimsets.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\nimsets.c -o build\1_1\nimsets.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\bitsets.c -o build\1_1\bitsets.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\bitsets.c -o build\1_1\bitsets.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\semthreads.c -o build\1_1\semthreads.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\semthreads.c -o build\1_1\semthreads.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\importer.c -o build\1_1\importer.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\importer.c -o build\1_1\importer.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\lookups.c -o build\1_1\lookups.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\lookups.c -o build\1_1\lookups.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\semdata.c -o build\1_1\semdata.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\semdata.c -o build\1_1\semdata.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\treetab.c -o build\1_1\treetab.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\treetab.c -o build\1_1\treetab.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\evals.c -o build\1_1\evals.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\evals.c -o build\1_1\evals.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\semfold.c -o build\1_1\semfold.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\semfold.c -o build\1_1\semfold.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\saturate.c -o build\1_1\saturate.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\saturate.c -o build\1_1\saturate.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\transf.c -o build\1_1\transf.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\transf.c -o build\1_1\transf.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\cgmeth.c -o build\1_1\cgmeth.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\cgmeth.c -o build\1_1\cgmeth.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\sempass2.c -o build\1_1\sempass2.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\sempass2.c -o build\1_1\sempass2.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\lambdalifting.c -o build\1_1\lambdalifting.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\lambdalifting.c -o build\1_1\lambdalifting.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\evaltempl.c -o build\1_1\evaltempl.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\evaltempl.c -o build\1_1\evaltempl.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\sem.c -o build\1_1\sem.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\sem.c -o build\1_1\sem.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\procfind.c -o build\1_1\procfind.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\procfind.c -o build\1_1\procfind.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\pragmas.c -o build\1_1\pragmas.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\pragmas.c -o build\1_1\pragmas.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\semtypinst.c -o build\1_1\semtypinst.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\semtypinst.c -o build\1_1\semtypinst.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\sigmatch.c -o build\1_1\sigmatch.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\sigmatch.c -o build\1_1\sigmatch.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\parampatterns.c -o build\1_1\parampatterns.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\parampatterns.c -o build\1_1\parampatterns.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\docgen.c -o build\1_1\docgen.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\docgen.c -o build\1_1\docgen.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\rstast.c -o build\1_1\rstast.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\rstast.c -o build\1_1\rstast.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\rst.c -o build\1_1\rst.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\rst.c -o build\1_1\rst.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\rstgen.c -o build\1_1\rstgen.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\rstgen.c -o build\1_1\rstgen.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\highlite.c -o build\1_1\highlite.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\highlite.c -o build\1_1\highlite.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\algorithm.c -o build\1_1\algorithm.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\algorithm.c -o build\1_1\algorithm.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\aliases.c -o build\1_1\aliases.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\aliases.c -o build\1_1\aliases.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\patterns.c -o build\1_1\patterns.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\patterns.c -o build\1_1\patterns.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\cgen.c -o build\1_1\cgen.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\cgen.c -o build\1_1\cgen.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\ccgutils.c -o build\1_1\ccgutils.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\ccgutils.c -o build\1_1\ccgutils.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\cgendata.c -o build\1_1\cgendata.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\cgendata.c -o build\1_1\cgendata.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\ccgmerge.c -o build\1_1\ccgmerge.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\ccgmerge.c -o build\1_1\ccgmerge.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\jsgen.c -o build\1_1\jsgen.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\jsgen.c -o build\1_1\jsgen.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\json.c -o build\1_1\json.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\json.c -o build\1_1\json.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\lexbase.c -o build\1_1\lexbase.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\lexbase.c -o build\1_1\lexbase.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\unicode.c -o build\1_1\unicode.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\unicode.c -o build\1_1\unicode.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\passaux.c -o build\1_1\passaux.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\passaux.c -o build\1_1\passaux.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\depends.c -o build\1_1\depends.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\depends.c -o build\1_1\depends.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\docgen2.c -o build\1_1\docgen2.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\docgen2.c -o build\1_1\docgen2.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\service.c -o build\1_1\service.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\service.c -o build\1_1\service.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\parseopt.c -o build\1_1\parseopt.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_1\parseopt.c -o build\1_1\parseopt.o - -ECHO %LINKER% %LINK_FLAGS% -o bin\nimrod.exe build\1_1\nimrod.o build\1_1\system.o build\1_1\commands.o build\1_1\os.o build\1_1\strutils.o build\1_1\parseutils.o build\1_1\times.o build\1_1\winlean.o build\1_1\msgs.o build\1_1\options.o build\1_1\lists.o build\1_1\strtabs.o build\1_1\hashes.o build\1_1\tables.o build\1_1\math.o build\1_1\sockets.o build\1_1\ropes.o build\1_1\platform.o build\1_1\crc.o build\1_1\nversion.o build\1_1\condsyms.o build\1_1\ast.o build\1_1\idents.o build\1_1\intsets.o build\1_1\idgen.o build\1_1\astalgo.o build\1_1\rodutils.o build\1_1\extccomp.o build\1_1\osproc.o build\1_1\streams.o build\1_1\wordrecg.o build\1_1\babelcmd.o build\1_1\lexer.o build\1_1\nimlexbase.o build\1_1\llstream.o build\1_1\nimconf.o build\1_1\main.o build\1_1\syntaxes.o build\1_1\parser.o build\1_1\pbraces.o build\1_1\filters.o build\1_1\renderer.o build\1_1\filter_tmpl.o build\1_1\rodread.o build\1_1\types.o build\1_1\trees.o build\1_1\memfiles.o build\1_1\rodwrite.o build\1_1\passes.o build\1_1\magicsys.o build\1_1\nimsets.o build\1_1\bitsets.o build\1_1\semthreads.o build\1_1\importer.o build\1_1\lookups.o build\1_1\semdata.o build\1_1\treetab.o build\1_1\evals.o build\1_1\semfold.o build\1_1\saturate.o build\1_1\transf.o build\1_1\cgmeth.o build\1_1\sempass2.o build\1_1\lambdalifting.o build\1_1\evaltempl.o build\1_1\sem.o build\1_1\procfind.o build\1_1\pragmas.o build\1_1\semtypinst.o build\1_1\sigmatch.o build\1_1\parampatterns.o build\1_1\docgen.o build\1_1\rstast.o build\1_1\rst.o build\1_1\rstgen.o build\1_1\highlite.o build\1_1\algorithm.o build\1_1\aliases.o build\1_1\patterns.o build\1_1\cgen.o build\1_1\ccgutils.o build\1_1\cgendata.o build\1_1\ccgmerge.o build\1_1\jsgen.o build\1_1\json.o build\1_1\lexbase.o build\1_1\unicode.o build\1_1\passaux.o build\1_1\depends.o build\1_1\docgen2.o build\1_1\service.o build\1_1\parseopt.o -%LINKER% %LINK_FLAGS% -o bin\nimrod.exe build\1_1\nimrod.o build\1_1\system.o build\1_1\commands.o build\1_1\os.o build\1_1\strutils.o build\1_1\parseutils.o build\1_1\times.o build\1_1\winlean.o build\1_1\msgs.o build\1_1\options.o build\1_1\lists.o build\1_1\strtabs.o build\1_1\hashes.o build\1_1\tables.o build\1_1\math.o build\1_1\sockets.o build\1_1\ropes.o build\1_1\platform.o build\1_1\crc.o build\1_1\nversion.o build\1_1\condsyms.o build\1_1\ast.o build\1_1\idents.o build\1_1\intsets.o build\1_1\idgen.o build\1_1\astalgo.o build\1_1\rodutils.o build\1_1\extccomp.o build\1_1\osproc.o build\1_1\streams.o build\1_1\wordrecg.o build\1_1\babelcmd.o build\1_1\lexer.o build\1_1\nimlexbase.o build\1_1\llstream.o build\1_1\nimconf.o build\1_1\main.o build\1_1\syntaxes.o build\1_1\parser.o build\1_1\pbraces.o build\1_1\filters.o build\1_1\renderer.o build\1_1\filter_tmpl.o build\1_1\rodread.o build\1_1\types.o build\1_1\trees.o build\1_1\memfiles.o build\1_1\rodwrite.o build\1_1\passes.o build\1_1\magicsys.o build\1_1\nimsets.o build\1_1\bitsets.o build\1_1\semthreads.o build\1_1\importer.o build\1_1\lookups.o build\1_1\semdata.o build\1_1\treetab.o build\1_1\evals.o build\1_1\semfold.o build\1_1\saturate.o build\1_1\transf.o build\1_1\cgmeth.o build\1_1\sempass2.o build\1_1\lambdalifting.o build\1_1\evaltempl.o build\1_1\sem.o build\1_1\procfind.o build\1_1\pragmas.o build\1_1\semtypinst.o build\1_1\sigmatch.o build\1_1\parampatterns.o build\1_1\docgen.o build\1_1\rstast.o build\1_1\rst.o build\1_1\rstgen.o build\1_1\highlite.o build\1_1\algorithm.o build\1_1\aliases.o build\1_1\patterns.o build\1_1\cgen.o build\1_1\ccgutils.o build\1_1\cgendata.o build\1_1\ccgmerge.o build\1_1\jsgen.o build\1_1\json.o build\1_1\lexbase.o build\1_1\unicode.o build\1_1\passaux.o build\1_1\depends.o build\1_1\docgen2.o build\1_1\service.o build\1_1\parseopt.o - - -ECHO SUCCESS - diff --git a/build64.bat b/build64.bat deleted file mode 100644 index 3238b7c229..0000000000 --- a/build64.bat +++ /dev/null @@ -1,200 +0,0 @@ -@echo off -REM Generated by niminst -SET CC=gcc -SET LINKER=gcc -SET COMP_FLAGS=-w -O3 -fno-strict-aliasing -SET LINK_FLAGS= - -REM call the compiler: - -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\nimrod.c -o build\1_2\nimrod.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\nimrod.c -o build\1_2\nimrod.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\system.c -o build\1_2\system.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\system.c -o build\1_2\system.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\commands.c -o build\1_2\commands.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\commands.c -o build\1_2\commands.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\os.c -o build\1_2\os.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\os.c -o build\1_2\os.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\strutils.c -o build\1_2\strutils.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\strutils.c -o build\1_2\strutils.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\parseutils.c -o build\1_2\parseutils.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\parseutils.c -o build\1_2\parseutils.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\times.c -o build\1_2\times.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\times.c -o build\1_2\times.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\winlean.c -o build\1_2\winlean.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\winlean.c -o build\1_2\winlean.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\msgs.c -o build\1_2\msgs.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\msgs.c -o build\1_2\msgs.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\options.c -o build\1_2\options.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\options.c -o build\1_2\options.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\lists.c -o build\1_2\lists.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\lists.c -o build\1_2\lists.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\strtabs.c -o build\1_2\strtabs.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\strtabs.c -o build\1_2\strtabs.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\hashes.c -o build\1_2\hashes.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\hashes.c -o build\1_2\hashes.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\tables.c -o build\1_2\tables.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\tables.c -o build\1_2\tables.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\math.c -o build\1_2\math.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\math.c -o build\1_2\math.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\sockets.c -o build\1_2\sockets.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\sockets.c -o build\1_2\sockets.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\ropes.c -o build\1_2\ropes.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\ropes.c -o build\1_2\ropes.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\platform.c -o build\1_2\platform.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\platform.c -o build\1_2\platform.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\crc.c -o build\1_2\crc.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\crc.c -o build\1_2\crc.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\nversion.c -o build\1_2\nversion.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\nversion.c -o build\1_2\nversion.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\condsyms.c -o build\1_2\condsyms.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\condsyms.c -o build\1_2\condsyms.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\ast.c -o build\1_2\ast.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\ast.c -o build\1_2\ast.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\idents.c -o build\1_2\idents.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\idents.c -o build\1_2\idents.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\intsets.c -o build\1_2\intsets.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\intsets.c -o build\1_2\intsets.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\idgen.c -o build\1_2\idgen.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\idgen.c -o build\1_2\idgen.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\astalgo.c -o build\1_2\astalgo.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\astalgo.c -o build\1_2\astalgo.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\rodutils.c -o build\1_2\rodutils.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\rodutils.c -o build\1_2\rodutils.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\extccomp.c -o build\1_2\extccomp.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\extccomp.c -o build\1_2\extccomp.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\osproc.c -o build\1_2\osproc.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\osproc.c -o build\1_2\osproc.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\streams.c -o build\1_2\streams.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\streams.c -o build\1_2\streams.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\wordrecg.c -o build\1_2\wordrecg.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\wordrecg.c -o build\1_2\wordrecg.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\babelcmd.c -o build\1_2\babelcmd.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\babelcmd.c -o build\1_2\babelcmd.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\lexer.c -o build\1_2\lexer.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\lexer.c -o build\1_2\lexer.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\nimlexbase.c -o build\1_2\nimlexbase.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\nimlexbase.c -o build\1_2\nimlexbase.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\llstream.c -o build\1_2\llstream.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\llstream.c -o build\1_2\llstream.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\nimconf.c -o build\1_2\nimconf.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\nimconf.c -o build\1_2\nimconf.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\main.c -o build\1_2\main.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\main.c -o build\1_2\main.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\syntaxes.c -o build\1_2\syntaxes.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\syntaxes.c -o build\1_2\syntaxes.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\parser.c -o build\1_2\parser.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\parser.c -o build\1_2\parser.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\pbraces.c -o build\1_2\pbraces.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\pbraces.c -o build\1_2\pbraces.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\filters.c -o build\1_2\filters.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\filters.c -o build\1_2\filters.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\renderer.c -o build\1_2\renderer.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\renderer.c -o build\1_2\renderer.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\filter_tmpl.c -o build\1_2\filter_tmpl.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\filter_tmpl.c -o build\1_2\filter_tmpl.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\rodread.c -o build\1_2\rodread.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\rodread.c -o build\1_2\rodread.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\types.c -o build\1_2\types.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\types.c -o build\1_2\types.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\trees.c -o build\1_2\trees.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\trees.c -o build\1_2\trees.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\memfiles.c -o build\1_2\memfiles.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\memfiles.c -o build\1_2\memfiles.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\rodwrite.c -o build\1_2\rodwrite.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\rodwrite.c -o build\1_2\rodwrite.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\passes.c -o build\1_2\passes.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\passes.c -o build\1_2\passes.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\magicsys.c -o build\1_2\magicsys.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\magicsys.c -o build\1_2\magicsys.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\nimsets.c -o build\1_2\nimsets.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\nimsets.c -o build\1_2\nimsets.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\bitsets.c -o build\1_2\bitsets.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\bitsets.c -o build\1_2\bitsets.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\semthreads.c -o build\1_2\semthreads.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\semthreads.c -o build\1_2\semthreads.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\importer.c -o build\1_2\importer.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\importer.c -o build\1_2\importer.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\lookups.c -o build\1_2\lookups.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\lookups.c -o build\1_2\lookups.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\semdata.c -o build\1_2\semdata.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\semdata.c -o build\1_2\semdata.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\treetab.c -o build\1_2\treetab.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\treetab.c -o build\1_2\treetab.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\evals.c -o build\1_2\evals.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\evals.c -o build\1_2\evals.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\semfold.c -o build\1_2\semfold.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\semfold.c -o build\1_2\semfold.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\saturate.c -o build\1_2\saturate.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\saturate.c -o build\1_2\saturate.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\transf.c -o build\1_2\transf.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\transf.c -o build\1_2\transf.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\cgmeth.c -o build\1_2\cgmeth.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\cgmeth.c -o build\1_2\cgmeth.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\sempass2.c -o build\1_2\sempass2.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\sempass2.c -o build\1_2\sempass2.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\lambdalifting.c -o build\1_2\lambdalifting.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\lambdalifting.c -o build\1_2\lambdalifting.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\evaltempl.c -o build\1_2\evaltempl.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\evaltempl.c -o build\1_2\evaltempl.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\sem.c -o build\1_2\sem.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\sem.c -o build\1_2\sem.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\procfind.c -o build\1_2\procfind.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\procfind.c -o build\1_2\procfind.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\pragmas.c -o build\1_2\pragmas.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\pragmas.c -o build\1_2\pragmas.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\semtypinst.c -o build\1_2\semtypinst.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\semtypinst.c -o build\1_2\semtypinst.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\sigmatch.c -o build\1_2\sigmatch.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\sigmatch.c -o build\1_2\sigmatch.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\parampatterns.c -o build\1_2\parampatterns.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\parampatterns.c -o build\1_2\parampatterns.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\docgen.c -o build\1_2\docgen.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\docgen.c -o build\1_2\docgen.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\rstast.c -o build\1_2\rstast.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\rstast.c -o build\1_2\rstast.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\rst.c -o build\1_2\rst.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\rst.c -o build\1_2\rst.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\rstgen.c -o build\1_2\rstgen.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\rstgen.c -o build\1_2\rstgen.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\highlite.c -o build\1_2\highlite.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\highlite.c -o build\1_2\highlite.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\algorithm.c -o build\1_2\algorithm.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\algorithm.c -o build\1_2\algorithm.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\aliases.c -o build\1_2\aliases.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\aliases.c -o build\1_2\aliases.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\patterns.c -o build\1_2\patterns.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\patterns.c -o build\1_2\patterns.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\cgen.c -o build\1_2\cgen.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\cgen.c -o build\1_2\cgen.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\ccgutils.c -o build\1_2\ccgutils.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\ccgutils.c -o build\1_2\ccgutils.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\cgendata.c -o build\1_2\cgendata.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\cgendata.c -o build\1_2\cgendata.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\ccgmerge.c -o build\1_2\ccgmerge.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\ccgmerge.c -o build\1_2\ccgmerge.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\jsgen.c -o build\1_2\jsgen.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\jsgen.c -o build\1_2\jsgen.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\json.c -o build\1_2\json.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\json.c -o build\1_2\json.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\lexbase.c -o build\1_2\lexbase.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\lexbase.c -o build\1_2\lexbase.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\unicode.c -o build\1_2\unicode.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\unicode.c -o build\1_2\unicode.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\passaux.c -o build\1_2\passaux.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\passaux.c -o build\1_2\passaux.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\depends.c -o build\1_2\depends.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\depends.c -o build\1_2\depends.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\docgen2.c -o build\1_2\docgen2.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\docgen2.c -o build\1_2\docgen2.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\service.c -o build\1_2\service.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\service.c -o build\1_2\service.o -ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\parseopt.c -o build\1_2\parseopt.o -%CC% %COMP_FLAGS% -Ibuild -c build\1_2\parseopt.c -o build\1_2\parseopt.o - -ECHO %LINKER% %LINK_FLAGS% -o bin\nimrod.exe build\1_2\nimrod.o build\1_2\system.o build\1_2\commands.o build\1_2\os.o build\1_2\strutils.o build\1_2\parseutils.o build\1_2\times.o build\1_2\winlean.o build\1_2\msgs.o build\1_2\options.o build\1_2\lists.o build\1_2\strtabs.o build\1_2\hashes.o build\1_2\tables.o build\1_2\math.o build\1_2\sockets.o build\1_2\ropes.o build\1_2\platform.o build\1_2\crc.o build\1_2\nversion.o build\1_2\condsyms.o build\1_2\ast.o build\1_2\idents.o build\1_2\intsets.o build\1_2\idgen.o build\1_2\astalgo.o build\1_2\rodutils.o build\1_2\extccomp.o build\1_2\osproc.o build\1_2\streams.o build\1_2\wordrecg.o build\1_2\babelcmd.o build\1_2\lexer.o build\1_2\nimlexbase.o build\1_2\llstream.o build\1_2\nimconf.o build\1_2\main.o build\1_2\syntaxes.o build\1_2\parser.o build\1_2\pbraces.o build\1_2\filters.o build\1_2\renderer.o build\1_2\filter_tmpl.o build\1_2\rodread.o build\1_2\types.o build\1_2\trees.o build\1_2\memfiles.o build\1_2\rodwrite.o build\1_2\passes.o build\1_2\magicsys.o build\1_2\nimsets.o build\1_2\bitsets.o build\1_2\semthreads.o build\1_2\importer.o build\1_2\lookups.o build\1_2\semdata.o build\1_2\treetab.o build\1_2\evals.o build\1_2\semfold.o build\1_2\saturate.o build\1_2\transf.o build\1_2\cgmeth.o build\1_2\sempass2.o build\1_2\lambdalifting.o build\1_2\evaltempl.o build\1_2\sem.o build\1_2\procfind.o build\1_2\pragmas.o build\1_2\semtypinst.o build\1_2\sigmatch.o build\1_2\parampatterns.o build\1_2\docgen.o build\1_2\rstast.o build\1_2\rst.o build\1_2\rstgen.o build\1_2\highlite.o build\1_2\algorithm.o build\1_2\aliases.o build\1_2\patterns.o build\1_2\cgen.o build\1_2\ccgutils.o build\1_2\cgendata.o build\1_2\ccgmerge.o build\1_2\jsgen.o build\1_2\json.o build\1_2\lexbase.o build\1_2\unicode.o build\1_2\passaux.o build\1_2\depends.o build\1_2\docgen2.o build\1_2\service.o build\1_2\parseopt.o -%LINKER% %LINK_FLAGS% -o bin\nimrod.exe build\1_2\nimrod.o build\1_2\system.o build\1_2\commands.o build\1_2\os.o build\1_2\strutils.o build\1_2\parseutils.o build\1_2\times.o build\1_2\winlean.o build\1_2\msgs.o build\1_2\options.o build\1_2\lists.o build\1_2\strtabs.o build\1_2\hashes.o build\1_2\tables.o build\1_2\math.o build\1_2\sockets.o build\1_2\ropes.o build\1_2\platform.o build\1_2\crc.o build\1_2\nversion.o build\1_2\condsyms.o build\1_2\ast.o build\1_2\idents.o build\1_2\intsets.o build\1_2\idgen.o build\1_2\astalgo.o build\1_2\rodutils.o build\1_2\extccomp.o build\1_2\osproc.o build\1_2\streams.o build\1_2\wordrecg.o build\1_2\babelcmd.o build\1_2\lexer.o build\1_2\nimlexbase.o build\1_2\llstream.o build\1_2\nimconf.o build\1_2\main.o build\1_2\syntaxes.o build\1_2\parser.o build\1_2\pbraces.o build\1_2\filters.o build\1_2\renderer.o build\1_2\filter_tmpl.o build\1_2\rodread.o build\1_2\types.o build\1_2\trees.o build\1_2\memfiles.o build\1_2\rodwrite.o build\1_2\passes.o build\1_2\magicsys.o build\1_2\nimsets.o build\1_2\bitsets.o build\1_2\semthreads.o build\1_2\importer.o build\1_2\lookups.o build\1_2\semdata.o build\1_2\treetab.o build\1_2\evals.o build\1_2\semfold.o build\1_2\saturate.o build\1_2\transf.o build\1_2\cgmeth.o build\1_2\sempass2.o build\1_2\lambdalifting.o build\1_2\evaltempl.o build\1_2\sem.o build\1_2\procfind.o build\1_2\pragmas.o build\1_2\semtypinst.o build\1_2\sigmatch.o build\1_2\parampatterns.o build\1_2\docgen.o build\1_2\rstast.o build\1_2\rst.o build\1_2\rstgen.o build\1_2\highlite.o build\1_2\algorithm.o build\1_2\aliases.o build\1_2\patterns.o build\1_2\cgen.o build\1_2\ccgutils.o build\1_2\cgendata.o build\1_2\ccgmerge.o build\1_2\jsgen.o build\1_2\json.o build\1_2\lexbase.o build\1_2\unicode.o build\1_2\passaux.o build\1_2\depends.o build\1_2\docgen2.o build\1_2\service.o build\1_2\parseopt.o - - -ECHO SUCCESS - From f3b4240b8756ed416384335ebc2ef3b5e857ba0c Mon Sep 17 00:00:00 2001 From: Dominik Picheta Date: Wed, 17 Jul 2013 22:29:21 +0100 Subject: [PATCH 29/30] Fixed libzip path for Arch Linux. --- lib/wrappers/zip/libzip.nim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/wrappers/zip/libzip.nim b/lib/wrappers/zip/libzip.nim index f25e456715..c3d1784a5c 100644 --- a/lib/wrappers/zip/libzip.nim +++ b/lib/wrappers/zip/libzip.nim @@ -51,7 +51,7 @@ when defined(unix) and not defined(useLibzipSrc): when defined(macosx): {.pragma: mydll, dynlib: "libzip2.dylib".} else: - {.pragma: mydll, dynlib: "libzip2.so(|.2|.1|.0)".} + {.pragma: mydll, dynlib: "libzip(|2).so(|.2|.1|.0)".} else: when defined(unix): {.passl: "-lz".} From a932d201d2a0090e3501d9fcf2e38b65f2b0997a Mon Sep 17 00:00:00 2001 From: Dominik Picheta Date: Thu, 18 Jul 2013 20:46:03 +0100 Subject: [PATCH 30/30] Rebuilt C Sources.