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 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, 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