summary refs log tree commit diff stats
path: root/compiler
diff options
context:
space:
mode:
authorZahary Karadjov <zahary@gmail.comy>2011-09-05 15:56:02 +0300
committerZahary Karadjov <zahary@gmail.comy>2011-09-20 14:13:45 +0300
commitd541815e4b61b8378ed79af642cc2e0f3b4e09df (patch)
tree0bbb99e90fa72efb49d67424550d1ed215134114 /compiler
parentdaa2c8732d0f4feef20f68e75e9c491e95b95a0d (diff)
downloadNim-d541815e4b61b8378ed79af642cc2e0f3b4e09df.tar.gz
Added AST introspection routines as a part of the standard library
Diffstat (limited to 'compiler')
-rwxr-xr-xcompiler/ast.nim2
-rwxr-xr-xcompiler/semexprs.nim7
2 files changed, 8 insertions, 1 deletions
diff --git a/compiler/ast.nim b/compiler/ast.nim
index bb9803830..485639a01 100755
--- a/compiler/ast.nim
+++ b/compiler/ast.nim
@@ -312,7 +312,7 @@ type
 
   TMagic* = enum # symbols that require compiler magic:
     mNone, mDefined, mDefinedInScope, mLow, mHigh, mSizeOf, mIs, mOf,
-    mEcho, mShallowCopy, mSlurp,
+    mEcho, mAstToYaml, mShallowCopy, mSlurp,
     mUnaryLt, mSucc, 
     mPred, mInc, mDec, mOrd, mNew, mNewFinalize, mNewSeq, mLengthOpenArray, 
     mLengthStr, mLengthArray, mLengthSeq, mIncl, mExcl, mCard, mChr, mGCref, 
diff --git a/compiler/semexprs.nim b/compiler/semexprs.nim
index f86a4f60d..36211fbe9 100755
--- a/compiler/semexprs.nim
+++ b/compiler/semexprs.nim
@@ -8,6 +8,7 @@
 #
 
 # this module does the semantic checking for expressions
+
 const 
   ConstAbstractTypes = {tyNil, tyChar, tyInt..tyInt64, tyFloat..tyFloat128, 
     tyArrayConstr, tyTuple, tySet}
@@ -883,6 +884,11 @@ proc setMs(n: PNode, s: PSym): PNode =
   n.sons[0] = newSymNode(s)
   n.sons[0].info = n.info
 
+proc semAstToYaml(c: PContext, n: PNode): PNode =
+  result = newStrNode(nkStrLit, n.treeToYaml.ropeToStr)
+  result.typ = getSysType(tyString)
+  result.info = n.info
+
 proc semSlurp(c: PContext, n: PNode, flags: TExprFlags): PNode = 
   if sonsLen(n) == 2:
     var a = c.semConstExpr(c, n.sons[1])
@@ -921,6 +927,7 @@ proc semMagic(c: PContext, n: PNode, s: PSym, flags: TExprFlags): PNode =
     else:
       result = semDirectOp(c, n, flags)
   of mSlurp: result = semSlurp(c, n, flags)
+  of mAstToYaml: result = semAstToYaml(c, n)
   else: result = semDirectOp(c, n, flags)
 
 proc semIfExpr(c: PContext, n: PNode): PNode =