compiler/sem/parampatterns

  Source   Edit

This module implements the pattern matching features for term rewriting macro support.

Types

TAliasRequest = enum
  aqNone = 1,               ## no alias analysis requested
  aqShouldAlias,            ## with some other param
  aqNoAlias                  ## request noalias
first byte of the bytecode determines alias checking   Source   Edit
TAssignableResult = enum
  arNone,                   ## no l-value and no discriminant
  arLValue,                 ## is an l-value
  arLocalLValue,            ## is an l-value, but local var; must not escape
                             ## its stack frame!
  arDiscriminant,           ## is a discriminant
  arLentValue,              ## lent value
  arStrange                  ## it is a strange beast like 'typedesc[var T]'
  Source   Edit
TSideEffectAnalysis = enum
  seUnknown, seSideEffect, seNoSideEffect
  Source   Edit

Consts

MaxStackSize = 64
max required stack size by the VM   Source   Edit

Procs

proc checkForSideEffects(n: PNode): TSideEffectAnalysis {....raises: [], tags: [].}
  Source   Edit
proc exprRoot(n: PNode): PSym {....raises: [], tags: [].}
  Source   Edit
proc isAssignable(owner: PSym; n: PNode; isUnsafeAddr = false): TAssignableResult {.
    ...raises: [Exception, ERecoverableError], tags: [RootEffect].}
'owner' can be nil!   Source   Edit
proc isLValue(n: PNode): bool {....raises: [Exception, ERecoverableError],
                                tags: [RootEffect].}
  Source   Edit
proc matchNodeKinds(p, n: PNode): bool {....raises: [Exception, ERecoverableError],
    tags: [RootEffect].}
  Source   Edit
proc semNodeKindConstraints(n: PNode; conf: ConfigRef; start: Natural): PNode {.
    ...raises: [Exception, ERecoverableError, ValueError], tags: [RootEffect].}
does semantic checking for a node kind pattern and compiles it into an efficient internal format.   Source   Edit
proc whichAlias(p: PSym): TAliasRequest {....raises: [], tags: [].}
  Source   Edit