@@ -17,6 +17,26 @@ proc nodeKind(n: Cursor): TNodeKind {.inline.} =
1717 assert n.kind == ParLe
1818 pool.tags[n.tagId].parseNodeKind ()
1919
20+ proc expect (n: Cursor ; k: set [NifKind ]) =
21+ if n.kind notin k:
22+ when defined (debug):
23+ writeStackTrace ()
24+ quit " [NIF decoder] expected: " & $ k & " but got: " & $ n.kind & toString n
25+
26+ proc expect (n: Cursor ; k: NifKind ) {.inline .} =
27+ expect n, {k}
28+
29+ proc incExpect (n: var Cursor ; k: set [NifKind ]) =
30+ inc n
31+ expect n, k
32+
33+ proc incExpect (n: var Cursor ; k: NifKind ) {.inline .} =
34+ incExpect n, {k}
35+
36+ proc skipParRi (n: var Cursor ) =
37+ expect n, {ParRi }
38+ inc n
39+
2040type
2141 SplittedNifSym = object
2242 name: string
@@ -56,14 +76,12 @@ proc fromNifSymDef(c: var DecodeContext; n: var Cursor; kind: TNodeKind): PNode
5676 of nkImportStmt: skModule
5777 of nkEnumTy: skEnumField
5878 else : skConst
59- inc n
60- assert n.kind == SymbolDef
79+ incExpect n, SymbolDef
6180 let nifSymId = n.symId
6281 let symdef = pool.syms[nifSymId].splitNifSym
6382 assert symdef.name.len != 0
6483 let ident = c.graph.cache.getIdent (symdef.name)
65- inc n
66- assert n.kind == IntLit
84+ incExpect n, IntLit
6785 let itemId = pool.integers[n.intId].int32
6886 inc n
6987 assert n.kind in {Symbol , DotToken }, $ n.kind
@@ -95,8 +113,7 @@ proc fromNifSymDef(c: var DecodeContext; n: var Cursor; kind: TNodeKind): PNode
95113 let hasSym = c.nifSymToPSym.hasKeyOrPut (nifSymId, psym)
96114 assert not hasSym
97115
98- assert n.kind == ParRi
99- inc n
116+ skipParRi n
100117
101118include nifdecodertypes
102119
@@ -107,7 +124,7 @@ proc fromNifNodeFlags(n: var Cursor): set[TNodeFlag] =
107124 assert n.kind == Ident
108125 result = parseNodeFlags (pool.strings[n.litId])
109126 inc n
110- expect n, ParRi
127+ skipParRi n
111128
112129proc fromNifLocal (c: var DecodeContext ; n: var Cursor ; kind: TNodeKind ): PNode =
113130 result = newNodeI (kind, unknownLineInfo, 1 )
@@ -123,10 +140,8 @@ proc fromNifLocal(c: var DecodeContext; n: var Cursor; kind: TNodeKind): PNode =
123140 else :
124141 result [0 ][0 ].sym.typ = fromNifType (c, n)
125142 result [0 ][2 ] = fromNif (c, n)
126- assert n.kind == ParRi # nkIdentDefs
127- inc n
128- assert n.kind == ParRi
129- inc n
143+ skipParRi n # nkIdentDefs
144+ skipParRi n
130145
131146proc fromNifTypeSection (c: var DecodeContext ; n: var Cursor ): PNode =
132147 result = newNodeI (nkTypeDef, unknownLineInfo, 3 )
@@ -153,8 +168,7 @@ proc fromNifTypeSection(c: var DecodeContext; n: var Cursor): PNode =
153168 result [2 ] = newNode (nkEmpty)
154169 sym.sym.typ = fromNifType (c, n)
155170
156- assert n.kind == ParRi
157- inc n
171+ skipParRi n
158172
159173proc fromNifImport (c: var DecodeContext ; n: var Cursor ): PNode =
160174 result = newNode (nkImportStmt)
@@ -236,8 +250,7 @@ proc fromNifSuf(c: var DecodeContext; n: var Cursor): PNode =
236250 else :
237251 assert false , " invalid node in suf node " & $ n.kind
238252 inc n
239- assert n.kind == ParRi
240- inc n
253+ skipParRi n
241254
242255proc fromNif (c: var DecodeContext ; n: var Cursor ): PNode =
243256 result = nil
0 commit comments