summary refs log blame commit diff stats
path: root/lib/std/decls.nim
blob: dd7d19da7d5639cef03a8a5068a14e96fc3a8057 (plain) (tree)
1
2
3
4
5
6


                                                                          
                                
                                                          
                           







                                

                          
       
                               
                               
# see `semLowerLetVarCustomPragma` for compiler support that enables these
# lowerings

template byaddr*(lhs, typ, ex) =
  ## Allows a syntax for lvalue reference, exact analog to
  ## `auto& a = ex;` in C++
  runnableExamples:
    var s = @[10,11,12]
    var a {.byaddr.} = s[0]
    a+=100
    doAssert s == @[110,11,12]
    doAssert a is int
    var b {.byaddr.}: int = s[0]
    doAssert a.addr == b.addr
  when typ is typeof(nil):
    let tmp = addr(ex)
  else:
    let tmp: ptr typ = addr(ex)
  template lhs: untyped = tmp[]