properly fix #10053 ; FieldDefect msg now shows discriminant value + lineinfo, in all backends (c,vm,js) (#11955)

* fix #10053 FieldError for vm

* fixup

* FieldError now also shows runtime value of discriminant

* fix field error reporting in vm

* also report culprit line info in err msg

* fix errors for newruntime 2

* fix for js

* fixup

* PRTEMP4

* works

* works

* works perfect

* refactor

* std/private/repr_impl

* suppport --gc:arc

* cleanup

* refactor

* simplify

* simplify

* simplify

* fixup

* move out compiler.vmgen.genCustom

* fixup

* fixup

* add tests

* revert compiler/debugutils.nim

* simplify reprDiscriminant

* fixup

* lib/std/private/repr_impl.nim -> lib/system/repr_impl.nim

* try to fix D20210812T165220

* honor --declaredlocs

* control toFileLineCol via --declaredlocs
This commit is contained in:
Timothee Cour 2021-08-13 00:35:48 -07:00 • committed by GitHub
commit b24812df5f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
18 changed files with 151 additions and 43 deletions

View file

@ -0,0 +1,30 @@
#[
ran from trunner
]#
# line 10
type Kind = enum k0, k1, k2, k3, k4
type Foo = object
case kind: Kind
of k0: f0: int
of k1: f1: int
of k2: f2: int
of k3: f3: int
of k4: f4: int
proc main()=
var foo = Foo(kind: k3, f3: 3)
let s1 = foo.f3
doAssert s1 == 3
let s2 = foo.f2
when defined case1:
static: main()
when defined case2:
main()

View file

@ -37,9 +37,9 @@ proc runNimCmd(file, options = "", rtarg = ""): auto =
echo cmd
echo result[0] & "\n" & $result[1]
proc runNimCmdChk(file, options = "", rtarg = ""): string =
let (ret, status) = runNimCmd(file, options, rtarg = rtarg)
doAssert status == 0, $(file, options) & "\n" & ret
proc runNimCmdChk(file, options = "", rtarg = "", status = 0): string =
let (ret, status2) = runNimCmd(file, options, rtarg = rtarg)
doAssert status2 == status, $(file, options, status, status2) & "\n" & ret
ret
proc genShellCmd(filename: string): string =
@ -376,5 +376,15 @@ mused3.nim(13, 8) Warning: imported and not used: 'mused3b' [UnusedImport]
mused3.nim(75, 10) Hint: duplicate import of 'mused3a'; previous import here: mused3.nim(74, 10) [DuplicateModuleImport]
"""
block: # FieldDefect
proc fn(opt: string, expected: string) =
let output = runNimCmdChk("misc/mfield_defect.nim", fmt"-r --warning:all:off --declaredlocs {opt}", status = 1)
doAssert expected in output, opt & "\noutput:\n" & output & "expected:\n" & expected
fn("-d:case1"): """mfield_defect.nim(25, 15) Error: field 'f2' is not accessible for type 'Foo' [discriminant declared in mfield_defect.nim(14, 8)] using 'kind = k3'"""
fn("-d:case2 --gc:refc"): """mfield_defect.nim(25, 15) field 'f2' is not accessible for type 'Foo' [discriminant declared in mfield_defect.nim(14, 8)] using 'kind = k3'"""
fn("-d:case1 -b:js"): """mfield_defect.nim(25, 15) Error: field 'f2' is not accessible for type 'Foo' [discriminant declared in mfield_defect.nim(14, 8)] using 'kind = k3'"""
fn("-d:case2 -b:js"): """field 'f2' is not accessible for type 'Foo' [discriminant declared in mfield_defect.nim(14, 8)] using 'kind = k3'"""
# 3 instead of k3, because of lack of RTTI
fn("-d:case2 --gc:arc"): """mfield_defect.nim(25, 15) field 'f2' is not accessible for type 'Foo' [discriminant declared in mfield_defect.nim(14, 8)] using 'kind = 3'"""
else:
discard # only during debugging, tests added here will run with `-d:nimTestsTrunnerDebugging` enabled