diff options
author | Andreas Rumpf <andreasrumpf@noname> | 2009-09-15 23:22:22 +0200 |
---|---|---|
committer | Andreas Rumpf <andreasrumpf@noname> | 2009-09-15 23:22:22 +0200 |
commit | 66a7e3d37c0303997a6b1a3b7ec263dfb8c07748 (patch) | |
tree | 40ae1ab8aeb9086b7310ea73ab8a2ed6b597f88b /nim/ast.pas | |
parent | 300430fbba28b408f7ac86ca46b03d9d50839399 (diff) | |
download | Nim-66a7e3d37c0303997a6b1a3b7ec263dfb8c07748.tar.gz |
added tools and web dirs
Diffstat (limited to 'nim/ast.pas')
-rwxr-xr-x[-rw-r--r--] | nim/ast.pas | 174 |
1 files changed, 97 insertions, 77 deletions
diff --git a/nim/ast.pas b/nim/ast.pas index 4836a860e..aec165585 100644..100755 --- a/nim/ast.pas +++ b/nim/ast.pas @@ -1,7 +1,7 @@ // // // The Nimrod Compiler -// (c) Copyright 2008 Andreas Rumpf +// (c) Copyright 2009 Andreas Rumpf // // See the file "copying.txt", included in this // distribution, for details about the copyright. @@ -72,32 +72,31 @@ type nkInt16Lit, nkInt32Lit, nkInt64Lit, nkFloatLit, nkFloat32Lit, nkFloat64Lit, nkStrLit, nkRStrLit, nkTripleStrLit, nkMetaNode, nkNilLit, nkDotCall, - nkCommand, nkCall, nkGenericCall, nkExplicitTypeListCall, - nkExprEqExpr, nkExprColonExpr, nkIdentDefs, nkVarTuple, - nkInfix, nkPrefix, nkPostfix, nkPar, - nkCurly, nkBracket, nkBracketExpr, nkPragmaExpr, - nkRange, nkDotExpr, nkCheckedFieldExpr, nkDerefExpr, - nkIfExpr, nkElifExpr, nkElseExpr, nkLambda, - nkAccQuoted, nkTableConstr, nkQualified, nkBind, - nkSymChoice, nkHiddenStdConv, nkHiddenSubConv, nkHiddenCallConv, - nkConv, nkCast, nkAddr, nkHiddenAddr, - nkHiddenDeref, nkObjDownConv, nkObjUpConv, nkChckRangeF, - nkChckRange64, nkChckRange, nkStringToCString, nkCStringToString, - nkPassAsOpenArray, nkAsgn, nkFastAsgn, nkDefaultTypeParam, - nkGenericParams, nkFormalParams, nkOfInherit, nkModule, - nkProcDef, nkConverterDef, nkMacroDef, nkTemplateDef, - nkIteratorDef, nkOfBranch, nkElifBranch, nkExceptBranch, - nkElse, nkMacroStmt, nkAsmStmt, nkPragma, - nkIfStmt, nkWhenStmt, nkForStmt, nkWhileStmt, - nkCaseStmt, nkVarSection, nkConstSection, nkConstDef, - nkTypeSection, nkTypeDef, nkYieldStmt, nkTryStmt, - nkFinally, nkRaiseStmt, nkReturnStmt, nkBreakStmt, - nkContinueStmt, nkBlockStmt, nkDiscardStmt, nkStmtList, - nkImportStmt, nkFromStmt, nkImportAs, nkIncludeStmt, - nkCommentStmt, nkStmtListExpr, nkBlockExpr, nkStmtListType, - nkBlockType, nkVm, nkTypeOfExpr, nkObjectTy, + nkCommand, nkCall, nkCallStrLit, nkExprEqExpr, + nkExprColonExpr, nkIdentDefs, nkVarTuple, nkInfix, + nkPrefix, nkPostfix, nkPar, nkCurly, + nkBracket, nkBracketExpr, nkPragmaExpr, nkRange, + nkDotExpr, nkCheckedFieldExpr, nkDerefExpr, nkIfExpr, + nkElifExpr, nkElseExpr, nkLambda, nkAccQuoted, + nkTableConstr, nkQualified, nkBind, nkSymChoice, + nkHiddenStdConv, nkHiddenSubConv, nkHiddenCallConv, nkConv, + nkCast, nkAddr, nkHiddenAddr, nkHiddenDeref, + nkObjDownConv, nkObjUpConv, nkChckRangeF, nkChckRange64, + nkChckRange, nkStringToCString, nkCStringToString, nkPassAsOpenArray, + nkAsgn, nkFastAsgn, nkGenericParams, nkFormalParams, + nkOfInherit, nkModule, nkProcDef, nkConverterDef, + nkMacroDef, nkTemplateDef, nkIteratorDef, nkOfBranch, + nkElifBranch, nkExceptBranch, nkElse, nkMacroStmt, + nkAsmStmt, nkPragma, nkIfStmt, nkWhenStmt, + nkForStmt, nkWhileStmt, nkCaseStmt, nkVarSection, + nkConstSection, nkConstDef, nkTypeSection, nkTypeDef, + nkYieldStmt, nkTryStmt, nkFinally, nkRaiseStmt, + nkReturnStmt, nkBreakStmt, nkContinueStmt, nkBlockStmt, + nkDiscardStmt, nkStmtList, nkImportStmt, nkFromStmt, + nkIncludeStmt, nkCommentStmt, nkStmtListExpr, nkBlockExpr, + nkStmtListType, nkBlockType, nkTypeOfExpr, nkObjectTy, nkTupleTy, nkRecList, nkRecCase, nkRecWhen, - nkRefTy, nkPtrTy, nkVarTy, nkAbstractTy, + nkRefTy, nkPtrTy, nkVarTy, nkDistinctTy, nkProcTy, nkEnumTy, nkEnumFieldDef, nkReturnToken); TNodeKinds = set of TNodeKind; const @@ -107,32 +106,31 @@ const 'nkInt16Lit', 'nkInt32Lit', 'nkInt64Lit', 'nkFloatLit', 'nkFloat32Lit', 'nkFloat64Lit', 'nkStrLit', 'nkRStrLit', 'nkTripleStrLit', 'nkMetaNode', 'nkNilLit', 'nkDotCall', - 'nkCommand', 'nkCall', 'nkGenericCall', 'nkExplicitTypeListCall', - 'nkExprEqExpr', 'nkExprColonExpr', 'nkIdentDefs', 'nkVarTuple', - 'nkInfix', 'nkPrefix', 'nkPostfix', 'nkPar', - 'nkCurly', 'nkBracket', 'nkBracketExpr', 'nkPragmaExpr', - 'nkRange', 'nkDotExpr', 'nkCheckedFieldExpr', 'nkDerefExpr', - 'nkIfExpr', 'nkElifExpr', 'nkElseExpr', 'nkLambda', - 'nkAccQuoted', 'nkTableConstr', 'nkQualified', 'nkBind', - 'nkSymChoice', 'nkHiddenStdConv', 'nkHiddenSubConv', 'nkHiddenCallConv', - 'nkConv', 'nkCast', 'nkAddr', 'nkHiddenAddr', - 'nkHiddenDeref', 'nkObjDownConv', 'nkObjUpConv', 'nkChckRangeF', - 'nkChckRange64', 'nkChckRange', 'nkStringToCString', 'nkCStringToString', - 'nkPassAsOpenArray', 'nkAsgn', 'nkFastAsgn', 'nkDefaultTypeParam', - 'nkGenericParams', 'nkFormalParams', 'nkOfInherit', 'nkModule', - 'nkProcDef', 'nkConverterDef', 'nkMacroDef', 'nkTemplateDef', - 'nkIteratorDef', 'nkOfBranch', 'nkElifBranch', 'nkExceptBranch', - 'nkElse', 'nkMacroStmt', 'nkAsmStmt', 'nkPragma', - 'nkIfStmt', 'nkWhenStmt', 'nkForStmt', 'nkWhileStmt', - 'nkCaseStmt', 'nkVarSection', 'nkConstSection', 'nkConstDef', - 'nkTypeSection', 'nkTypeDef', 'nkYieldStmt', 'nkTryStmt', - 'nkFinally', 'nkRaiseStmt', 'nkReturnStmt', 'nkBreakStmt', - 'nkContinueStmt', 'nkBlockStmt', 'nkDiscardStmt', 'nkStmtList', - 'nkImportStmt', 'nkFromStmt', 'nkImportAs', 'nkIncludeStmt', - 'nkCommentStmt', 'nkStmtListExpr', 'nkBlockExpr', 'nkStmtListType', - 'nkBlockType', 'nkVm', 'nkTypeOfExpr', 'nkObjectTy', + 'nkCommand', 'nkCall', 'nkCallStrLit', 'nkExprEqExpr', + 'nkExprColonExpr', 'nkIdentDefs', 'nkVarTuple', 'nkInfix', + 'nkPrefix', 'nkPostfix', 'nkPar', 'nkCurly', + 'nkBracket', 'nkBracketExpr', 'nkPragmaExpr', 'nkRange', + 'nkDotExpr', 'nkCheckedFieldExpr', 'nkDerefExpr', 'nkIfExpr', + 'nkElifExpr', 'nkElseExpr', 'nkLambda', 'nkAccQuoted', + 'nkTableConstr', 'nkQualified', 'nkBind', 'nkSymChoice', + 'nkHiddenStdConv', 'nkHiddenSubConv', 'nkHiddenCallConv', 'nkConv', + 'nkCast', 'nkAddr', 'nkHiddenAddr', 'nkHiddenDeref', + 'nkObjDownConv', 'nkObjUpConv', 'nkChckRangeF', 'nkChckRange64', + 'nkChckRange', 'nkStringToCString', 'nkCStringToString', 'nkPassAsOpenArray', + 'nkAsgn', 'nkFastAsgn', 'nkGenericParams', 'nkFormalParams', + 'nkOfInherit', 'nkModule', 'nkProcDef', 'nkConverterDef', + 'nkMacroDef', 'nkTemplateDef', 'nkIteratorDef', 'nkOfBranch', + 'nkElifBranch', 'nkExceptBranch', 'nkElse', 'nkMacroStmt', + 'nkAsmStmt', 'nkPragma', 'nkIfStmt', 'nkWhenStmt', + 'nkForStmt', 'nkWhileStmt', 'nkCaseStmt', 'nkVarSection', + 'nkConstSection', 'nkConstDef', 'nkTypeSection', 'nkTypeDef', + 'nkYieldStmt', 'nkTryStmt', 'nkFinally', 'nkRaiseStmt', + 'nkReturnStmt', 'nkBreakStmt', 'nkContinueStmt', 'nkBlockStmt', + 'nkDiscardStmt', 'nkStmtList', 'nkImportStmt', 'nkFromStmt', + 'nkIncludeStmt', 'nkCommentStmt', 'nkStmtListExpr', 'nkBlockExpr', + 'nkStmtListType', 'nkBlockType', 'nkTypeOfExpr', 'nkObjectTy', 'nkTupleTy', 'nkRecList', 'nkRecCase', 'nkRecWhen', - 'nkRefTy', 'nkPtrTy', 'nkVarTy', 'nkAbstractTy', + 'nkRefTy', 'nkPtrTy', 'nkVarTy', 'nkDistinctTy', 'nkProcTy', 'nkEnumTy', 'nkEnumFieldDef', 'nkReturnToken'); type TSymFlag = ( @@ -158,8 +156,9 @@ const type TTypeKind = ( tyNone, tyBool, tyChar, tyEmpty, - tyArrayConstr, tyNil, tyGeneric, tyGenericInst, - tyGenericParam, tyAbstract, tyEnum, tyOrdinal, + tyArrayConstr, tyNil, tyExpr, tyStmt, + tyTypeDesc, tyGenericInvokation, tyGenericBody, tyGenericInst, + tyGenericParam, tyDistinct, tyEnum, tyOrdinal, tyArray, tyObject, tyTuple, tySet, tyRange, tyPtr, tyRef, tyVar, tySequence, tyProc, tyPointer, tyOpenArray, @@ -170,8 +169,9 @@ type const TypeKindToStr: array [TTypeKind] of string = ( 'tyNone', 'tyBool', 'tyChar', 'tyEmpty', - 'tyArrayConstr', 'tyNil', 'tyGeneric', 'tyGenericInst', - 'tyGenericParam', 'tyAbstract', 'tyEnum', 'tyOrdinal', + 'tyArrayConstr', 'tyNil', 'tyExpr', 'tyStmt', + 'tyTypeDesc', 'tyGenericInvokation', 'tyGenericBody', 'tyGenericInst', + 'tyGenericParam', 'tyDistinct', 'tyEnum', 'tyOrdinal', 'tyArray', 'tyObject', 'tyTuple', 'tySet', 'tyRange', 'tyPtr', 'tyRef', 'tyVar', 'tySequence', 'tyProc', 'tyPointer', 'tyOpenArray', @@ -198,16 +198,16 @@ const 'tfEnumHasWholes'); type TSymKind = ( - skUnknownSym, skConditional, skDynLib, skParam, - skTypeParam, skTemp, skType, skConst, + skUnknown, skConditional, skDynLib, skParam, + skGenericParam, skTemp, skType, skConst, skVar, skProc, skIterator, skConverter, skMacro, skTemplate, skField, skEnumField, skForVar, skModule, skLabel, skStub); TSymKinds = set of TSymKind; const SymKindToStr: array [TSymKind] of string = ( - 'skUnknownSym', 'skConditional', 'skDynLib', 'skParam', - 'skTypeParam', 'skTemp', 'skType', 'skConst', + 'skUnknown', 'skConditional', 'skDynLib', 'skParam', + 'skGenericParam', 'skTemp', 'skType', 'skConst', 'skVar', 'skProc', 'skIterator', 'skConverter', 'skMacro', 'skTemplate', 'skField', 'skEnumField', 'skForVar', 'skModule', 'skLabel', 'skStub'); @@ -253,14 +253,15 @@ type mNewString, mArray, mOpenArray, mRange, mSet, mSeq, 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, - mNKind, mNIntVal, mNFloatVal, mNSymbol, mNIdent, mNGetType, - mNStrVal, mNSetIntVal, mNSetFloatVal, mNSetSymbol, mNSetIdent, mNSetType, - mNSetStrVal, mNNewNimNode, mNCopyNimNode, mNCopyNimTree, mStrToIdent, mIdentToStr, - mEqIdent, mNHint, mNWarning, mNError + mCstring, mPointer, mEmptySet, mIntSetBaseType, mNil, mExpr, + mStmt, mTypeDesc, mIsMainModule, mCompileDate, mCompileTime, mNimrodVersion, + mNimrodMajor, mNimrodMinor, mNimrodPatch, mCpuEndian, mHostOS, mHostCPU, + mNaN, mInf, mNegInf, mNLen, mNChild, mNSetChild, + mNAdd, mNAddMultiple, mNDel, mNKind, mNIntVal, mNFloatVal, + mNSymbol, mNIdent, mNGetType, mNStrVal, mNSetIntVal, mNSetFloatVal, + mNSetSymbol, mNSetIdent, mNSetType, mNSetStrVal, mNNewNimNode, mNCopyNimNode, + mNCopyNimTree, mStrToIdent, mIdentToStr, mEqIdent, mNHint, mNWarning, + mNError //[[[end]]] ); @@ -418,7 +419,6 @@ type loc: TLoc; end; - // these are not part of the syntax tree, but nevertherless inherit from TNode TPair = record key, val: PObject; end; @@ -512,19 +512,24 @@ const // "MagicToStr" array: 'NewString', 'Array', 'OpenArray', 'Range', 'Set', 'Seq', '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', - 'NKind', 'NIntVal', 'NFloatVal', 'NSymbol', 'NIdent', 'NGetType', - 'NStrVal', 'NSetIntVal', 'NSetFloatVal', 'NSetSymbol', 'NSetIdent', 'NSetType', - 'NSetStrVal', 'NNewNimNode', 'NCopyNimNode', 'NCopyNimTree', 'StrToIdent', 'IdentToStr', - 'EqIdent', 'NHint', 'NWarning', 'NError' + 'Cstring', 'Pointer', 'EmptySet', 'IntSetBaseType', 'Nil', 'Expr', + 'Stmt', 'TypeDesc', 'IsMainModule', 'CompileDate', 'CompileTime', 'NimrodVersion', + 'NimrodMajor', 'NimrodMinor', 'NimrodPatch', 'CpuEndian', 'HostOS', 'HostCPU', + 'NaN', 'Inf', 'NegInf', 'NLen', 'NChild', 'NSetChild', + 'NAdd', 'NAddMultiple', 'NDel', 'NKind', 'NIntVal', 'NFloatVal', + 'NSymbol', 'NIdent', 'NGetType', 'NStrVal', 'NSetIntVal', 'NSetFloatVal', + 'NSetSymbol', 'NSetIdent', 'NSetType', 'NSetStrVal', 'NNewNimNode', 'NCopyNimNode', + 'NCopyNimTree', 'StrToIdent', 'IdentToStr', 'EqIdent', 'NHint', 'NWarning', + 'NError' //[[[end]]] ); const - GenericTypes: TTypeKinds = {@set}[tyGeneric, tyGenericParam]; + GenericTypes: TTypeKinds = {@set}[ + tyGenericInvokation, + tyGenericBody, + tyGenericParam + ]; StructuralEquivTypes: TTypeKinds = {@set}[ tyArrayConstr, tyNil, tyTuple, @@ -669,6 +674,7 @@ type function IntSetContains(const s: TIntSet; key: int): bool; procedure IntSetIncl(var s: TIntSet; key: int); +procedure IntSetExcl(var s: TIntSet; key: int); procedure IntSetInit(var s: TIntSet); function IntSetContainsOrIncl(var s: TIntSet; key: int): bool; @@ -1069,6 +1075,7 @@ begin {@emit if isNil(father.sons) then father.sons := @[]; } {@emit add(father.sons, son); } + assert((father.kind <> tyGenericInvokation) or (son.kind <> tyGenericInst)); end; function sonsLen(n: PNode): int; @@ -1371,6 +1378,19 @@ begin or shlu(1, u and IntMask); end; +procedure IntSetExcl(var s: TIntSet; key: int); +var + u: TBitScalar; + t: PTrunk; +begin + t := IntSetGet(s, shru(key, TrunkShift)); + if t <> nil then begin + u := key and TrunkMask; + t.bits[shru(u, IntShift)] := t.bits[shru(u, IntShift)] + and not shlu(1, u and IntMask); + end +end; + function IntSetContainsOrIncl(var s: TIntSet; key: int): bool; var u: TBitScalar; |