diff options
author | Vindaar <basti90@gmail.com> | 2018-06-10 14:13:55 +0200 |
---|---|---|
committer | Vindaar <basti90@gmail.com> | 2018-06-10 18:01:06 +0200 |
commit | 4ab6dd51b03bfb5d180927fac34d76ed855ed4b7 (patch) | |
tree | f8b83bedd9eea0488f6d4ce3c35cdfc0baffaf30 /compiler | |
parent | 03653ab61e6eed6811c5df0677a2bf2aa722ef9c (diff) | |
download | Nim-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.nim | 6 |
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 |