aboutsummaryrefslogtreecommitdiff
path: root/vendor/github.com/tdewolff/parse/v2/js/walk.go
diff options
context:
space:
mode:
authorMitja Felicijan <mitja.felicijan@gmail.com>2024-10-25 00:47:47 +0200
committerMitja Felicijan <mitja.felicijan@gmail.com>2024-10-25 00:47:47 +0200
commitc6cc0108ca7738023b45e0eeac0fa2390532dd93 (patch)
tree36890e6cd3091bbab8efbe686cc56f467f645bfd /vendor/github.com/tdewolff/parse/v2/js/walk.go
parent0130404a1dc663d4aa68d780c9bcb23a4243e68d (diff)
downloadjbmafp-c6cc0108ca7738023b45e0eeac0fa2390532dd93.tar.gz
Added vendor lock on depsHEADmaster
Diffstat (limited to 'vendor/github.com/tdewolff/parse/v2/js/walk.go')
-rw-r--r--vendor/github.com/tdewolff/parse/v2/js/walk.go288
1 files changed, 288 insertions, 0 deletions
diff --git a/vendor/github.com/tdewolff/parse/v2/js/walk.go b/vendor/github.com/tdewolff/parse/v2/js/walk.go
new file mode 100644
index 0000000..5c94473
--- /dev/null
+++ b/vendor/github.com/tdewolff/parse/v2/js/walk.go
@@ -0,0 +1,288 @@
1package js
2
3// IVisitor represents the AST Visitor
4// Each INode encountered by `Walk` is passed to `Enter`, children nodes will be ignored if the returned IVisitor is nil
5// `Exit` is called upon the exit of a node
6type IVisitor interface {
7 Enter(n INode) IVisitor
8 Exit(n INode)
9}
10
11// Walk traverses an AST in depth-first order
12func Walk(v IVisitor, n INode) {
13 if n == nil {
14 return
15 }
16
17 if v = v.Enter(n); v == nil {
18 return
19 }
20
21 defer v.Exit(n)
22
23 switch n := n.(type) {
24 case *AST:
25 Walk(v, &n.BlockStmt)
26 case *Var:
27 return
28 case *BlockStmt:
29 if n.List != nil {
30 for i := 0; i < len(n.List); i++ {
31 Walk(v, n.List[i])
32 }
33 }
34 case *EmptyStmt:
35 return
36 case *ExprStmt:
37 Walk(v, n.Value)
38 case *IfStmt:
39 Walk(v, n.Body)
40 Walk(v, n.Else)
41 Walk(v, n.Cond)
42 case *DoWhileStmt:
43 Walk(v, n.Body)
44 Walk(v, n.Cond)
45 case *WhileStmt:
46 Walk(v, n.Body)
47 Walk(v, n.Cond)
48 case *ForStmt:
49 if n.Body != nil {
50 Walk(v, n.Body)
51 }
52
53 Walk(v, n.Init)
54 Walk(v, n.Cond)
55 Walk(v, n.Post)
56 case *ForInStmt:
57 if n.Body != nil {
58 Walk(v, n.Body)
59 }
60
61 Walk(v, n.Init)
62 Walk(v, n.Value)
63 case *ForOfStmt:
64 if n.Body != nil {
65 Walk(v, n.Body)
66 }
67
68 Walk(v, n.Init)
69 Walk(v, n.Value)
70 case *CaseClause:
71 if n.List != nil {
72 for i := 0; i < len(n.List); i++ {
73 Walk(v, n.List[i])
74 }
75 }
76
77 Walk(v, n.Cond)
78 case *SwitchStmt:
79 if n.List != nil {
80 for i := 0; i < len(n.List); i++ {
81 Walk(v, &n.List[i])
82 }
83 }
84
85 Walk(v, n.Init)
86 case *BranchStmt:
87 return
88 case *ReturnStmt:
89 Walk(v, n.Value)
90 case *WithStmt:
91 Walk(v, n.Body)
92 Walk(v, n.Cond)
93 case *LabelledStmt:
94 Walk(v, n.Value)
95 case *ThrowStmt:
96 Walk(v, n.Value)
97 case *TryStmt:
98 if n.Body != nil {
99 Walk(v, n.Body)
100 }
101
102 if n.Catch != nil {
103 Walk(v, n.Catch)
104 }
105
106 if n.Finally != nil {
107 Walk(v, n.Finally)
108 }
109
110 Walk(v, n.Binding)
111 case *DebuggerStmt:
112 return
113 case *Alias:
114 return
115 case *ImportStmt:
116 if n.List != nil {
117 for i := 0; i < len(n.List); i++ {
118 Walk(v, &n.List[i])
119 }
120 }
121 case *ExportStmt:
122 if n.List != nil {
123 for i := 0; i < len(n.List); i++ {
124 Walk(v, &n.List[i])
125 }
126 }
127
128 Walk(v, n.Decl)
129 case *DirectivePrologueStmt:
130 return
131 case *PropertyName:
132 Walk(v, &n.Literal)
133 Walk(v, n.Computed)
134 case *BindingArray:
135 if n.List != nil {
136 for i := 0; i < len(n.List); i++ {
137 Walk(v, &n.List[i])
138 }
139 }
140
141 Walk(v, n.Rest)
142 case *BindingObjectItem:
143 if n.Key != nil {
144 Walk(v, n.Key)
145 }
146
147 Walk(v, &n.Value)
148 case *BindingObject:
149 if n.List != nil {
150 for i := 0; i < len(n.List); i++ {
151 Walk(v, &n.List[i])
152 }
153 }
154
155 if n.Rest != nil {
156 Walk(v, n.Rest)
157 }
158 case *BindingElement:
159 Walk(v, n.Binding)
160 Walk(v, n.Default)
161 case *VarDecl:
162 if n.List != nil {
163 for i := 0; i < len(n.List); i++ {
164 Walk(v, &n.List[i])
165 }
166 }
167 case *Params:
168 if n.List != nil {
169 for i := 0; i < len(n.List); i++ {
170 Walk(v, &n.List[i])
171 }
172 }
173
174 Walk(v, n.Rest)
175 case *FuncDecl:
176 Walk(v, &n.Body)
177 Walk(v, &n.Params)
178
179 if n.Name != nil {
180 Walk(v, n.Name)
181 }
182 case *MethodDecl:
183 Walk(v, &n.Body)
184 Walk(v, &n.Params)
185 Walk(v, &n.Name)
186 case *Field:
187 Walk(v, &n.Name)
188 Walk(v, n.Init)
189 case *ClassDecl:
190 if n.Name != nil {
191 Walk(v, n.Name)
192 }
193
194 Walk(v, n.Extends)
195
196 for _, item := range n.List {
197 if item.StaticBlock != nil {
198 Walk(v, item.StaticBlock)
199 } else if item.Method != nil {
200 Walk(v, item.Method)
201 } else {
202 Walk(v, &item.Field)
203 }
204 }
205 case *LiteralExpr:
206 return
207 case *Element:
208 Walk(v, n.Value)
209 case *ArrayExpr:
210 if n.List != nil {
211 for i := 0; i < len(n.List); i++ {
212 Walk(v, &n.List[i])
213 }
214 }
215 case *Property:
216 if n.Name != nil {
217 Walk(v, n.Name)
218 }
219
220 Walk(v, n.Value)
221 Walk(v, n.Init)
222 case *ObjectExpr:
223 if n.List != nil {
224 for i := 0; i < len(n.List); i++ {
225 Walk(v, &n.List[i])
226 }
227 }
228 case *TemplatePart:
229 Walk(v, n.Expr)
230 case *TemplateExpr:
231 if n.List != nil {
232 for i := 0; i < len(n.List); i++ {
233 Walk(v, &n.List[i])
234 }
235 }
236
237 Walk(v, n.Tag)
238 case *GroupExpr:
239 Walk(v, n.X)
240 case *IndexExpr:
241 Walk(v, n.X)
242 Walk(v, n.Y)
243 case *DotExpr:
244 Walk(v, n.X)
245 Walk(v, &n.Y)
246 case *NewTargetExpr:
247 return
248 case *ImportMetaExpr:
249 return
250 case *Arg:
251 Walk(v, n.Value)
252 case *Args:
253 if n.List != nil {
254 for i := 0; i < len(n.List); i++ {
255 Walk(v, &n.List[i])
256 }
257 }
258 case *NewExpr:
259 if n.Args != nil {
260 Walk(v, n.Args)
261 }
262
263 Walk(v, n.X)
264 case *CallExpr:
265 Walk(v, &n.Args)
266 Walk(v, n.X)
267 case *UnaryExpr:
268 Walk(v, n.X)
269 case *BinaryExpr:
270 Walk(v, n.X)
271 Walk(v, n.Y)
272 case *CondExpr:
273 Walk(v, n.Cond)
274 Walk(v, n.X)
275 Walk(v, n.Y)
276 case *YieldExpr:
277 Walk(v, n.X)
278 case *ArrowFunc:
279 Walk(v, &n.Body)
280 Walk(v, &n.Params)
281 case *CommaExpr:
282 for _, item := range n.List {
283 Walk(v, item)
284 }
285 default:
286 return
287 }
288}