* fix #21045 getTime with vmopsDanger is broken; alternative to #21054 * typo
This commit is contained in:
parent
7a18c1ef44
commit
07be1791ba
5 changed files with 51 additions and 22 deletions
|
|
@ -3283,6 +3283,7 @@ proc getNullValueAux(p: BProc; t: PType; obj, constOrNil: PNode,
|
|||
if constOrNil != nil:
|
||||
for i in 1..<constOrNil.len:
|
||||
if constOrNil[i].kind == nkExprColonExpr:
|
||||
assert constOrNil[i][0].kind == nkSym, "illformed object constr; the field is not a sym"
|
||||
if constOrNil[i][0].sym.name.id == field.name.id:
|
||||
genBracedInit(p, constOrNil[i][1], isConst, field.typ, result)
|
||||
return
|
||||
|
|
|
|||
|
|
@ -1,4 +1,6 @@
|
|||
import ast
|
||||
import ast, idents, lineinfos, astalgo
|
||||
import vmdef
|
||||
import std/times
|
||||
|
||||
template elementType*(T: typedesc): typedesc =
|
||||
typeof(block:
|
||||
|
|
@ -43,3 +45,12 @@ proc toLit*[T](a: T): PNode =
|
|||
else:
|
||||
static: doAssert false, "not yet supported: " & $T # add as needed
|
||||
|
||||
proc toTimeLit*(a: Time, c: PCtx, obj: PNode, info: TLineInfo): PNode =
|
||||
# probably refactor it into `toLit` in the future
|
||||
result = newTree(nkObjConstr)
|
||||
result.add(newNode(nkEmpty)) # can be changed to a symbol according to PType
|
||||
for k, ai in fieldPairs(a):
|
||||
let reti = newNode(nkExprColonExpr)
|
||||
reti.add newSymNode(lookupInRecord(obj, getIdent(c.cache, k)), info)
|
||||
reti.add ai.toLit
|
||||
result.add reti
|
||||
|
|
|
|||
|
|
@ -328,8 +328,9 @@ proc registerAdditionalOps*(c: PCtx) =
|
|||
registerCallback c, "stdlib.osproc.execCmdEx", proc (a: VmArgs) {.nimcall.} =
|
||||
let options = getNode(a, 1).fromLit(set[osproc.ProcessOption])
|
||||
a.setResult osproc.execCmdEx(getString(a, 0), options).toLit
|
||||
registerCallback c, "stdlib.times.getTime", proc (a: VmArgs) {.nimcall.} =
|
||||
setResult(a, times.getTime().toLit)
|
||||
registerCallback c, "stdlib.times.getTimeImpl", proc (a: VmArgs) =
|
||||
let obj = a.getNode(0).typ.n
|
||||
setResult(a, times.getTime().toTimeLit(c, obj, a.currentLineInfo))
|
||||
|
||||
proc getEffectList(c: PCtx; a: VmArgs; effectIndex: int) =
|
||||
let fn = getNode(a, 0)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue