1717// state.
1818
1919export function simple ( node , visitors , baseVisitor , state , override ) {
20+ if ( ! baseVisitor ) baseVisitor = base
2021 ; ( function c ( node , st , override ) {
2122 let type = override || node . type
2223 visitNode ( baseVisitor , type , node , st , c )
@@ -29,6 +30,7 @@ export function simple(node, visitors, baseVisitor, state, override) {
2930// (and also as state parameter when no other state is present).
3031export function ancestor ( node , visitors , baseVisitor , state , override ) {
3132 let ancestors = [ ]
33+ if ( ! baseVisitor ) baseVisitor = base
3234 ; ( function c ( node , st , override ) {
3335 let type = override || node . type
3436 let isNew = node !== ancestors [ ancestors . length - 1 ]
@@ -66,6 +68,7 @@ class Found {
6668
6769// A full walk triggers the callback on each node
6870export function full ( node , callback , baseVisitor , state , override ) {
71+ if ( ! baseVisitor ) baseVisitor = base
6972 let last
7073 ; ( function c ( node , st , override ) {
7174 let type = override || node . type
@@ -80,6 +83,7 @@ export function full(node, callback, baseVisitor, state, override) {
8083// An fullAncestor walk is like an ancestor walk, but triggers
8184// the callback on each node
8285export function fullAncestor ( node , callback , baseVisitor , state ) {
86+ if ( ! baseVisitor ) baseVisitor = base
8387 let ancestors = [ ] , last
8488 ; ( function c ( node , st , override ) {
8589 let type = override || node . type
@@ -98,6 +102,7 @@ export function fullAncestor(node, callback, baseVisitor, state) {
98102// null can be used as wildcard). Returns a {node, state} object, or
99103// undefined when it doesn't find a matching node.
100104export function findNodeAt ( node , start , end , test , baseVisitor , state ) {
105+ if ( ! baseVisitor ) baseVisitor = base
101106 test = makeTest ( test )
102107 try {
103108 ( function c ( node , st , override ) {
@@ -120,6 +125,7 @@ export function findNodeAt(node, start, end, test, baseVisitor, state) {
120125// position. Interface similar to findNodeAt.
121126export function findNodeAround ( node , pos , test , baseVisitor , state ) {
122127 test = makeTest ( test )
128+ if ( ! baseVisitor ) baseVisitor = base
123129 try {
124130 ( function c ( node , st , override ) {
125131 let type = override || node . type
@@ -136,6 +142,7 @@ export function findNodeAround(node, pos, test, baseVisitor, state) {
136142// Find the outermost matching node after a given position.
137143export function findNodeAfter ( node , pos , test , baseVisitor , state ) {
138144 test = makeTest ( test )
145+ if ( ! baseVisitor ) baseVisitor = base
139146 try {
140147 ( function c ( node , st , override ) {
141148 if ( node . end < pos ) return
@@ -152,6 +159,7 @@ export function findNodeAfter(node, pos, test, baseVisitor, state) {
152159// Find the outermost matching node before a given position.
153160export function findNodeBefore ( node , pos , test , baseVisitor , state ) {
154161 test = makeTest ( test )
162+ if ( ! baseVisitor ) baseVisitor = base
155163 let max
156164 ; ( function c ( node , st , override ) {
157165 if ( node . start > pos ) return
@@ -175,7 +183,6 @@ function skipThrough(node, st, c) { c(node, st) }
175183function ignore ( _node , _st , _c ) { }
176184
177185function visitNode ( baseVisitor , type , node , st , c ) {
178- if ( ! baseVisitor ) baseVisitor = base
179186 if ( baseVisitor [ type ] == null ) throw `Unregistered node type ${ type } `
180187 baseVisitor [ type ] ( node , st , c )
181188}
0 commit comments