diff options
author | Zahary Karadjov <zahary@gmail.comy> | 2011-09-05 15:56:02 +0300 |
---|---|---|
committer | Zahary Karadjov <zahary@gmail.comy> | 2011-09-20 14:13:45 +0300 |
commit | d541815e4b61b8378ed79af642cc2e0f3b4e09df (patch) | |
tree | 0bbb99e90fa72efb49d67424550d1ed215134114 /compiler | |
parent | daa2c8732d0f4feef20f68e75e9c491e95b95a0d (diff) | |
download | Nim-d541815e4b61b8378ed79af642cc2e0f3b4e09df.tar.gz |
Added AST introspection routines as a part of the standard library
Diffstat (limited to 'compiler')
-rwxr-xr-x | compiler/ast.nim | 2 | ||||
-rwxr-xr-x | compiler/semexprs.nim | 7 |
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 = |