Merge branch 'devel' of github.com:nim-lang/Nim into devel
This commit is contained in:
commit
faf5fb8467
4 changed files with 22 additions and 6 deletions
|
|
@ -1847,6 +1847,8 @@ proc genClosure(p: BProc, n: PNode, d: var TLoc) =
|
||||||
var tmp, a, b: TLoc
|
var tmp, a, b: TLoc
|
||||||
initLocExpr(p, n.sons[0], a)
|
initLocExpr(p, n.sons[0], a)
|
||||||
initLocExpr(p, n.sons[1], b)
|
initLocExpr(p, n.sons[1], b)
|
||||||
|
if n.sons[0].skipConv.kind == nkClosure:
|
||||||
|
internalError(n.info, "closure to closure created")
|
||||||
getTemp(p, n.typ, tmp)
|
getTemp(p, n.typ, tmp)
|
||||||
linefmt(p, cpsStmts, "$1.ClPrc = $2; $1.ClEnv = $3;$n",
|
linefmt(p, cpsStmts, "$1.ClPrc = $2; $1.ClEnv = $3;$n",
|
||||||
tmp.rdLoc, a.rdLoc, b.rdLoc)
|
tmp.rdLoc, a.rdLoc, b.rdLoc)
|
||||||
|
|
|
||||||
|
|
@ -213,7 +213,7 @@ proc makeClosure*(prc: PSym; env: PNode; info: TLineInfo): PNode =
|
||||||
if env == nil:
|
if env == nil:
|
||||||
result.add(newNodeIT(nkNilLit, info, getSysType(tyNil)))
|
result.add(newNodeIT(nkNilLit, info, getSysType(tyNil)))
|
||||||
else:
|
else:
|
||||||
if env.kind == nkClosure:
|
if env.skipConv.kind == nkClosure:
|
||||||
localError(info, "internal error: taking closure of closure")
|
localError(info, "internal error: taking closure of closure")
|
||||||
result.add(env)
|
result.add(env)
|
||||||
|
|
||||||
|
|
@ -711,7 +711,11 @@ proc liftCapturedVars(n: PNode; owner: PSym; d: DetectionPass;
|
||||||
of nkClosure:
|
of nkClosure:
|
||||||
if n[1].kind == nkNilLit:
|
if n[1].kind == nkNilLit:
|
||||||
n.sons[0] = liftCapturedVars(n[0], owner, d, c)
|
n.sons[0] = liftCapturedVars(n[0], owner, d, c)
|
||||||
#if n.sons[0].kind == nkClosure: result = n.sons[0]
|
let x = n.sons[0].skipConv
|
||||||
|
if x.kind == nkClosure:
|
||||||
|
#localError(n.info, "internal error: closure to closure created")
|
||||||
|
# now we know better, so patch it:
|
||||||
|
n.sons[0] = x.sons[0]
|
||||||
of nkLambdaKinds, nkIteratorDef:
|
of nkLambdaKinds, nkIteratorDef:
|
||||||
if n.typ != nil and n[namePos].kind == nkSym:
|
if n.typ != nil and n[namePos].kind == nkSym:
|
||||||
let m = newSymNode(n[namePos].sym)
|
let m = newSymNode(n[namePos].sym)
|
||||||
|
|
|
||||||
|
|
@ -383,9 +383,11 @@ proc generateThunk(prc: PNode, dest: PType): PNode =
|
||||||
# (see internal documentation):
|
# (see internal documentation):
|
||||||
if gCmd == cmdCompileToJS: return prc
|
if gCmd == cmdCompileToJS: return prc
|
||||||
result = newNodeIT(nkClosure, prc.info, dest)
|
result = newNodeIT(nkClosure, prc.info, dest)
|
||||||
var conv = newNodeIT(nkHiddenStdConv, prc.info, dest)
|
var conv = newNodeIT(nkHiddenSubConv, prc.info, dest)
|
||||||
conv.add(emptyNode)
|
conv.add(emptyNode)
|
||||||
conv.add(prc)
|
conv.add(prc)
|
||||||
|
if prc.kind == nkClosure:
|
||||||
|
internalError(prc.info, "closure to closure created")
|
||||||
result.add(conv)
|
result.add(conv)
|
||||||
result.add(newNodeIT(nkNilLit, prc.info, getSysType(tyNil)))
|
result.add(newNodeIT(nkNilLit, prc.info, getSysType(tyNil)))
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ import
|
||||||
os, strutils, parseopt, pegs, re, terminal
|
os, strutils, parseopt, pegs, re, terminal
|
||||||
|
|
||||||
const
|
const
|
||||||
Version = "0.9"
|
Version = "1.0"
|
||||||
Usage = "nimgrep - Nim Grep Utility Version " & Version & """
|
Usage = "nimgrep - Nim Grep Utility Version " & Version & """
|
||||||
|
|
||||||
(c) 2012 Andreas Rumpf
|
(c) 2012 Andreas Rumpf
|
||||||
|
|
@ -56,6 +56,7 @@ var
|
||||||
|
|
||||||
proc ask(msg: string): string =
|
proc ask(msg: string): string =
|
||||||
stdout.write(msg)
|
stdout.write(msg)
|
||||||
|
stdout.flushFile()
|
||||||
result = stdin.readLine()
|
result = stdin.readLine()
|
||||||
|
|
||||||
proc confirm: TConfirmEnum =
|
proc confirm: TConfirmEnum =
|
||||||
|
|
@ -108,18 +109,21 @@ proc highlight(s, match, repl: string, t: tuple[first, last: int],
|
||||||
writeColored(match)
|
writeColored(match)
|
||||||
for i in t.last+1 .. y: stdout.write(s[i])
|
for i in t.last+1 .. y: stdout.write(s[i])
|
||||||
stdout.write("\n")
|
stdout.write("\n")
|
||||||
|
stdout.flushFile()
|
||||||
if showRepl:
|
if showRepl:
|
||||||
stdout.write(spaces(alignment-1), "-> ")
|
stdout.write(spaces(alignment-1), "-> ")
|
||||||
for i in x .. t.first-1: stdout.write(s[i])
|
for i in x .. t.first-1: stdout.write(s[i])
|
||||||
writeColored(repl)
|
writeColored(repl)
|
||||||
for i in t.last+1 .. y: stdout.write(s[i])
|
for i in t.last+1 .. y: stdout.write(s[i])
|
||||||
stdout.write("\n")
|
stdout.write("\n")
|
||||||
|
stdout.flushFile()
|
||||||
|
|
||||||
proc processFile(filename: string) =
|
proc processFile(filename: string) =
|
||||||
var filenameShown = false
|
var filenameShown = false
|
||||||
template beforeHighlight =
|
template beforeHighlight =
|
||||||
if not filenameShown and optVerbose notin options:
|
if not filenameShown and optVerbose notin options:
|
||||||
stdout.writeLine(filename)
|
stdout.writeLine(filename)
|
||||||
|
stdout.flushFile()
|
||||||
filenameShown = true
|
filenameShown = true
|
||||||
|
|
||||||
var buffer: string
|
var buffer: string
|
||||||
|
|
@ -128,7 +132,9 @@ proc processFile(filename: string) =
|
||||||
except IOError:
|
except IOError:
|
||||||
echo "cannot open file: ", filename
|
echo "cannot open file: ", filename
|
||||||
return
|
return
|
||||||
if optVerbose in options: stdout.writeLine(filename)
|
if optVerbose in options:
|
||||||
|
stdout.writeLine(filename)
|
||||||
|
stdout.flushFile()
|
||||||
var pegp: TPeg
|
var pegp: TPeg
|
||||||
var rep: Regex
|
var rep: Regex
|
||||||
var result: string
|
var result: string
|
||||||
|
|
@ -254,10 +260,12 @@ proc walker(dir: string) =
|
||||||
|
|
||||||
proc writeHelp() =
|
proc writeHelp() =
|
||||||
stdout.write(Usage)
|
stdout.write(Usage)
|
||||||
|
stdout.flushFile()
|
||||||
quit(0)
|
quit(0)
|
||||||
|
|
||||||
proc writeVersion() =
|
proc writeVersion() =
|
||||||
stdout.write(Version & "\n")
|
stdout.write(Version & "\n")
|
||||||
|
stdout.flushFile()
|
||||||
quit(0)
|
quit(0)
|
||||||
|
|
||||||
proc checkOptions(subset: TOptions, a, b: string) =
|
proc checkOptions(subset: TOptions, a, b: string) =
|
||||||
|
|
@ -291,7 +299,7 @@ for kind, key, val in getopt():
|
||||||
of "word", "w": incl(options, optWord)
|
of "word", "w": incl(options, optWord)
|
||||||
of "ignorecase", "i": incl(options, optIgnoreCase)
|
of "ignorecase", "i": incl(options, optIgnoreCase)
|
||||||
of "ignorestyle", "y": incl(options, optIgnoreStyle)
|
of "ignorestyle", "y": incl(options, optIgnoreStyle)
|
||||||
of "ext": extensions = val.split('|')
|
of "ext": extensions.add val.split('|')
|
||||||
of "nocolor": useWriteStyled = false
|
of "nocolor": useWriteStyled = false
|
||||||
of "verbose": incl(options, optVerbose)
|
of "verbose": incl(options, optVerbose)
|
||||||
of "help", "h": writeHelp()
|
of "help", "h": writeHelp()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue