Semaphore = object
proc `=copy`(dest: var Semaphore; source: Semaphore) {.error.}
proc `=destroy`(s: var Semaphore) {....raises: [], tags: [], forbids: [].}
proc `=sink`(dest: var Semaphore; source: Semaphore) {.error.}
proc init(s: out Semaphore; count = 0) {....raises: [], tags: [], forbids: [].}
proc signal(s: var Semaphore) {....raises: [], tags: [], forbids: [].}
proc wait(s: var Semaphore) {....raises: [], tags: [], forbids: [].}