summary refs log tree commit diff stats
path: root/nim/ast.pas
diff options
context:
space:
mode:
Diffstat (limited to 'nim/ast.pas')
-rw-r--r--nim/ast.pas154
1 files changed, 78 insertions, 76 deletions
diff --git a/nim/ast.pas b/nim/ast.pas
index aa83af4ed..681bf72d5 100644
--- a/nim/ast.pas
+++ b/nim/ast.pas
@@ -97,8 +97,8 @@ type
     nkStmtListExpr, nkBlockExpr, nkStmtListType, nkBlockType, 
     nkVm, nkTypeOfExpr, nkObjectTy, nkTupleTy, 
     nkRecList, nkRecCase, nkRecWhen, nkRefTy, 
-    nkPtrTy, nkVarTy, nkProcTy, nkEnumTy, 
-    nkEnumFieldDef, nkReturnToken);
+    nkPtrTy, nkVarTy, nkAbstractTy, nkProcTy, 
+    nkEnumTy, nkEnumFieldDef, nkReturnToken);
   TNodeKinds = set of TNodeKind;
 const
   NodeKindToStr: array [TNodeKind] of string = (
@@ -132,8 +132,8 @@ const
     'nkStmtListExpr', 'nkBlockExpr', 'nkStmtListType', 'nkBlockType', 
     'nkVm', 'nkTypeOfExpr', 'nkObjectTy', 'nkTupleTy', 
     'nkRecList', 'nkRecCase', 'nkRecWhen', 'nkRefTy', 
-    'nkPtrTy', 'nkVarTy', 'nkProcTy', 'nkEnumTy', 
-    'nkEnumFieldDef', 'nkReturnToken');
+    'nkPtrTy', 'nkVarTy', 'nkAbstractTy', 'nkProcTy', 
+    'nkEnumTy', 'nkEnumFieldDef', 'nkReturnToken');
 type
   TSymFlag = (
     sfUsed, sfStar, sfMinus, sfInInterface, 
@@ -142,7 +142,8 @@ type
     sfResult, sfNoSideEffect, sfMainModule, sfSystemModule, 
     sfNoReturn, sfAddrTaken, sfCompilerProc, sfCppMethod, 
     sfDiscriminant, sfDeprecated, sfInClosure, sfTypeCheck, 
-    sfCompileTime, sfThreadVar, sfMerge, sfDeadCodeElim);
+    sfCompileTime, sfThreadVar, sfMerge, sfDeadCodeElim, 
+    sfBorrow);
   TSymFlags = set of TSymFlag;
 const
   SymFlagToStr: array [TSymFlag] of string = (
@@ -152,30 +153,31 @@ const
     'sfResult', 'sfNoSideEffect', 'sfMainModule', 'sfSystemModule', 
     'sfNoReturn', 'sfAddrTaken', 'sfCompilerProc', 'sfCppMethod', 
     'sfDiscriminant', 'sfDeprecated', 'sfInClosure', 'sfTypeCheck', 
-    'sfCompileTime', 'sfThreadVar', 'sfMerge', 'sfDeadCodeElim');
+    'sfCompileTime', 'sfThreadVar', 'sfMerge', 'sfDeadCodeElim', 
+    'sfBorrow');
 type
   TTypeKind = (
     tyNone, tyBool, tyChar, tyEmpty, 
     tyArrayConstr, tyNil, tyGeneric, tyGenericInst, 
-    tyGenericParam, tyEnum, tyAnyEnum, tyArray, 
-    tyObject, tyTuple, tySet, tyRange, 
-    tyPtr, tyRef, tyVar, tySequence, 
-    tyProc, tyPointer, tyOpenArray, tyString, 
-    tyCString, tyForward, tyInt, tyInt8, 
-    tyInt16, tyInt32, tyInt64, tyFloat, 
-    tyFloat32, tyFloat64, tyFloat128);
+    tyGenericParam, tyAbstract, tyEnum, tyOrdinal, 
+    tyArray, tyObject, tyTuple, tySet, 
+    tyRange, tyPtr, tyRef, tyVar, 
+    tySequence, tyProc, tyPointer, tyOpenArray, 
+    tyString, tyCString, tyForward, tyInt, 
+    tyInt8, tyInt16, tyInt32, tyInt64, 
+    tyFloat, tyFloat32, tyFloat64, tyFloat128);
   TTypeKinds = set of TTypeKind;
 const
   TypeKindToStr: array [TTypeKind] of string = (
     'tyNone', 'tyBool', 'tyChar', 'tyEmpty', 
     'tyArrayConstr', 'tyNil', 'tyGeneric', 'tyGenericInst', 
-    'tyGenericParam', 'tyEnum', 'tyAnyEnum', 'tyArray', 
-    'tyObject', 'tyTuple', 'tySet', 'tyRange', 
-    'tyPtr', 'tyRef', 'tyVar', 'tySequence', 
-    'tyProc', 'tyPointer', 'tyOpenArray', 'tyString', 
-    'tyCString', 'tyForward', 'tyInt', 'tyInt8', 
-    'tyInt16', 'tyInt32', 'tyInt64', 'tyFloat', 
-    'tyFloat32', 'tyFloat64', 'tyFloat128');
+    'tyGenericParam', 'tyAbstract', 'tyEnum', 'tyOrdinal', 
+    'tyArray', 'tyObject', 'tyTuple', 'tySet', 
+    'tyRange', 'tyPtr', 'tyRef', 'tyVar', 
+    'tySequence', 'tyProc', 'tyPointer', 'tyOpenArray', 
+    'tyString', 'tyCString', 'tyForward', 'tyInt', 
+    'tyInt8', 'tyInt16', 'tyInt32', 'tyInt64', 
+    'tyFloat', 'tyFloat32', 'tyFloat64', 'tyFloat128');
 type
   TNodeFlag = (
     nfNone, nfBase2, nfBase8, nfBase16, 
@@ -220,36 +222,36 @@ type
     //cog.outl("m" + magics[-1])
     //]]]
     mNone, mDefined, mLow, mHigh, mSizeOf, mIs, 
-    mSucc, mPred, mInc, mDec, mOrd, mNew, 
-    mNewFinalize, mNewSeq, mRegisterFinalizer, mLengthOpenArray, mLengthStr, mLengthArray, 
-    mLengthSeq, mIncl, mExcl, mCard, mChr, mGCref, 
-    mGCunref, mAddI, mSubI, mMulI, mDivI, mModI, 
-    mAddI64, mSubI64, mMulI64, mDivI64, mModI64, mShrI, 
-    mShlI, mBitandI, mBitorI, mBitxorI, mMinI, mMaxI, 
-    mShrI64, mShlI64, mBitandI64, mBitorI64, mBitxorI64, mMinI64, 
-    mMaxI64, mAddF64, mSubF64, mMulF64, mDivF64, mMinF64, 
-    mMaxF64, mAddU, mSubU, mMulU, mDivU, mModU, 
-    mAddU64, mSubU64, mMulU64, mDivU64, mModU64, mEqI, 
-    mLeI, mLtI, mEqI64, mLeI64, mLtI64, mEqF64, 
-    mLeF64, mLtF64, mLeU, mLtU, mLeU64, mLtU64, 
-    mEqEnum, mLeEnum, mLtEnum, mEqCh, mLeCh, mLtCh, 
-    mEqB, mLeB, mLtB, mEqRef, mEqProc, mEqUntracedRef, 
-    mLePtr, mLtPtr, mEqCString, mXor, mUnaryMinusI, mUnaryMinusI64, 
-    mAbsI, mAbsI64, mNot, mUnaryPlusI, mBitnotI, mUnaryPlusI64, 
-    mBitnotI64, mUnaryPlusF64, mUnaryMinusF64, mAbsF64, mZe8ToI, mZe8ToI64, 
-    mZe16ToI, mZe16ToI64, mZe32ToI64, mZeIToI64, mToU8, mToU16, 
-    mToU32, mToFloat, mToBiggestFloat, mToInt, mToBiggestInt, mCharToStr, 
-    mBoolToStr, mIntToStr, mInt64ToStr, mFloatToStr, mCStrToStr, mStrToStr, 
-    mEnumToStr, mAnd, mOr, mEqStr, mLeStr, mLtStr, 
-    mEqSet, mLeSet, mLtSet, mMulSet, mPlusSet, mMinusSet, 
-    mSymDiffSet, mConStrStr, mConArrArr, mConArrT, mConTArr, mConTT, 
-    mSlice, mAppendStrCh, mAppendStrStr, mAppendSeqElem, mAppendSeqSeq, mInRange, 
-    mInSet, mAsgn, mRepr, mExit, mSetLengthStr, mSetLengthSeq, 
+    mEcho, mSucc, mPred, mInc, mDec, mOrd, 
+    mNew, mNewFinalize, mNewSeq, mRegisterFinalizer, mLengthOpenArray, mLengthStr, 
+    mLengthArray, mLengthSeq, mIncl, mExcl, mCard, mChr, 
+    mGCref, mGCunref, mAddI, mSubI, mMulI, mDivI, 
+    mModI, mAddI64, mSubI64, mMulI64, mDivI64, mModI64, 
+    mShrI, mShlI, mBitandI, mBitorI, mBitxorI, mMinI, 
+    mMaxI, mShrI64, mShlI64, mBitandI64, mBitorI64, mBitxorI64, 
+    mMinI64, mMaxI64, mAddF64, mSubF64, mMulF64, mDivF64, 
+    mMinF64, mMaxF64, mAddU, mSubU, mMulU, mDivU, 
+    mModU, mAddU64, mSubU64, mMulU64, mDivU64, mModU64, 
+    mEqI, mLeI, mLtI, mEqI64, mLeI64, mLtI64, 
+    mEqF64, mLeF64, mLtF64, mLeU, mLtU, mLeU64, 
+    mLtU64, mEqEnum, mLeEnum, mLtEnum, mEqCh, mLeCh, 
+    mLtCh, mEqB, mLeB, mLtB, mEqRef, mEqProc, 
+    mEqUntracedRef, mLePtr, mLtPtr, mEqCString, mXor, mUnaryMinusI, 
+    mUnaryMinusI64, mAbsI, mAbsI64, mNot, mUnaryPlusI, mBitnotI, 
+    mUnaryPlusI64, mBitnotI64, mUnaryPlusF64, mUnaryMinusF64, mAbsF64, mZe8ToI, 
+    mZe8ToI64, mZe16ToI, mZe16ToI64, mZe32ToI64, mZeIToI64, mToU8, 
+    mToU16, mToU32, mToFloat, mToBiggestFloat, mToInt, mToBiggestInt, 
+    mCharToStr, mBoolToStr, mIntToStr, mInt64ToStr, mFloatToStr, mCStrToStr, 
+    mStrToStr, mEnumToStr, mAnd, mOr, mEqStr, mLeStr, 
+    mLtStr, mEqSet, mLeSet, mLtSet, mMulSet, mPlusSet, 
+    mMinusSet, mSymDiffSet, mConStrStr, mConArrArr, mConArrT, mConTArr, 
+    mConTT, mSlice, mAppendStrCh, mAppendStrStr, mAppendSeqElem, mAppendSeqSeq, 
+    mInRange, mInSet, mRepr, mExit, mSetLengthStr, mSetLengthSeq, 
     mAssert, mSwap, mIsNil, mArrToSeq, mCopyStr, mCopyStrLast, 
     mNewString, mArray, mOpenArray, mRange, mSet, mSeq, 
-    mInt, mInt8, mInt16, mInt32, mInt64, mFloat, 
-    mFloat32, mFloat64, mBool, mChar, mString, mCstring, 
-    mPointer, mAnyEnum, mEmptySet, mIntSetBaseType, mNil, mIsMainModule, 
+    mOrdinal, mInt, mInt8, mInt16, mInt32, mInt64, 
+    mFloat, mFloat32, mFloat64, mBool, mChar, mString, 
+    mCstring, mPointer, mEmptySet, mIntSetBaseType, mNil, mIsMainModule, 
     mCompileDate, mCompileTime, mNimrodVersion, mNimrodMajor, mNimrodMinor, mNimrodPatch, 
     mCpuEndian, mHostOS, mHostCPU, mNaN, mInf, mNegInf, 
     mNLen, mNChild, mNSetChild, mNAdd, mNAddMultiple, mNDel, 
@@ -479,36 +481,36 @@ const // "MagicToStr" array:
     //cog.outl("'%s'" % magics[-1])
     //]]]
     'None', 'Defined', 'Low', 'High', 'SizeOf', 'Is', 
-    'Succ', 'Pred', 'Inc', 'Dec', 'Ord', 'New', 
-    'NewFinalize', 'NewSeq', 'RegisterFinalizer', 'LengthOpenArray', 'LengthStr', 'LengthArray', 
-    'LengthSeq', 'Incl', 'Excl', 'Card', 'Chr', 'GCref', 
-    'GCunref', 'AddI', 'SubI', 'MulI', 'DivI', 'ModI', 
-    'AddI64', 'SubI64', 'MulI64', 'DivI64', 'ModI64', 'ShrI', 
-    'ShlI', 'BitandI', 'BitorI', 'BitxorI', 'MinI', 'MaxI', 
-    'ShrI64', 'ShlI64', 'BitandI64', 'BitorI64', 'BitxorI64', 'MinI64', 
-    'MaxI64', 'AddF64', 'SubF64', 'MulF64', 'DivF64', 'MinF64', 
-    'MaxF64', 'AddU', 'SubU', 'MulU', 'DivU', 'ModU', 
-    'AddU64', 'SubU64', 'MulU64', 'DivU64', 'ModU64', 'EqI', 
-    'LeI', 'LtI', 'EqI64', 'LeI64', 'LtI64', 'EqF64', 
-    'LeF64', 'LtF64', 'LeU', 'LtU', 'LeU64', 'LtU64', 
-    'EqEnum', 'LeEnum', 'LtEnum', 'EqCh', 'LeCh', 'LtCh', 
-    'EqB', 'LeB', 'LtB', 'EqRef', 'EqProc', 'EqUntracedRef', 
-    'LePtr', 'LtPtr', 'EqCString', 'Xor', 'UnaryMinusI', 'UnaryMinusI64', 
-    'AbsI', 'AbsI64', 'Not', 'UnaryPlusI', 'BitnotI', 'UnaryPlusI64', 
-    'BitnotI64', 'UnaryPlusF64', 'UnaryMinusF64', 'AbsF64', 'Ze8ToI', 'Ze8ToI64', 
-    'Ze16ToI', 'Ze16ToI64', 'Ze32ToI64', 'ZeIToI64', 'ToU8', 'ToU16', 
-    'ToU32', 'ToFloat', 'ToBiggestFloat', 'ToInt', 'ToBiggestInt', 'CharToStr', 
-    'BoolToStr', 'IntToStr', 'Int64ToStr', 'FloatToStr', 'CStrToStr', 'StrToStr', 
-    'EnumToStr', 'And', 'Or', 'EqStr', 'LeStr', 'LtStr', 
-    'EqSet', 'LeSet', 'LtSet', 'MulSet', 'PlusSet', 'MinusSet', 
-    'SymDiffSet', 'ConStrStr', 'ConArrArr', 'ConArrT', 'ConTArr', 'ConTT', 
-    'Slice', 'AppendStrCh', 'AppendStrStr', 'AppendSeqElem', 'AppendSeqSeq', 'InRange', 
-    'InSet', 'Asgn', 'Repr', 'Exit', 'SetLengthStr', 'SetLengthSeq', 
+    'Echo', 'Succ', 'Pred', 'Inc', 'Dec', 'Ord', 
+    'New', 'NewFinalize', 'NewSeq', 'RegisterFinalizer', 'LengthOpenArray', 'LengthStr', 
+    'LengthArray', 'LengthSeq', 'Incl', 'Excl', 'Card', 'Chr', 
+    'GCref', 'GCunref', 'AddI', 'SubI', 'MulI', 'DivI', 
+    'ModI', 'AddI64', 'SubI64', 'MulI64', 'DivI64', 'ModI64', 
+    'ShrI', 'ShlI', 'BitandI', 'BitorI', 'BitxorI', 'MinI', 
+    'MaxI', 'ShrI64', 'ShlI64', 'BitandI64', 'BitorI64', 'BitxorI64', 
+    'MinI64', 'MaxI64', 'AddF64', 'SubF64', 'MulF64', 'DivF64', 
+    'MinF64', 'MaxF64', 'AddU', 'SubU', 'MulU', 'DivU', 
+    'ModU', 'AddU64', 'SubU64', 'MulU64', 'DivU64', 'ModU64', 
+    'EqI', 'LeI', 'LtI', 'EqI64', 'LeI64', 'LtI64', 
+    'EqF64', 'LeF64', 'LtF64', 'LeU', 'LtU', 'LeU64', 
+    'LtU64', 'EqEnum', 'LeEnum', 'LtEnum', 'EqCh', 'LeCh', 
+    'LtCh', 'EqB', 'LeB', 'LtB', 'EqRef', 'EqProc', 
+    'EqUntracedRef', 'LePtr', 'LtPtr', 'EqCString', 'Xor', 'UnaryMinusI', 
+    'UnaryMinusI64', 'AbsI', 'AbsI64', 'Not', 'UnaryPlusI', 'BitnotI', 
+    'UnaryPlusI64', 'BitnotI64', 'UnaryPlusF64', 'UnaryMinusF64', 'AbsF64', 'Ze8ToI', 
+    'Ze8ToI64', 'Ze16ToI', 'Ze16ToI64', 'Ze32ToI64', 'ZeIToI64', 'ToU8', 
+    'ToU16', 'ToU32', 'ToFloat', 'ToBiggestFloat', 'ToInt', 'ToBiggestInt', 
+    'CharToStr', 'BoolToStr', 'IntToStr', 'Int64ToStr', 'FloatToStr', 'CStrToStr', 
+    'StrToStr', 'EnumToStr', 'And', 'Or', 'EqStr', 'LeStr', 
+    'LtStr', 'EqSet', 'LeSet', 'LtSet', 'MulSet', 'PlusSet', 
+    'MinusSet', 'SymDiffSet', 'ConStrStr', 'ConArrArr', 'ConArrT', 'ConTArr', 
+    'ConTT', 'Slice', 'AppendStrCh', 'AppendStrStr', 'AppendSeqElem', 'AppendSeqSeq', 
+    'InRange', 'InSet', 'Repr', 'Exit', 'SetLengthStr', 'SetLengthSeq', 
     'Assert', 'Swap', 'IsNil', 'ArrToSeq', 'CopyStr', 'CopyStrLast', 
     'NewString', 'Array', 'OpenArray', 'Range', 'Set', 'Seq', 
-    'Int', 'Int8', 'Int16', 'Int32', 'Int64', 'Float', 
-    'Float32', 'Float64', 'Bool', 'Char', 'String', 'Cstring', 
-    'Pointer', 'AnyEnum', 'EmptySet', 'IntSetBaseType', 'Nil', 'IsMainModule', 
+    'Ordinal', 'Int', 'Int8', 'Int16', 'Int32', 'Int64', 
+    'Float', 'Float32', 'Float64', 'Bool', 'Char', 'String', 
+    'Cstring', 'Pointer', 'EmptySet', 'IntSetBaseType', 'Nil', 'IsMainModule', 
     'CompileDate', 'CompileTime', 'NimrodVersion', 'NimrodMajor', 'NimrodMinor', 'NimrodPatch', 
     'CpuEndian', 'HostOS', 'HostCPU', 'NaN', 'Inf', 'NegInf', 
     'NLen', 'NChild', 'NSetChild', 'NAdd', 'NAddMultiple', 'NDel',