From 4c5ecb46b0b1bd14af80e7bf234e92e1bf85b28a Mon Sep 17 00:00:00 2001 From: Araq Date: Sun, 26 Feb 2017 17:27:36 +0100 Subject: [PATCH] fixes a minor codegen issue where name mangling could produce an identifier used by the codegen; refs #5437 --- compiler/ccgcalls.nim | 2 +- compiler/ccgexprs.nim | 14 +++++++------- compiler/ccgtypes.nim | 2 +- compiler/ccgutils.nim | 2 +- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/compiler/ccgcalls.nim b/compiler/ccgcalls.nim index 8ea81ac659189..9dd5e7bb260b8 100644 --- a/compiler/ccgcalls.nim +++ b/compiler/ccgcalls.nim @@ -109,7 +109,7 @@ proc openArrayLoc(p: BProc, n: PNode): Rope = initLocExpr(p, n, a) case skipTypes(a.t, abstractVar).kind of tyOpenArray, tyVarargs: - result = "$1, $1Len0" % [rdLoc(a)] + result = "$1, $1Len_0" % [rdLoc(a)] of tyString, tySequence: if skipTypes(n.typ, abstractInst).kind == tyVar and not compileToCpp(p.module): diff --git a/compiler/ccgexprs.nim b/compiler/ccgexprs.nim index e9c78b48bfe24..b5492f22ed319 100644 --- a/compiler/ccgexprs.nim +++ b/compiler/ccgexprs.nim @@ -336,12 +336,12 @@ proc genAssignment(p: BProc, dest, src: TLoc, flags: TAssignmentFlags) = # passed to an open array? if needsComplexAssignment(dest.t): linefmt(p, cpsStmts, # XXX: is this correct for arrays? - "#genericAssignOpenArray((void*)$1, (void*)$2, $1Len0, $3);$n", + "#genericAssignOpenArray((void*)$1, (void*)$2, $1Len_0, $3);$n", addrLoc(dest), addrLoc(src), genTypeInfo(p.module, dest.t)) else: useStringh(p.module) linefmt(p, cpsStmts, - "memcpy((void*)$1, (NIM_CONST void*)$2, sizeof($1[0])*$1Len0);$n", + "memcpy((void*)$1, (NIM_CONST void*)$2, sizeof($1[0])*$1Len_0);$n", rdLoc(dest), rdLoc(src)) of tySet: if mapType(ty) == ctArray: @@ -384,7 +384,7 @@ proc genDeepCopy(p: BProc; dest, src: TLoc) = addrLoc(dest), rdLoc(src), genTypeInfo(p.module, dest.t)) of tyOpenArray, tyVarargs: linefmt(p, cpsStmts, - "#genericDeepCopyOpenArray((void*)$1, (void*)$2, $1Len0, $3);$n", + "#genericDeepCopyOpenArray((void*)$1, (void*)$2, $1Len_0, $3);$n", addrLoc(dest), addrLocOrTemp(src), genTypeInfo(p.module, dest.t)) of tySet: if mapType(ty) == ctArray: @@ -861,7 +861,7 @@ proc genOpenArrayElem(p: BProc, x, y: PNode, d: var TLoc) = initLocExpr(p, x, a) initLocExpr(p, y, b) # emit range check: if optBoundsCheck in p.options: - linefmt(p, cpsStmts, "if ((NU)($1) >= (NU)($2Len0)) #raiseIndexError();$n", + linefmt(p, cpsStmts, "if ((NU)($1) >= (NU)($2Len_0)) #raiseIndexError();$n", rdLoc(b), rdLoc(a)) # BUGFIX: ``>=`` and not ``>``! if d.k == locNone: d.s = a.s putIntoDest(p, d, elemType(skipTypes(a.t, abstractVar)), @@ -1322,7 +1322,7 @@ proc genRepr(p: BProc, e: PNode, d: var TLoc) = var b: TLoc case a.t.kind of tyOpenArray, tyVarargs: - putIntoDest(p, b, e.typ, "$1, $1Len0" % [rdLoc(a)], a.s) + putIntoDest(p, b, e.typ, "$1, $1Len_0" % [rdLoc(a)], a.s) of tyString, tySequence: putIntoDest(p, b, e.typ, "$1->data, $1->$2" % [rdLoc(a), lenField(p)], a.s) @@ -1362,8 +1362,8 @@ proc genArrayLen(p: BProc, e: PNode, d: var TLoc, op: TMagic) = let typ = skipTypes(a.typ, abstractVar) case typ.kind of tyOpenArray, tyVarargs: - if op == mHigh: unaryExpr(p, e, d, "($1Len0-1)") - else: unaryExpr(p, e, d, "$1Len0") + if op == mHigh: unaryExpr(p, e, d, "($1Len_0-1)") + else: unaryExpr(p, e, d, "$1Len_0") of tyCString: useStringh(p.module) if op == mHigh: unaryExpr(p, e, d, "($1 ? (strlen($1)-1) : -1)") diff --git a/compiler/ccgtypes.nim b/compiler/ccgtypes.nim index 29d4e23c977a1..08755941e6c77 100644 --- a/compiler/ccgtypes.nim +++ b/compiler/ccgtypes.nim @@ -413,7 +413,7 @@ proc genProcParams(m: BModule, t: PType, rettype, params: var Rope, # this fixes the 'sort' bug: if param.typ.kind == tyVar: param.loc.s = OnUnknown # need to pass hidden parameter: - addf(params, ", NI $1Len$2", [param.loc.r, j.rope]) + addf(params, ", NI $1Len_$2", [param.loc.r, j.rope]) inc(j) arr = arr.sons[0] if t.sons[0] != nil and isInvalidReturnType(t.sons[0]): diff --git a/compiler/ccgutils.nim b/compiler/ccgutils.nim index a00ce35056295..46a9177ad98da 100644 --- a/compiler/ccgutils.nim +++ b/compiler/ccgutils.nim @@ -181,7 +181,7 @@ proc mangle*(name: string): string = of '_': # we generate names like 'foo_9' for scope disambiguations and so # disallow this here: - if i < name.len-1 and name[i] in Digits: + if i < name.len-1 and name[i+1] in Digits: discard else: add(result, c)