Well a similar hack can be done in that case as well but it's still dependent
on scopes.
import std/[macros, genasts]
macro immut(n: typed) =
if n.kind notin {nnkSym, nnkHiddenDeref}:
error("Expected a variable", n)
let
(n, name) =
if n.kind == nnkHiddenDeref:
(n[0], ident($n[0]))
else:
(n, ident($n))
typ = block:
let typ = n.getType
if typ[0].eqident"var":
typ[^1]
else:
typ
result =
genast(name, n, typ):
template name(): typ = cast[typ](n)
proc doThing(i: var int) =
immut i
i = i + 2
var a = 100
doThing(a)
Run
- Small improvement discussion: Use `let` to lock variable previ... dxb
- Small improvement discussion: Use `let` to lock variable previ... planetis
- Small improvement discussion: Use `let` to lock variable previ... SolitudeSF
- Small improvement discussion: Use `let` to lock variable previ... cmc
- Small improvement discussion: Use `let` to lock variable previ... dwin
- Small improvement discussion: Use `let` to lock variable previ... federico3
- Small improvement discussion: Use `let` to lock variable previ... cmc
- Small improvement discussion: Use `let` to lock variable previ... exelotl
- Small improvement discussion: Use `let` to lock variable previ... ElegantBeef
- Small improvement discussion: Use `let` to lock variable previ... cmc
- Small improvement discussion: Use `let` to lock variable previ... ElegantBeef
- Small improvement discussion: Use `let` to lock variable previ... geekrelief
- Small improvement discussion: Use `let` to lock variable previ... ElegantBeef
- Small improvement discussion: Use `let` to lock variable previ... geekrelief
- Small improvement discussion: Use `let` to lock variable previ... ElegantBeef
- Small improvement discussion: Use `let` to lock variable previ... geekrelief
- Small improvement discussion: Use `let` to lock variable previ... geekrelief
- Small improvement discussion: Use `let` to lock variable previ... dwin
