This file implements the evaluation engine for Nim code. It is a register based VM that works on packed data, see vmdef.Accessors for the arguments and the result of a VM callback. Included from vm.nim. The arguments live in the VM's stack frame: scalars are widened to 64 bits, other values use the VM's memory layout.
Imports
-
semmacrosanity, ic/sharedcounters, msgs, vmdef, vmgen, nimsets, types, parser, vmdeps, idents, trees, renderer, options, transf, gorgeimpl, lineinfos, btrees, macrocacheimpl, modulegraphs, sighashes, int128, vmprofiler, vmvalue, ast, semfold, evaltempl, magicsys, astalgo, liftdestructors, pathutils, vmconv, vmmarshal
Procs
proc evalConstExpr(module: PSym; idgen: IdGenerator; g: ModuleGraph; e: PNode; semCtx: PPassContext = nil): PNode {....raises: [KeyError, OSError, Exception, ValueError, IOError, ERecoverableError], tags: [ ReadEnvEffect, ReadIOEffect, ReadDirEffect, RootEffect, WriteIOEffect, TimeEffect, ExecIOEffect, WriteDirEffect], forbids: [].}
- Source Edit
proc evalMacroCall(module: PSym; idgen: IdGenerator; g: ModuleGraph; templInstCounter: ref int; n, nOrig: PNode; sym: PSym; semCtx: PPassContext = nil): PNode {....raises: [Exception, ValueError, OSError, KeyError, IOError, ERecoverableError], tags: [ RootEffect, ReadDirEffect, WriteIOEffect, ReadIOEffect, ReadEnvEffect, TimeEffect, ExecIOEffect, WriteDirEffect], forbids: [].}
- Source Edit
proc evalStaticExpr(module: PSym; idgen: IdGenerator; g: ModuleGraph; e: PNode; prc: PSym; semCtx: PPassContext = nil): PNode {....raises: [ KeyError, OSError, Exception, ValueError, IOError, ERecoverableError], tags: [ ReadEnvEffect, ReadIOEffect, ReadDirEffect, RootEffect, WriteIOEffect, TimeEffect, ExecIOEffect, WriteDirEffect], forbids: [].}
- Source Edit
proc evalStaticStmt(module: PSym; idgen: IdGenerator; g: ModuleGraph; e: PNode; prc: PSym; semCtx: PPassContext = nil) {....raises: [KeyError, OSError, Exception, ValueError, IOError, ERecoverableError], tags: [ ReadEnvEffect, ReadIOEffect, ReadDirEffect, RootEffect, WriteIOEffect, TimeEffect, ExecIOEffect, WriteDirEffect], forbids: [].}
- Source Edit
proc getVarString(a: VmArgs; i: Natural): string {....raises: [], tags: [], forbids: [].}
- Source Edit
proc interpreterCode(c: PPassContext; n: PNode): PNode {....raises: [KeyError, OSError, Exception, ValueError, IOError, ERecoverableError], tags: [ ReadEnvEffect, ReadIOEffect, ReadDirEffect, RootEffect, WriteIOEffect, TimeEffect, ExecIOEffect, WriteDirEffect], forbids: [].}
- Source Edit
proc registerAdditionalOps(c: PCtx) {....raises: [], tags: [], forbids: [].}
- Source Edit
proc setGlobalValue(c: PCtx; s: PSym; val: PNode) {....raises: [KeyError, OSError, Exception, ValueError, IOError, ERecoverableError], tags: [ReadEnvEffect, ReadIOEffect, ReadDirEffect, RootEffect, WriteIOEffect], forbids: [].}
- Does not do type checking so ensure the val matches the s.typ Source Edit
proc setResult(a: VmArgs; n: PNode) {....raises: [KeyError, OSError, Exception, ValueError, IOError, ERecoverableError], tags: [ReadEnvEffect, ReadIOEffect, ReadDirEffect, RootEffect, WriteIOEffect], forbids: [].}
- Source Edit
proc setResult(a: VmArgs; v: (BiggestInt, BiggestInt)) {....raises: [KeyError, OSError, Exception, ValueError, IOError, ERecoverableError], tags: [ ReadEnvEffect, ReadIOEffect, ReadDirEffect, RootEffect, WriteIOEffect], forbids: [].}
- Source Edit
proc setResult(a: VmArgs; v: AbsoluteDir) {....raises: [], tags: [], forbids: [].}
- Source Edit
proc setResultRef(a: VmArgs; p: Address) {....raises: [], tags: [], forbids: [].}
- returns a ref; the callee owns it, so we count the reference Source Edit
proc setupCompileTimeVar(module: PSym; idgen: IdGenerator; g: ModuleGraph; n: PNode; semCtx: PPassContext = nil) {....raises: [ KeyError, OSError, Exception, ValueError, IOError, ERecoverableError], tags: [ ReadEnvEffect, ReadIOEffect, ReadDirEffect, RootEffect, WriteIOEffect, TimeEffect, ExecIOEffect, WriteDirEffect], forbids: [].}
- Source Edit
proc setupEvalGen(graph: ModuleGraph; module: PSym; idgen: IdGenerator): PPassContext {. ...raises: [], tags: [], forbids: [].}
- Source Edit
proc setupGlobalCtx(module: PSym; graph: ModuleGraph; idgen: IdGenerator) {. ...raises: [], tags: [], forbids: [].}
- Source Edit
proc setVarString(a: VmArgs; i: Natural; s: string) {....raises: [], tags: [], forbids: [].}
- Source Edit