MCPcopy
hub / github.com/google/mtail / VisitBefore

Method VisitBefore

internal/runtime/compiler/parser/sexp.go:55–220  ·  view source on GitHub ↗

VisitBefore implements the astNode Visitor interface.

(n ast.Node)

Source from the content-addressed store, hash-verified

53
54// VisitBefore implements the astNode Visitor interface.
55func (s *Sexp) VisitBefore(n ast.Node) (ast.Visitor, ast.Node) {
56 s.emit(fmt.Sprintf("( ;;%T ", n))
57 if s.EmitTypes {
58 s.emit(fmt.Sprintf("<%s> ", n.Type()))
59 }
60 s.emit(fmt.Sprintf("@ %s", n.Pos()))
61 s.newline()
62 s.indent()
63 switch v := n.(type) {
64
65 case *ast.PatternFragment:
66 s.emit("const ")
67 ast.Walk(s, v.ID)
68 s.emit(" ")
69
70 case *ast.PatternLit:
71 s.emit(fmt.Sprintf("%q", v.Pattern))
72
73 case *ast.BinaryExpr:
74 switch v.Op {
75 case LT:
76 s.emit("<")
77 case GT:
78 s.emit(">")
79 case LE:
80 s.emit("<=")
81 case GE:
82 s.emit(">=")
83 case EQ:
84 s.emit("==")
85 case NE:
86 s.emit("!=")
87 case SHL:
88 s.emit("<<")
89 case SHR:
90 s.emit(">>")
91 case BITAND:
92 s.emit("&")
93 case BITOR:
94 s.emit("|")
95 case XOR:
96 s.emit("^")
97 case NOT:
98 s.emit("~")
99 case AND:
100 s.emit("&&")
101 case OR:
102 s.emit("||")
103 case PLUS:
104 s.emit("+")
105 case MINUS:
106 s.emit("-")
107 case MUL:
108 s.emit("*")
109 case DIV:
110 s.emit("/")
111 case POW:
112 s.emit("**")

Callers

nothing calls this directly

Calls 8

emitMethod · 0.95
newlineMethod · 0.95
indentMethod · 0.95
emitScopeMethod · 0.95
WalkFunction · 0.92
KindTypeAlias · 0.70
TypeMethod · 0.65
PosMethod · 0.65

Tested by

no test coverage detected