RwLock = object
proc `=copy`(dest: var RwLock; source: RwLock) {.error.}
proc `=destroy`(rw: var RwLock) {....raises: [], tags: [], forbids: [].}
proc `=sink`(dest: var RwLock; source: RwLock) {.error.}
proc beginRead(rw: var RwLock) {....raises: [], tags: [], forbids: [].}
proc beginWrite(rw: var RwLock) {....raises: [], tags: [], forbids: [].}
proc endRead(rw: var RwLock) {....raises: [], tags: [], forbids: [].}
proc endWrite(rw: var RwLock) {....raises: [], tags: [], forbids: [].}
proc init(rw: out RwLock) {....raises: [], tags: [], forbids: [].}
template readWith(a: RwLock; body: untyped)
template writeWith(a: RwLock; body: untyped)