src/necsus/compiletime/parse

Types

ActiveCheck = ref object
  value*: NimNode
  arg*: SystemArg
A check that needs to be made before executing a system as part of the loop phase
ParsedApp = ref object
  name*: string
  runnerArgs*: seq[SystemArg]
  inputs*: AppInputs
  returns*: Option[MonoDirective]
Parsed information about the application proc itself
ParsedSystem = ref object
  id*: int
  phase*: SystemPhase
  symbol*: NimNode
  prefixArgs*: seq[NimNode]
  args*: seq[SystemArg]
  instanced*: Option[NimNode]
  checks*: seq[ActiveCheck]
  returns*: NimNode
Parsed information about a system proc
SystemPhase = enum
  StartupPhase, LoopPhase, TeardownPhase, SaveCallback, RestoreCallback,
  EventCallback, IndirectEventCallback
When a system should be executed

Procs

proc `$`(check: ActiveCheck): string {....raises: [], tags: [], forbids: [].}
proc `$`(system: ParsedSystem): string {....raises: [], tags: [], forbids: [].}
proc callbackSysMailboxName(system: ParsedSystem): NimNode {....raises: [],
    tags: [], forbids: [].}
The name of the mailbox to use for an event callback system
proc callbackSysType(system: ParsedSystem): NimNode {....raises: [], tags: [],
    forbids: [].}
Returns the event type handled by a callback system
proc instancedInfo(system: ParsedSystem): Option[
    tuple[fieldName: NimNode, typ: NimNode]] {....raises: [], tags: [], forbids: [].}
Returns details about the instancing configuration for a type
proc kind(arg: SystemArg): auto {....raises: [], tags: [], forbids: [].}
proc newEmptyApp(name: string): ParsedApp {....raises: [], tags: [], forbids: [].}
Creates an empty parsed app
proc parseApp(appProc: NimNode; runner: NimNode): ParsedApp {.
    ...raises: [KeyError, Exception], tags: [RootEffect], forbids: [].}
Parses the app proc
proc parseSystemDef(ident: NimNode; impl: NimNode): ParsedSystem {.
    ...raises: [KeyError, Exception], tags: [RootEffect], forbids: [].}
Parses a single system proc
proc parseSystemList(systems: NimNode): seq[ParsedSystem] {.
    ...raises: [KeyError, Exception], tags: [RootEffect], forbids: [].}

Iterators

iterator allArgs(system: ParsedSystem): SystemArg {....raises: [], tags: [],
    forbids: [].}
Yields all args in a system
iterator args(systems: openArray[ParsedSystem]): SystemArg {....raises: [],
    tags: [], forbids: [].}
Yields all args in a system
iterator components(app: ParsedApp): ComponentDef {....raises: [], tags: [],
    forbids: [].}
List all components referenced by an app
iterator components(arg: SystemArg): ComponentDef {....raises: [], tags: [],
    forbids: [].}
Pulls all components out of an argument
iterator components(systems: openArray[ParsedSystem]): ComponentDef {.
    ...raises: [], tags: [], forbids: [].}
Pulls all components from a list of parsed systems