summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorYuriy Glukhov <yuriy.glukhov@gmail.com>2015-09-04 19:23:58 +0300
committerYuriy Glukhov <yuriy.glukhov@gmail.com>2015-09-04 20:50:29 +0300
commit790ef23c48329f0d0a5841aed3913b5a87119ca9 (patch)
tree700ba794b00b87fdc4738aeebd9d8f525c14b90b
parent49869a2b10d73dac719690f3796a0584be38c0bb (diff)
downloadNim-790ef23c48329f0d0a5841aed3913b5a87119ca9.tar.gz
nimvm is magic
-rw-r--r--compiler/ast.nim3
-rw-r--r--compiler/semfold.nim2
-rw-r--r--lib/system.nim4
3 files changed, 8 insertions, 1 deletions
diff --git a/compiler/ast.nim b/compiler/ast.nim
index 0ad0a0718..aafe503dc 100644
--- a/compiler/ast.nim
+++ b/compiler/ast.nim
@@ -605,7 +605,8 @@ type
     mNBindSym, mLocals, mNCallSite,
     mEqIdent, mEqNimrodNode, mSameNodeType, mGetImpl,
     mNHint, mNWarning, mNError,
-    mInstantiationInfo, mGetTypeInfo, mNGenSym
+    mInstantiationInfo, mGetTypeInfo, mNGenSym,
+    mNimvm
 
 # things that we can evaluate safely at compile time, even if not asked for it:
 const
diff --git a/compiler/semfold.nim b/compiler/semfold.nim
index 2ab43a9c9..22cf05aa8 100644
--- a/compiler/semfold.nim
+++ b/compiler/semfold.nim
@@ -640,6 +640,8 @@ 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}:
diff --git a/lib/system.nim b/lib/system.nim
index 042813ae1..5bd8c56c7 100644
--- a/lib/system.nim
+++ b/lib/system.nim
@@ -1173,6 +1173,10 @@ const
     ## "i386", "alpha", "powerpc", "powerpc64", "powerpc64el", "sparc",
     ## "amd64", "mips", "mipsel", "arm", "arm64".
 
+  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 {.