diff --git a/lib/pure/strscans.nim b/lib/pure/strscans.nim index 8b6b3bc2a702..45ba9a469cb5 100644 --- a/lib/pure/strscans.nim +++ b/lib/pure/strscans.nim @@ -324,7 +324,7 @@ macro scanf*(input: string; pattern: static[string]; results: varargs[typed]): b template at(s: string; i: int): char = (if i < s.len: s[i] else: '\0') template matchError() = error("type mismatch between pattern '$" & pattern[p] & "' (position: " & $p & - ") and " & $getTypeInst(results[i]) & " var '" & repr(results[i]) & "'") + ") and " & $getTypeInst(results[i]) & " var '" & repr(results[i]) & "'", results[i]) var i = 0 var p = 0 @@ -490,7 +490,7 @@ macro scanTuple*(input: untyped; pattern: static[string]; matcherTypes: varargs[ result = newStmtList() template addVar(typ: string) = let varIdent = ident("temp" & $arguments.len) - result.add(newNimNode(nnkVarSection).add(newIdentDefs(varIdent, ident(typ), newEmptyNode()))) + result.add(newVarStmt(varIdent, newCall(ident"default", ident(typ)))) arguments.add(varIdent) while p < pattern.len: if pattern[p] == '$': diff --git a/tests/stdlib/t8925.nim b/tests/stdlib/t8925.nim index c55e93e736b1..d7979157aee1 100644 --- a/tests/stdlib/t8925.nim +++ b/tests/stdlib/t8925.nim @@ -1,6 +1,6 @@ discard """ errormsg: "type mismatch between pattern '$$i' (position: 1) and HourRange var 'hour'" - file: "strscans.nim" + file: "t8925.nim" """ import strscans diff --git a/tests/stdlib/tstrscans_errs.nim b/tests/stdlib/tstrscans_errs.nim new file mode 100644 index 000000000000..f1c29181788a --- /dev/null +++ b/tests/stdlib/tstrscans_errs.nim @@ -0,0 +1,11 @@ +discard """ + cmd: "nim check $file" +""" + +import std/strscans + + +block: + var strVar: string + discard "123".scanf("$i", strVar) #[tt.Error + ^ type mismatch between pattern '$$i' (position: 1) and string var 'strVar']#