fixes #15280 [backport:1.2] (#15281)

* fixes #15280 [backport:1.2]

* make tests green again

* adapt tests
This commit is contained in:
Andreas Rumpf 2020-09-09 14:20:10 +02:00 • committed by GitHub
commit 3f00a738db
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 49 additions and 5 deletions

View file

@ -184,7 +184,7 @@ proc endsInNoReturn(n: PNode): bool =
var it = n var it = n
while it.kind in {nkStmtList, nkStmtListExpr} and it.len > 0: while it.kind in {nkStmtList, nkStmtListExpr} and it.len > 0:
it = it.lastSon it = it.lastSon
result = it.kind in nkLastBlockStmts or result = it.kind in (nkLastBlockStmts-{nkReturnStmt}) or
it.kind in nkCallKinds and it[0].kind == nkSym and sfNoReturn in it[0].sym.flags it.kind in nkCallKinds and it[0].kind == nkSym and sfNoReturn in it[0].sym.flags
proc commonType*(x: PType, y: PNode): PType = proc commonType*(x: PType, y: PNode): PType =

View file

@ -502,7 +502,7 @@ weirdScopes()
# bug #14985 # bug #14985
proc getScope(): string = proc getScope(): string =
if true: if true:
return "hi" "hi"
else: else:
"else" "else"
@ -512,14 +512,14 @@ proc getScope3(): string =
try: try:
"try" "try"
except: except:
return "except" "except"
echo getScope3() echo getScope3()
proc getScope2(): string = proc getScope2(): string =
case true case true
of true: of true:
return "bye" "bye"
else: else:
"else" "else"

View file

@ -258,7 +258,7 @@ func foo(input: string): int =
try: try:
parseInt(input) parseInt(input)
except: except:
return 0
func foo2(b, input: string): int = func foo2(b, input: string): int =
case b: case b:

View file

@ -0,0 +1,44 @@
discard """
errormsg: "expression 'len(src) shl 1' is of type 'int' and has to be used (or discarded)"
line: 19
"""
# bug #15280
type
HexFlags* {.pure.} = enum
LowerCase, ## Produce lowercase hexadecimal characters
PadOdd, ## Pads odd strings
SkipSpaces, ## Skips all the whitespace characters inside of string
SkipPrefix ## Skips `0x` and `x` prefixes at the begining of string
proc bytesToHex*(src: openarray[byte], dst: var openarray[char],
flags: set[HexFlags]): int =
if len(dst) == 0:
(len(src) shl 1)
else:
var halflast = false
let dstlen = len(dst)
var srclen = len(src)
if dstlen < (srclen shl 1):
if (dstlen and 1) == 1:
srclen = (dstlen - 1) shr 1
halflast = true
else:
srclen = (dstlen shr 1)
let lowercase = (HexFlags.LowerCase in flags)
var k = 0
for i in 0 ..< srclen:
let x = int(src[i])
inc(k, 2)
if halflast:
let x = int(src[srclen])
inc(k)
return k