mirror of
https://github.com/nim-lang/Nim.git
synced 2026-02-26 12:55:06 +00:00
bugfixes mostly JS related
This commit is contained in:
@@ -137,17 +137,6 @@ proc mangleName(s: PSym): PRope =
|
||||
app(result, toRope(s.id))
|
||||
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 =
|
||||
result = if typ.sym != nil: typ.sym.name.s.mangle.toRope
|
||||
else: ~"TY"
|
||||
|
||||
@@ -611,10 +611,11 @@ proc genIf(p: PProc, n: PNode, r: var TCompRes) =
|
||||
|
||||
proc generateHeader(p: PProc, typ: PType): PRope =
|
||||
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, ", ")
|
||||
assert(typ.n.sons[i].kind == nkSym)
|
||||
var param = typ.n.sons[i].sym
|
||||
if isCompileTimeOnly(param.typ): continue
|
||||
var name = mangleName(param)
|
||||
app(result, name)
|
||||
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) =
|
||||
app(r.res, "(")
|
||||
for i in countup(1, sonsLen(n) - 1):
|
||||
let it = n.sons[i]
|
||||
if it.typ.isCompileTimeOnly: continue
|
||||
if i > 1: app(r.res, ", ")
|
||||
genArg(p, n.sons[i], r)
|
||||
genArg(p, it, r)
|
||||
app(r.res, ")")
|
||||
r.kind = resExpr
|
||||
|
||||
@@ -1128,7 +1131,7 @@ proc genMagic(p: PProc, n: PNode, r: var TCompRes) =
|
||||
# XXX: range checking?
|
||||
if not (optOverflowCheck in p.Options): binaryExpr(p, n, r, "", "$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:
|
||||
if skipTypes(n.sons[1].typ, abstractVarRange).kind == tyCString:
|
||||
binaryExpr(p, n, r, "", "$1 += $2")
|
||||
|
||||
@@ -486,7 +486,9 @@ proc TypeToString(typ: PType, prefer: TPreferedDesc = preferName): string =
|
||||
of tyPtr, tyRef, tyVar, tyMutable, tyConst:
|
||||
result = typeToStr[t.kind] & typeToString(t.sons[0])
|
||||
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:
|
||||
result = if tfIterator in t.flags: "iterator (" else: "proc ("
|
||||
for i in countup(1, sonsLen(t) - 1):
|
||||
@@ -1281,3 +1283,14 @@ proc compatibleEffects*(formal, actual: PType): bool =
|
||||
result = compatibleEffectsAux(st, real.sons[tagEffects])
|
||||
if not result: return
|
||||
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:
|
||||
## echo("syntax error")
|
||||
##
|
||||
bind maxSubpatterns
|
||||
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)
|
||||
|
||||
# ------------------------- more string handling ------------------------------
|
||||
@@ -1740,8 +1741,9 @@ when isMainModule:
|
||||
assert matches[0] == "a"
|
||||
else:
|
||||
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[1] == "g"
|
||||
else:
|
||||
|
||||
@@ -463,6 +463,8 @@ when not defined(JS):
|
||||
|
||||
elif defined(JS):
|
||||
proc newDate(): TTime {.importc: "new Date".}
|
||||
proc internGetTime(): TTime {.importc: "new Date", tags: [].}
|
||||
|
||||
proc newDate(value: float): TTime {.importc: "new Date".}
|
||||
proc newDate(value: string): TTime {.importc: "new Date".}
|
||||
proc getTime(): TTime =
|
||||
@@ -494,7 +496,7 @@ elif defined(JS):
|
||||
result.yearday = 0
|
||||
|
||||
proc TimeInfoToTime*(timeInfo: TTimeInfo): TTime =
|
||||
result = getTime()
|
||||
result = internGetTime()
|
||||
result.setSeconds(timeInfo.second)
|
||||
result.setMinutes(timeInfo.minute)
|
||||
result.setHours(timeInfo.hour)
|
||||
|
||||
@@ -620,4 +620,9 @@ proc isObj(obj, subclass: PNimType): bool {.compilerproc.} =
|
||||
x = x.base
|
||||
return true
|
||||
|
||||
proc addChar(x: string, c: char) {.compilerproc, noStackFrame.} =
|
||||
asm """
|
||||
`x`[`x`.length-1] = `c`; `x`.push(0);
|
||||
"""
|
||||
|
||||
{.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":
|
||||
var dirs = @["nimcache", "server"/"nimcache"]
|
||||
dirs.each(proc(x: var string) =
|
||||
dirs.map(proc(x: var string) =
|
||||
if existsDir(x): removeDir(x))
|
||||
|
||||
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
|
||||
- make use of commonType relation in expressions
|
||||
- further expr/stmt unification:
|
||||
- merge nkStmtListExpr and nkStmtList
|
||||
- merge nkBlockExpr and nkBlockStmt
|
||||
- rewrite nkCaseExpr handling
|
||||
- try except as an expression
|
||||
|
||||
|
||||
Reference in New Issue
Block a user