summary refs log tree commit diff stats
path: root/compiler
diff options
context:
space:
mode:
authorVindaar <basti90@gmail.com>2018-06-10 14:13:55 +0200
committerVindaar <basti90@gmail.com>2018-06-10 18:01:06 +0200
commit4ab6dd51b03bfb5d180927fac34d76ed855ed4b7 (patch)
treef8b83bedd9eea0488f6d4ce3c35cdfc0baffaf30 /compiler
parent03653ab61e6eed6811c5df0677a2bf2aa722ef9c (diff)
downloadNim-4ab6dd51b03bfb5d180927fac34d76ed855ed4b7.tar.gz
fix #7997
Fixes issue #7997, which was caused by an export of a `release` proc
in `locks`. Thus the `release` in `defined(release)` of the `ifDebug`
template, was of kind `nkSym` instead of `nkIdent`.

We fix this by getting the `PIdent` of the argument to `defined` using
`considerQuotedIdent`.
This has the nice property of also checking for a valid identifier for
us. E.g. `defined(123)` would fail with
```
Error: in expression 'defined(123)': identifier expected, but found
'123'
```

The `localError` is removed, due to a clear distinction between
`declared` and `defined` now.
Diffstat (limited to 'compiler')
-rw-r--r--compiler/semexprs.nim6
1 files changed, 2 insertions, 4 deletions
diff --git a/compiler/semexprs.nim b/compiler/semexprs.nim
index 92b9c365a..1296bddaa 100644
--- a/compiler/semexprs.nim
+++ b/compiler/semexprs.nim
@@ -1613,10 +1613,8 @@ proc semDefined(c: PContext, n: PNode, onlyCurrentScope: bool): PNode =
   # we replace this node by a 'true' or 'false' node:
   result = newIntNode(nkIntLit, 0)
   if not onlyCurrentScope and considerQuotedIdent(c.config, n[0], n).s == "defined":
-    if n.sons[1].kind != nkIdent:
-      localError(c.config, n.info, "obsolete usage of 'defined', use 'declared' instead")
-    elif isDefined(c.config, n.sons[1].ident.s):
-      result.intVal = 1
+    let d = considerQuotedIdent(c.config, n[1], n)
+    result.intVal = ord isDefined(c.config, d.s)
   elif lookUpForDefined(c, n.sons[1], onlyCurrentScope) != nil:
     result.intVal = 1
   result.info = n.info