bugfixes mostly JS related
This commit is contained in:
parent
eaeb26f003
commit
56045ad7ff
10 changed files with 37 additions and 20 deletions
|
|
@ -137,17 +137,6 @@ proc mangleName(s: PSym): PRope =
|
||||||
app(result, toRope(s.id))
|
app(result, toRope(s.id))
|
||||||
s.loc.r = result
|
s.loc.r = result
|
||||||
|
|
||||||
proc isCompileTimeOnly(t: PType): bool =
|
|
||||||
result = t.kind in {tyTypedesc, tyExpr}
|
|
||||||
|
|
||||||
proc containsCompileTimeOnly(t: PType): bool =
|
|
||||||
if isCompileTimeOnly(t): return true
|
|
||||||
if t.sons != nil:
|
|
||||||
for i in 0 .. <t.sonsLen:
|
|
||||||
if t.sons[i] != nil and isCompileTimeOnly(t.sons[i]):
|
|
||||||
return true
|
|
||||||
return false
|
|
||||||
|
|
||||||
proc typeName(typ: PType): PRope =
|
proc typeName(typ: PType): PRope =
|
||||||
result = if typ.sym != nil: typ.sym.name.s.mangle.toRope
|
result = if typ.sym != nil: typ.sym.name.s.mangle.toRope
|
||||||
else: ~"TY"
|
else: ~"TY"
|
||||||
|
|
|
||||||
|
|
@ -611,10 +611,11 @@ proc genIf(p: PProc, n: PNode, r: var TCompRes) =
|
||||||
|
|
||||||
proc generateHeader(p: PProc, typ: PType): PRope =
|
proc generateHeader(p: PProc, typ: PType): PRope =
|
||||||
result = nil
|
result = nil
|
||||||
for i in countup(1, sonsLen(typ.n) - 1):
|
for i in countup(1, sonsLen(typ.n) - 1):
|
||||||
if result != nil: app(result, ", ")
|
if result != nil: app(result, ", ")
|
||||||
assert(typ.n.sons[i].kind == nkSym)
|
assert(typ.n.sons[i].kind == nkSym)
|
||||||
var param = typ.n.sons[i].sym
|
var param = typ.n.sons[i].sym
|
||||||
|
if isCompileTimeOnly(param.typ): continue
|
||||||
var name = mangleName(param)
|
var name = mangleName(param)
|
||||||
app(result, name)
|
app(result, name)
|
||||||
if mapType(param.typ) == etyBaseIndex:
|
if mapType(param.typ) == etyBaseIndex:
|
||||||
|
|
@ -865,8 +866,10 @@ proc genArg(p: PProc, n: PNode, r: var TCompRes) =
|
||||||
proc genArgs(p: PProc, n: PNode, r: var TCompRes) =
|
proc genArgs(p: PProc, n: PNode, r: var TCompRes) =
|
||||||
app(r.res, "(")
|
app(r.res, "(")
|
||||||
for i in countup(1, sonsLen(n) - 1):
|
for i in countup(1, sonsLen(n) - 1):
|
||||||
|
let it = n.sons[i]
|
||||||
|
if it.typ.isCompileTimeOnly: continue
|
||||||
if i > 1: app(r.res, ", ")
|
if i > 1: app(r.res, ", ")
|
||||||
genArg(p, n.sons[i], r)
|
genArg(p, it, r)
|
||||||
app(r.res, ")")
|
app(r.res, ")")
|
||||||
r.kind = resExpr
|
r.kind = resExpr
|
||||||
|
|
||||||
|
|
@ -1128,7 +1131,7 @@ proc genMagic(p: PProc, n: PNode, r: var TCompRes) =
|
||||||
# XXX: range checking?
|
# XXX: range checking?
|
||||||
if not (optOverflowCheck in p.Options): binaryExpr(p, n, r, "", "$1 - $2")
|
if not (optOverflowCheck in p.Options): binaryExpr(p, n, r, "", "$1 - $2")
|
||||||
else: binaryExpr(p, n, r, "addInt", "addInt($1, $2)")
|
else: binaryExpr(p, n, r, "addInt", "addInt($1, $2)")
|
||||||
of mAppendStrCh: binaryExpr(p, n, r, "addChar", "$1 = addChar($1, $2)")
|
of mAppendStrCh: binaryExpr(p, n, r, "addChar", "addChar($1, $2)")
|
||||||
of mAppendStrStr:
|
of mAppendStrStr:
|
||||||
if skipTypes(n.sons[1].typ, abstractVarRange).kind == tyCString:
|
if skipTypes(n.sons[1].typ, abstractVarRange).kind == tyCString:
|
||||||
binaryExpr(p, n, r, "", "$1 += $2")
|
binaryExpr(p, n, r, "", "$1 += $2")
|
||||||
|
|
|
||||||
|
|
@ -486,7 +486,9 @@ proc TypeToString(typ: PType, prefer: TPreferedDesc = preferName): string =
|
||||||
of tyPtr, tyRef, tyVar, tyMutable, tyConst:
|
of tyPtr, tyRef, tyVar, tyMutable, tyConst:
|
||||||
result = typeToStr[t.kind] & typeToString(t.sons[0])
|
result = typeToStr[t.kind] & typeToString(t.sons[0])
|
||||||
of tyRange:
|
of tyRange:
|
||||||
result = "range " & rangeToStr(t.n) & "(" & typeToString(t.sons[0]) & ")"
|
result = "range " & rangeToStr(t.n)
|
||||||
|
if prefer != preferExported:
|
||||||
|
result.add("(" & typeToString(t.sons[0]) & ")")
|
||||||
of tyProc:
|
of tyProc:
|
||||||
result = if tfIterator in t.flags: "iterator (" else: "proc ("
|
result = if tfIterator in t.flags: "iterator (" else: "proc ("
|
||||||
for i in countup(1, sonsLen(t) - 1):
|
for i in countup(1, sonsLen(t) - 1):
|
||||||
|
|
@ -1281,3 +1283,14 @@ proc compatibleEffects*(formal, actual: PType): bool =
|
||||||
result = compatibleEffectsAux(st, real.sons[tagEffects])
|
result = compatibleEffectsAux(st, real.sons[tagEffects])
|
||||||
if not result: return
|
if not result: return
|
||||||
result = true
|
result = true
|
||||||
|
|
||||||
|
proc isCompileTimeOnly*(t: PType): bool {.inline.} =
|
||||||
|
result = t.kind in {tyTypedesc, tyExpr}
|
||||||
|
|
||||||
|
proc containsCompileTimeOnly*(t: PType): bool =
|
||||||
|
if isCompileTimeOnly(t): return true
|
||||||
|
if t.sons != nil:
|
||||||
|
for i in 0 .. <t.sonsLen:
|
||||||
|
if t.sons[i] != nil and isCompileTimeOnly(t.sons[i]):
|
||||||
|
return true
|
||||||
|
return false
|
||||||
|
|
|
||||||
|
|
@ -867,8 +867,9 @@ template `=~`*(s: string, pattern: TPeg): bool =
|
||||||
## else:
|
## else:
|
||||||
## echo("syntax error")
|
## echo("syntax error")
|
||||||
##
|
##
|
||||||
|
bind maxSubpatterns
|
||||||
when not definedInScope(matches):
|
when not definedInScope(matches):
|
||||||
var matches {.inject.}: array[0..pegs.maxSubpatterns-1, string]
|
var matches {.inject.}: array[0..maxSubpatterns-1, string]
|
||||||
match(s, pattern, matches)
|
match(s, pattern, matches)
|
||||||
|
|
||||||
# ------------------------- more string handling ------------------------------
|
# ------------------------- more string handling ------------------------------
|
||||||
|
|
@ -1740,8 +1741,9 @@ when isMainModule:
|
||||||
assert matches[0] == "a"
|
assert matches[0] == "a"
|
||||||
else:
|
else:
|
||||||
assert false
|
assert false
|
||||||
|
|
||||||
if match("abcdefg", peg"c {d} ef {g}", matches, 2):
|
var matches: array[0..maxSubpatterns-1, string]
|
||||||
|
if match("abcdefg", peg"c {d} ef {g}", matches, 2):
|
||||||
assert matches[0] == "d"
|
assert matches[0] == "d"
|
||||||
assert matches[1] == "g"
|
assert matches[1] == "g"
|
||||||
else:
|
else:
|
||||||
|
|
|
||||||
|
|
@ -463,6 +463,8 @@ when not defined(JS):
|
||||||
|
|
||||||
elif defined(JS):
|
elif defined(JS):
|
||||||
proc newDate(): TTime {.importc: "new Date".}
|
proc newDate(): TTime {.importc: "new Date".}
|
||||||
|
proc internGetTime(): TTime {.importc: "new Date", tags: [].}
|
||||||
|
|
||||||
proc newDate(value: float): TTime {.importc: "new Date".}
|
proc newDate(value: float): TTime {.importc: "new Date".}
|
||||||
proc newDate(value: string): TTime {.importc: "new Date".}
|
proc newDate(value: string): TTime {.importc: "new Date".}
|
||||||
proc getTime(): TTime =
|
proc getTime(): TTime =
|
||||||
|
|
@ -494,7 +496,7 @@ elif defined(JS):
|
||||||
result.yearday = 0
|
result.yearday = 0
|
||||||
|
|
||||||
proc TimeInfoToTime*(timeInfo: TTimeInfo): TTime =
|
proc TimeInfoToTime*(timeInfo: TTimeInfo): TTime =
|
||||||
result = getTime()
|
result = internGetTime()
|
||||||
result.setSeconds(timeInfo.second)
|
result.setSeconds(timeInfo.second)
|
||||||
result.setMinutes(timeInfo.minute)
|
result.setMinutes(timeInfo.minute)
|
||||||
result.setHours(timeInfo.hour)
|
result.setHours(timeInfo.hour)
|
||||||
|
|
|
||||||
|
|
@ -620,4 +620,9 @@ proc isObj(obj, subclass: PNimType): bool {.compilerproc.} =
|
||||||
x = x.base
|
x = x.base
|
||||||
return true
|
return true
|
||||||
|
|
||||||
|
proc addChar(x: string, c: char) {.compilerproc, noStackFrame.} =
|
||||||
|
asm """
|
||||||
|
`x`[`x`.length-1] = `c`; `x`.push(0);
|
||||||
|
"""
|
||||||
|
|
||||||
{.pop.}
|
{.pop.}
|
||||||
|
|
|
||||||
1
tests/manyloc/argument_parser/ex_wget.nimrod.cfg
Normal file
1
tests/manyloc/argument_parser/ex_wget.nimrod.cfg
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
# This file exists only to mark 'ex_wget' as the project file
|
||||||
|
|
@ -76,7 +76,7 @@ task "testskel", "create skeleton test dir for testing":
|
||||||
|
|
||||||
task "clean", "cleanup generated files":
|
task "clean", "cleanup generated files":
|
||||||
var dirs = @["nimcache", "server"/"nimcache"]
|
var dirs = @["nimcache", "server"/"nimcache"]
|
||||||
dirs.each(proc(x: var string) =
|
dirs.map(proc(x: var string) =
|
||||||
if existsDir(x): removeDir(x))
|
if existsDir(x): removeDir(x))
|
||||||
|
|
||||||
task "download", "download game assets":
|
task "download", "download game assets":
|
||||||
2
todo.txt
2
todo.txt
|
|
@ -9,6 +9,8 @@ version 0.9.2
|
||||||
- document NimMain and check whether it works for threading
|
- document NimMain and check whether it works for threading
|
||||||
- make use of commonType relation in expressions
|
- make use of commonType relation in expressions
|
||||||
- further expr/stmt unification:
|
- further expr/stmt unification:
|
||||||
|
- merge nkStmtListExpr and nkStmtList
|
||||||
|
- merge nkBlockExpr and nkBlockStmt
|
||||||
- rewrite nkCaseExpr handling
|
- rewrite nkCaseExpr handling
|
||||||
- try except as an expression
|
- try except as an expression
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue