summary refs log tree commit diff stats
path: root/compiler/astmsgs.nim
diff options
context:
space:
mode:
authorTimothee Cour <timothee.cour2@gmail.com>2021-08-13 00:35:48 -0700
committerGitHub <noreply@github.com>2021-08-13 09:35:48 +0200
commitb24812df5f952427c1266e48c40b7956bdf3d999 (patch)
tree9bbbb23a1446eedb10be7c52fe07013c4b172740 /compiler/astmsgs.nim
parent3a1109a53be172a92c63ebc5bdb69c45e78e9ca6 (diff)
downloadNim-b24812df5f952427c1266e48c40b7956bdf3d999.tar.gz
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
Diffstat (limited to 'compiler/astmsgs.nim')
-rw-r--r--compiler/astmsgs.nim11
1 files changed, 11 insertions, 0 deletions
diff --git a/compiler/astmsgs.nim b/compiler/astmsgs.nim
index d9105b761..a9027126a 100644
--- a/compiler/astmsgs.nim
+++ b/compiler/astmsgs.nim
@@ -26,3 +26,14 @@ proc addDeclaredLoc*(result: var string, conf: ConfigRef; typ: PType) =
 
 proc addDeclaredLocMaybe*(result: var string, conf: ConfigRef; typ: PType) =
   if optDeclaredLocs in conf.globalOptions: addDeclaredLoc(result, conf, typ)
+
+template quoteExpr*(a: string): untyped =
+  ## can be used for quoting expressions in error msgs.
+  "'" & a & "'"
+
+proc genFieldDefect*(conf: ConfigRef, field: string, disc: PSym): string =
+  let obj = disc.owner.name.s # `types.typeToString` might be better, eg for generics
+  result = "field '$#' is not accessible for type '$#'" % [field, obj]
+  if optDeclaredLocs in conf.globalOptions:
+    result.add " [discriminant declared in $#]" % toFileLineCol(conf, disc.info)
+  result.add " using '$# = " % disc.name.s