@@ -20,7 +20,7 @@ export function simple(node, visitors, baseVisitor, state, override) {
2020 if ( ! baseVisitor ) baseVisitor = base
2121 ; ( function c ( node , st , override ) {
2222 let type = override || node . type
23- baseVisitor [ type ] ( node , st , c )
23+ visitNode ( baseVisitor , type , node , st , c )
2424 if ( visitors [ type ] ) visitors [ type ] ( node , st )
2525 } ) ( node , state , override )
2626}
@@ -35,7 +35,7 @@ export function ancestor(node, visitors, baseVisitor, state, override) {
3535 let type = override || node . type
3636 let isNew = node !== ancestors [ ancestors . length - 1 ]
3737 if ( isNew ) ancestors . push ( node )
38- baseVisitor [ type ] ( node , st , c )
38+ visitNode ( baseVisitor , type , node , st , c )
3939 if ( visitors [ type ] ) visitors [ type ] ( node , st || ancestors , ancestors )
4040 if ( isNew ) ancestors . pop ( )
4141 } ) ( node , state , override )
@@ -72,7 +72,7 @@ export function full(node, callback, baseVisitor, state, override) {
7272 let last
7373 ; ( function c ( node , st , override ) {
7474 let type = override || node . type
75- baseVisitor [ type ] ( node , st , c )
75+ visitNode ( baseVisitor , type , node , st , c )
7676 if ( last !== node ) {
7777 callback ( node , st , type )
7878 last = node
@@ -89,7 +89,7 @@ export function fullAncestor(node, callback, baseVisitor, state) {
8989 let type = override || node . type
9090 let isNew = node !== ancestors [ ancestors . length - 1 ]
9191 if ( isNew ) ancestors . push ( node )
92- baseVisitor [ type ] ( node , st , c )
92+ visitNode ( baseVisitor , type , node , st , c )
9393 if ( last !== node ) {
9494 callback ( node , st || ancestors , ancestors , type )
9595 last = node
@@ -109,7 +109,7 @@ export function findNodeAt(node, start, end, test, baseVisitor, state) {
109109 let type = override || node . type
110110 if ( ( start == null || node . start <= start ) &&
111111 ( end == null || node . end >= end ) )
112- baseVisitor [ type ] ( node , st , c )
112+ visitNode ( baseVisitor , type , node , st , c )
113113 if ( ( start == null || node . start === start ) &&
114114 ( end == null || node . end === end ) &&
115115 test ( type , node ) )
@@ -130,7 +130,7 @@ export function findNodeAround(node, pos, test, baseVisitor, state) {
130130 ( function c ( node , st , override ) {
131131 let type = override || node . type
132132 if ( node . start > pos || node . end < pos ) return
133- baseVisitor [ type ] ( node , st , c )
133+ visitNode ( baseVisitor , type , node , st , c )
134134 if ( test ( type , node ) ) throw new Found ( node , st )
135135 } ) ( node , state )
136136 } catch ( e ) {
@@ -148,7 +148,7 @@ export function findNodeAfter(node, pos, test, baseVisitor, state) {
148148 if ( node . end < pos ) return
149149 let type = override || node . type
150150 if ( node . start >= pos && test ( type , node ) ) throw new Found ( node , st )
151- baseVisitor [ type ] ( node , st , c )
151+ visitNode ( baseVisitor , type , node , st , c )
152152 } ) ( node , state )
153153 } catch ( e ) {
154154 if ( e instanceof Found ) return e
@@ -166,7 +166,7 @@ export function findNodeBefore(node, pos, test, baseVisitor, state) {
166166 let type = override || node . type
167167 if ( node . end <= pos && ( ! max || max . node . end < node . end ) && test ( type , node ) )
168168 max = new Found ( node , st )
169- baseVisitor [ type ] ( node , st , c )
169+ visitNode ( baseVisitor , type , node , st , c )
170170 } ) ( node , state )
171171 return max
172172}
@@ -180,7 +180,12 @@ export function make(funcs, baseVisitor) {
180180}
181181
182182function skipThrough ( node , st , c ) { c ( node , st ) }
183- function ignore ( _node , _st , _c ) { }
183+ function ignore ( _node , _st , _c ) { }
184+
185+ function visitNode ( baseVisitor , type , node , st , c ) {
186+ if ( baseVisitor [ type ] == null ) throw `No walker function defined for node type ${ type } `
187+ baseVisitor [ type ] ( node , st , c )
188+ }
184189
185190// Node walkers.
186191
0 commit comments