vitess.io/vitess@v0.16.2/go/tools/asthelpergen/integration/ast_rewrite.go (about)

     1  /*
     2  Copyright 2023 The Vitess Authors.
     3  
     4  Licensed under the Apache License, Version 2.0 (the "License");
     5  you may not use this file except in compliance with the License.
     6  You may obtain a copy of the License at
     7  
     8      http://www.apache.org/licenses/LICENSE-2.0
     9  
    10  Unless required by applicable law or agreed to in writing, software
    11  distributed under the License is distributed on an "AS IS" BASIS,
    12  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13  See the License for the specific language governing permissions and
    14  limitations under the License.
    15  */
    16  // Code generated by ASTHelperGen. DO NOT EDIT.
    17  
    18  package integration
    19  
    20  func (a *application) rewriteAST(parent AST, node AST, replacer replacerFunc) bool {
    21  	if node == nil {
    22  		return true
    23  	}
    24  	switch node := node.(type) {
    25  	case BasicType:
    26  		return a.rewriteBasicType(parent, node, replacer)
    27  	case Bytes:
    28  		return a.rewriteBytes(parent, node, replacer)
    29  	case InterfaceContainer:
    30  		return a.rewriteInterfaceContainer(parent, node, replacer)
    31  	case InterfaceSlice:
    32  		return a.rewriteInterfaceSlice(parent, node, replacer)
    33  	case *Leaf:
    34  		return a.rewriteRefOfLeaf(parent, node, replacer)
    35  	case LeafSlice:
    36  		return a.rewriteLeafSlice(parent, node, replacer)
    37  	case *NoCloneType:
    38  		return a.rewriteRefOfNoCloneType(parent, node, replacer)
    39  	case *RefContainer:
    40  		return a.rewriteRefOfRefContainer(parent, node, replacer)
    41  	case *RefSliceContainer:
    42  		return a.rewriteRefOfRefSliceContainer(parent, node, replacer)
    43  	case *SubImpl:
    44  		return a.rewriteRefOfSubImpl(parent, node, replacer)
    45  	case ValueContainer:
    46  		return a.rewriteValueContainer(parent, node, replacer)
    47  	case ValueSliceContainer:
    48  		return a.rewriteValueSliceContainer(parent, node, replacer)
    49  	default:
    50  		// this should never happen
    51  		return true
    52  	}
    53  }
    54  func (a *application) rewriteBytes(parent AST, node Bytes, replacer replacerFunc) bool {
    55  	if node == nil {
    56  		return true
    57  	}
    58  	if a.pre != nil {
    59  		a.cur.replacer = replacer
    60  		a.cur.parent = parent
    61  		a.cur.node = node
    62  		kontinue := !a.pre(&a.cur)
    63  		if a.cur.revisit {
    64  			node = a.cur.node.(Bytes)
    65  			a.cur.revisit = false
    66  			return a.rewriteBytes(parent, node, replacer)
    67  		}
    68  		if kontinue {
    69  			return true
    70  		}
    71  	}
    72  	if a.post != nil {
    73  		if a.pre == nil {
    74  			a.cur.replacer = replacer
    75  			a.cur.parent = parent
    76  			a.cur.node = node
    77  		}
    78  		if !a.post(&a.cur) {
    79  			return false
    80  		}
    81  	}
    82  	return true
    83  }
    84  func (a *application) rewriteInterfaceContainer(parent AST, node InterfaceContainer, replacer replacerFunc) bool {
    85  	if a.pre != nil {
    86  		a.cur.replacer = replacer
    87  		a.cur.parent = parent
    88  		a.cur.node = node
    89  		if !a.pre(&a.cur) {
    90  			return true
    91  		}
    92  	}
    93  	if a.post != nil {
    94  		if a.pre == nil {
    95  			a.cur.replacer = replacer
    96  			a.cur.parent = parent
    97  			a.cur.node = node
    98  		}
    99  		if !a.post(&a.cur) {
   100  			return false
   101  		}
   102  	}
   103  	return true
   104  }
   105  func (a *application) rewriteInterfaceSlice(parent AST, node InterfaceSlice, replacer replacerFunc) bool {
   106  	if node == nil {
   107  		return true
   108  	}
   109  	if a.pre != nil {
   110  		a.cur.replacer = replacer
   111  		a.cur.parent = parent
   112  		a.cur.node = node
   113  		kontinue := !a.pre(&a.cur)
   114  		if a.cur.revisit {
   115  			node = a.cur.node.(InterfaceSlice)
   116  			a.cur.revisit = false
   117  			return a.rewriteInterfaceSlice(parent, node, replacer)
   118  		}
   119  		if kontinue {
   120  			return true
   121  		}
   122  	}
   123  	for x, el := range node {
   124  		if !a.rewriteAST(node, el, func(idx int) replacerFunc {
   125  			return func(newNode, parent AST) {
   126  				parent.(InterfaceSlice)[idx] = newNode.(AST)
   127  			}
   128  		}(x)) {
   129  			return false
   130  		}
   131  	}
   132  	if a.post != nil {
   133  		a.cur.replacer = replacer
   134  		a.cur.parent = parent
   135  		a.cur.node = node
   136  		if !a.post(&a.cur) {
   137  			return false
   138  		}
   139  	}
   140  	return true
   141  }
   142  func (a *application) rewriteRefOfLeaf(parent AST, node *Leaf, replacer replacerFunc) bool {
   143  	if node == nil {
   144  		return true
   145  	}
   146  	if a.pre != nil {
   147  		a.cur.replacer = replacer
   148  		a.cur.parent = parent
   149  		a.cur.node = node
   150  		if !a.pre(&a.cur) {
   151  			return true
   152  		}
   153  	}
   154  	if a.post != nil {
   155  		if a.pre == nil {
   156  			a.cur.replacer = replacer
   157  			a.cur.parent = parent
   158  			a.cur.node = node
   159  		}
   160  		if !a.post(&a.cur) {
   161  			return false
   162  		}
   163  	}
   164  	return true
   165  }
   166  func (a *application) rewriteLeafSlice(parent AST, node LeafSlice, replacer replacerFunc) bool {
   167  	if node == nil {
   168  		return true
   169  	}
   170  	if a.pre != nil {
   171  		a.cur.replacer = replacer
   172  		a.cur.parent = parent
   173  		a.cur.node = node
   174  		kontinue := !a.pre(&a.cur)
   175  		if a.cur.revisit {
   176  			node = a.cur.node.(LeafSlice)
   177  			a.cur.revisit = false
   178  			return a.rewriteLeafSlice(parent, node, replacer)
   179  		}
   180  		if kontinue {
   181  			return true
   182  		}
   183  	}
   184  	for x, el := range node {
   185  		if !a.rewriteRefOfLeaf(node, el, func(idx int) replacerFunc {
   186  			return func(newNode, parent AST) {
   187  				parent.(LeafSlice)[idx] = newNode.(*Leaf)
   188  			}
   189  		}(x)) {
   190  			return false
   191  		}
   192  	}
   193  	if a.post != nil {
   194  		a.cur.replacer = replacer
   195  		a.cur.parent = parent
   196  		a.cur.node = node
   197  		if !a.post(&a.cur) {
   198  			return false
   199  		}
   200  	}
   201  	return true
   202  }
   203  func (a *application) rewriteRefOfNoCloneType(parent AST, node *NoCloneType, replacer replacerFunc) bool {
   204  	if node == nil {
   205  		return true
   206  	}
   207  	if a.pre != nil {
   208  		a.cur.replacer = replacer
   209  		a.cur.parent = parent
   210  		a.cur.node = node
   211  		if !a.pre(&a.cur) {
   212  			return true
   213  		}
   214  	}
   215  	if a.post != nil {
   216  		if a.pre == nil {
   217  			a.cur.replacer = replacer
   218  			a.cur.parent = parent
   219  			a.cur.node = node
   220  		}
   221  		if !a.post(&a.cur) {
   222  			return false
   223  		}
   224  	}
   225  	return true
   226  }
   227  func (a *application) rewriteRefOfRefContainer(parent AST, node *RefContainer, replacer replacerFunc) bool {
   228  	if node == nil {
   229  		return true
   230  	}
   231  	if a.pre != nil {
   232  		a.cur.replacer = replacer
   233  		a.cur.parent = parent
   234  		a.cur.node = node
   235  		if !a.pre(&a.cur) {
   236  			return true
   237  		}
   238  	}
   239  	if !a.rewriteAST(node, node.ASTType, func(newNode, parent AST) {
   240  		parent.(*RefContainer).ASTType = newNode.(AST)
   241  	}) {
   242  		return false
   243  	}
   244  	if !a.rewriteRefOfLeaf(node, node.ASTImplementationType, func(newNode, parent AST) {
   245  		parent.(*RefContainer).ASTImplementationType = newNode.(*Leaf)
   246  	}) {
   247  		return false
   248  	}
   249  	if a.post != nil {
   250  		a.cur.replacer = replacer
   251  		a.cur.parent = parent
   252  		a.cur.node = node
   253  		if !a.post(&a.cur) {
   254  			return false
   255  		}
   256  	}
   257  	return true
   258  }
   259  func (a *application) rewriteRefOfRefSliceContainer(parent AST, node *RefSliceContainer, replacer replacerFunc) bool {
   260  	if node == nil {
   261  		return true
   262  	}
   263  	if a.pre != nil {
   264  		a.cur.replacer = replacer
   265  		a.cur.parent = parent
   266  		a.cur.node = node
   267  		if !a.pre(&a.cur) {
   268  			return true
   269  		}
   270  	}
   271  	for x, el := range node.ASTElements {
   272  		if !a.rewriteAST(node, el, func(idx int) replacerFunc {
   273  			return func(newNode, parent AST) {
   274  				parent.(*RefSliceContainer).ASTElements[idx] = newNode.(AST)
   275  			}
   276  		}(x)) {
   277  			return false
   278  		}
   279  	}
   280  	for x, el := range node.ASTImplementationElements {
   281  		if !a.rewriteRefOfLeaf(node, el, func(idx int) replacerFunc {
   282  			return func(newNode, parent AST) {
   283  				parent.(*RefSliceContainer).ASTImplementationElements[idx] = newNode.(*Leaf)
   284  			}
   285  		}(x)) {
   286  			return false
   287  		}
   288  	}
   289  	if a.post != nil {
   290  		a.cur.replacer = replacer
   291  		a.cur.parent = parent
   292  		a.cur.node = node
   293  		if !a.post(&a.cur) {
   294  			return false
   295  		}
   296  	}
   297  	return true
   298  }
   299  func (a *application) rewriteRefOfSubImpl(parent AST, node *SubImpl, replacer replacerFunc) bool {
   300  	if node == nil {
   301  		return true
   302  	}
   303  	if a.pre != nil {
   304  		a.cur.replacer = replacer
   305  		a.cur.parent = parent
   306  		a.cur.node = node
   307  		if !a.pre(&a.cur) {
   308  			return true
   309  		}
   310  	}
   311  	if !a.rewriteSubIface(node, node.inner, func(newNode, parent AST) {
   312  		parent.(*SubImpl).inner = newNode.(SubIface)
   313  	}) {
   314  		return false
   315  	}
   316  	if a.post != nil {
   317  		a.cur.replacer = replacer
   318  		a.cur.parent = parent
   319  		a.cur.node = node
   320  		if !a.post(&a.cur) {
   321  			return false
   322  		}
   323  	}
   324  	return true
   325  }
   326  func (a *application) rewriteValueContainer(parent AST, node ValueContainer, replacer replacerFunc) bool {
   327  	if a.pre != nil {
   328  		a.cur.replacer = replacer
   329  		a.cur.parent = parent
   330  		a.cur.node = node
   331  		if !a.pre(&a.cur) {
   332  			return true
   333  		}
   334  	}
   335  	if !a.rewriteAST(node, node.ASTType, func(newNode, parent AST) {
   336  		panic("[BUG] tried to replace 'ASTType' on 'ValueContainer'")
   337  	}) {
   338  		return false
   339  	}
   340  	if !a.rewriteRefOfLeaf(node, node.ASTImplementationType, func(newNode, parent AST) {
   341  		panic("[BUG] tried to replace 'ASTImplementationType' on 'ValueContainer'")
   342  	}) {
   343  		return false
   344  	}
   345  	if a.post != nil {
   346  		a.cur.replacer = replacer
   347  		a.cur.parent = parent
   348  		a.cur.node = node
   349  		if !a.post(&a.cur) {
   350  			return false
   351  		}
   352  	}
   353  	return true
   354  }
   355  func (a *application) rewriteValueSliceContainer(parent AST, node ValueSliceContainer, replacer replacerFunc) bool {
   356  	if a.pre != nil {
   357  		a.cur.replacer = replacer
   358  		a.cur.parent = parent
   359  		a.cur.node = node
   360  		if !a.pre(&a.cur) {
   361  			return true
   362  		}
   363  	}
   364  	for _, el := range node.ASTElements {
   365  		if !a.rewriteAST(node, el, func(newNode, parent AST) {
   366  			panic("[BUG] tried to replace 'ASTElements' on 'ValueSliceContainer'")
   367  		}) {
   368  			return false
   369  		}
   370  	}
   371  	for _, el := range node.ASTImplementationElements {
   372  		if !a.rewriteRefOfLeaf(node, el, func(newNode, parent AST) {
   373  			panic("[BUG] tried to replace 'ASTImplementationElements' on 'ValueSliceContainer'")
   374  		}) {
   375  			return false
   376  		}
   377  	}
   378  	if a.post != nil {
   379  		a.cur.replacer = replacer
   380  		a.cur.parent = parent
   381  		a.cur.node = node
   382  		if !a.post(&a.cur) {
   383  			return false
   384  		}
   385  	}
   386  	return true
   387  }
   388  func (a *application) rewriteSubIface(parent AST, node SubIface, replacer replacerFunc) bool {
   389  	if node == nil {
   390  		return true
   391  	}
   392  	switch node := node.(type) {
   393  	case *SubImpl:
   394  		return a.rewriteRefOfSubImpl(parent, node, replacer)
   395  	default:
   396  		// this should never happen
   397  		return true
   398  	}
   399  }
   400  func (a *application) rewriteBasicType(parent AST, node BasicType, replacer replacerFunc) bool {
   401  	if a.pre != nil {
   402  		a.cur.replacer = replacer
   403  		a.cur.parent = parent
   404  		a.cur.node = node
   405  		if !a.pre(&a.cur) {
   406  			return true
   407  		}
   408  	}
   409  	if a.post != nil {
   410  		if a.pre == nil {
   411  			a.cur.replacer = replacer
   412  			a.cur.parent = parent
   413  			a.cur.node = node
   414  		}
   415  		if !a.post(&a.cur) {
   416  			return false
   417  		}
   418  	}
   419  	return true
   420  }
   421  func (a *application) rewriteRefOfInterfaceContainer(parent AST, node *InterfaceContainer, replacer replacerFunc) bool {
   422  	if node == nil {
   423  		return true
   424  	}
   425  	if a.pre != nil {
   426  		a.cur.replacer = replacer
   427  		a.cur.parent = parent
   428  		a.cur.node = node
   429  		if !a.pre(&a.cur) {
   430  			return true
   431  		}
   432  	}
   433  	if a.post != nil {
   434  		if a.pre == nil {
   435  			a.cur.replacer = replacer
   436  			a.cur.parent = parent
   437  			a.cur.node = node
   438  		}
   439  		if !a.post(&a.cur) {
   440  			return false
   441  		}
   442  	}
   443  	return true
   444  }
   445  func (a *application) rewriteRefOfValueContainer(parent AST, node *ValueContainer, replacer replacerFunc) bool {
   446  	if node == nil {
   447  		return true
   448  	}
   449  	if a.pre != nil {
   450  		a.cur.replacer = replacer
   451  		a.cur.parent = parent
   452  		a.cur.node = node
   453  		if !a.pre(&a.cur) {
   454  			return true
   455  		}
   456  	}
   457  	if !a.rewriteAST(node, node.ASTType, func(newNode, parent AST) {
   458  		parent.(*ValueContainer).ASTType = newNode.(AST)
   459  	}) {
   460  		return false
   461  	}
   462  	if !a.rewriteRefOfLeaf(node, node.ASTImplementationType, func(newNode, parent AST) {
   463  		parent.(*ValueContainer).ASTImplementationType = newNode.(*Leaf)
   464  	}) {
   465  		return false
   466  	}
   467  	if a.post != nil {
   468  		a.cur.replacer = replacer
   469  		a.cur.parent = parent
   470  		a.cur.node = node
   471  		if !a.post(&a.cur) {
   472  			return false
   473  		}
   474  	}
   475  	return true
   476  }
   477  func (a *application) rewriteRefOfValueSliceContainer(parent AST, node *ValueSliceContainer, replacer replacerFunc) bool {
   478  	if node == nil {
   479  		return true
   480  	}
   481  	if a.pre != nil {
   482  		a.cur.replacer = replacer
   483  		a.cur.parent = parent
   484  		a.cur.node = node
   485  		if !a.pre(&a.cur) {
   486  			return true
   487  		}
   488  	}
   489  	for x, el := range node.ASTElements {
   490  		if !a.rewriteAST(node, el, func(idx int) replacerFunc {
   491  			return func(newNode, parent AST) {
   492  				parent.(*ValueSliceContainer).ASTElements[idx] = newNode.(AST)
   493  			}
   494  		}(x)) {
   495  			return false
   496  		}
   497  	}
   498  	for x, el := range node.ASTImplementationElements {
   499  		if !a.rewriteRefOfLeaf(node, el, func(idx int) replacerFunc {
   500  			return func(newNode, parent AST) {
   501  				parent.(*ValueSliceContainer).ASTImplementationElements[idx] = newNode.(*Leaf)
   502  			}
   503  		}(x)) {
   504  			return false
   505  		}
   506  	}
   507  	if a.post != nil {
   508  		a.cur.replacer = replacer
   509  		a.cur.parent = parent
   510  		a.cur.node = node
   511  		if !a.post(&a.cur) {
   512  			return false
   513  		}
   514  	}
   515  	return true
   516  }