compiler/sem/liftdestructors

  Source   Edit

This module implements lifting for type-bound operations (=sink, =, =destroy, =deepCopy).

Procs

proc boolLit(g: ModuleGraph; info: TLineInfo; value: bool): PNode {.
    ...raises: [KeyError, Exception, ERecoverableError],
    tags: [ReadDirEffect, RootEffect].}
  Source   Edit
proc createTypeBoundOps(g: ModuleGraph; c: PContext; orig: PType;
                        info: TLineInfo; idgen: IdGenerator) {.
    ...raises: [Exception, KeyError, ERecoverableError, ValueError],
    tags: [RootEffect, ReadDirEffect].}
In the semantic pass this is called in strategic places to ensure we lift assignment, destructors and moves properly. The later 'injectdestructors' pass depends on it.   Source   Edit
proc cyclicType(t: PType; g: ModuleGraph): bool {.
    ...raises: [Exception, ERecoverableError, KeyError],
    tags: [RootEffect, ReadDirEffect].}
  Source   Edit
proc genBuiltin(g: ModuleGraph; idgen: IdGenerator; magic: TMagic; name: string;
                i: PNode): PNode {....raises: [], tags: [].}
  Source   Edit
proc produceDestructorForDiscriminator(g: ModuleGraph; typ: PType; field: PSym;
                                       info: TLineInfo; idgen: IdGenerator): PSym {.
    ...raises: [KeyError, Exception, ERecoverableError, ValueError],
    tags: [ReadDirEffect, RootEffect].}
  Source   Edit

Templates

template asink(t: PType): PSym
  Source   Edit
template assignment(t: PType): PSym
  Source   Edit
template destructor(t: PType): PSym
  Source   Edit
template liftTypeBoundOps(c: PContext; typ: PType; info: TLineInfo)
  Source   Edit