MCPcopy
hub / github.com/uber-go/nilaway / CopyNode

Function CopyNode

assertion/function/assertiontree/util.go:407–445  ·  view source on GitHub ↗

CopyNode computes a deep code of an AssertionNode precondition: node is not nil

(node AssertionNode)

Source from the content-addressed store, hash-verified

405// CopyNode computes a deep code of an AssertionNode
406// precondition: node is not nil
407func CopyNode(node AssertionNode) AssertionNode {
408 var fresh AssertionNode
409 switch node := node.(type) {
410 case *RootAssertionNode:
411 fresh = &RootAssertionNode{
412 triggers: append(make([]annotation.FullTrigger, 0), node.triggers...),
413 exprNonceMap: node.exprNonceMap,
414 functionContext: node.functionContext,
415 }
416 case *varAssertionNode:
417 fresh = &varAssertionNode{decl: node.decl}
418 case *fldAssertionNode:
419 fresh = &fldAssertionNode{decl: node.decl, functionContext: node.functionContext}
420 case *funcAssertionNode:
421 fresh = &funcAssertionNode{decl: node.decl, args: node.args}
422 case *indexAssertionNode:
423 fresh = &indexAssertionNode{
424 index: node.index,
425 valType: node.valType,
426 recvType: node.recvType}
427 default:
428 panic("unrecognized node type")
429 }
430
431 fresh.SetChildren(make([]AssertionNode, 0, len(node.Children())))
432 for _, child := range node.Children() {
433 freshChild := CopyNode(child)
434 freshChild.SetParent(fresh)
435 fresh.SetChildren(append(fresh.Children(), freshChild))
436 }
437
438 copyConsumers := make([]*annotation.ConsumeTrigger, 0, len(node.ConsumeTriggers()))
439 for _, c := range node.ConsumeTriggers() {
440 copyConsumers = append(copyConsumers, c.Copy())
441 }
442 fresh.SetConsumeTriggers(copyConsumers)
443
444 return fresh
445}
446
447// lookupAstFromFile attempts to find the file ast for a given file (token.File)
448// nilable(result 0)

Callers 2

mergeIntoMethod · 0.85
BackpropAcrossFuncFunction · 0.85

Calls 6

SetChildrenMethod · 0.95
ChildrenMethod · 0.95
SetConsumeTriggersMethod · 0.95
SetParentMethod · 0.65
ConsumeTriggersMethod · 0.65
CopyMethod · 0.65

Tested by

no test coverage detected