Fixed nimvm in generics.
This commit is contained in:
parent
a480bebfce
commit
4ef4ad305c
3 changed files with 14 additions and 8 deletions
|
|
@ -124,6 +124,9 @@ proc semSym(c: PContext, n: PNode, s: PSym, flags: TExprFlags): PNode =
|
|||
return newSymNode(u, n.info)
|
||||
result = newSymNode(s, n.info)
|
||||
of skVar, skLet, skResult, skForVar:
|
||||
if s.magic == mNimvm:
|
||||
localError(n.info, "illegal context for 'nimvm' magic")
|
||||
|
||||
markUsed(n.info, s)
|
||||
styleCheckUse(n.info, s)
|
||||
# if a proc accesses a global variable, it is not side effect free:
|
||||
|
|
@ -1769,9 +1772,14 @@ proc semWhen(c: PContext, n: PNode, semCheck = true): PNode =
|
|||
# ...
|
||||
# else:
|
||||
# ...
|
||||
let whenNimvm = n.sons.len == 2 and n.sons[0].kind == nkElifBranch and
|
||||
n.sons[1].kind == nkElse and n.sons[0].sons[0].kind == nkIdent and
|
||||
lookUp(c, n.sons[0].sons[0]).magic == mNimvm
|
||||
var whenNimvm = false
|
||||
if n.sons.len == 2 and n.sons[0].kind == nkElifBranch and
|
||||
n.sons[1].kind == nkElse:
|
||||
let exprNode = n.sons[0].sons[0]
|
||||
if exprNode.kind == nkIdent:
|
||||
whenNimvm = lookUp(c, exprNode).magic == mNimvm
|
||||
elif exprNode.kind == nkSym:
|
||||
whenNimvm = exprNode.sym.magic == mNimvm
|
||||
|
||||
for i in countup(0, sonsLen(n) - 1):
|
||||
var it = n.sons[i]
|
||||
|
|
|
|||
|
|
@ -640,8 +640,6 @@ proc getConstExpr(m: PSym, n: PNode): PNode =
|
|||
of mNaN: result = newFloatNodeT(NaN, n)
|
||||
of mInf: result = newFloatNodeT(Inf, n)
|
||||
of mNegInf: result = newFloatNodeT(NegInf, n)
|
||||
of mNimvm:
|
||||
localError(n.info, "illegal context for 'nimvm' magic")
|
||||
else:
|
||||
if sfFakeConst notin s.flags: result = copyTree(s.ast)
|
||||
of {skProc, skMethod}:
|
||||
|
|
|
|||
|
|
@ -1173,12 +1173,12 @@ const
|
|||
## "i386", "alpha", "powerpc", "powerpc64", "powerpc64el", "sparc",
|
||||
## "amd64", "mips", "mipsel", "arm", "arm64".
|
||||
|
||||
nimvm* {.magic: "Nimvm".}: bool = false
|
||||
seqShallowFlag = low(int)
|
||||
|
||||
let nimvm* {.magic: "Nimvm".}: bool = false
|
||||
## may be used only in "when" expression.
|
||||
## It is true in Nim VM context and false otherwise
|
||||
|
||||
seqShallowFlag = low(int)
|
||||
|
||||
proc compileOption*(option: string): bool {.
|
||||
magic: "CompileOption", noSideEffect.}
|
||||
## can be used to determine an on|off compile-time option. Example:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue