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 }