Coverage Report

Created: 2026-01-10 06:25

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/jsonnet/core/pass.h
Line
Count
Source
1
/*
2
Copyright 2015 Google Inc. All rights reserved.
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
17
#ifndef JSONNET_PASS_H
18
#define JSONNET_PASS_H
19
20
#include "ast.h"
21
22
namespace jsonnet::internal {
23
24
/** A generic Pass that does nothing but can be extended to easily define real passes.
25
 */
26
class CompilerPass {
27
   public:
28
   protected:
29
    Allocator &alloc;
30
31
   public:
32
187k
    CompilerPass(Allocator &alloc) : alloc(alloc) {}
33
34
442k
    virtual void fodderElement(FodderElement &) {}
35
36
    virtual void fodder(Fodder &fodder);
37
38
    virtual void specs(std::vector<ComprehensionSpec> &specs);
39
40
    virtual void params(Fodder &fodder_l, ArgParams &params, Fodder &fodder_r);
41
42
    virtual void fieldParams(ObjectField &field);
43
44
    virtual void fields(ObjectFields &fields);
45
46
    virtual void expr(AST *&ast_);
47
48
    virtual void visit(Apply *ast);
49
50
    virtual void visit(ApplyBrace *ast);
51
52
    virtual void visit(Array *ast);
53
54
    virtual void visit(ArrayComprehension *ast);
55
56
    virtual void visit(Assert *ast);
57
58
    virtual void visit(Binary *ast);
59
60
0
    virtual void visit(BuiltinFunction *) {}
61
62
    virtual void visit(Conditional *ast);
63
64
0
    virtual void visit(Dollar *) {}
65
66
    virtual void visit(Error *ast);
67
68
    virtual void visit(Function *ast);
69
70
    virtual void visit(Import *ast);
71
72
    virtual void visit(Importstr *ast);
73
74
    virtual void visit(Importbin *ast);
75
76
    virtual void visit(InSuper *ast);
77
78
    virtual void visit(Index *ast);
79
80
    virtual void visit(Local *ast);
81
82
273k
    virtual void visit(LiteralBoolean *) {}
83
84
2.64M
    virtual void visit(LiteralNumber *) {}
85
86
6.71M
    virtual void visit(LiteralString *) {}
87
88
124k
    virtual void visit(LiteralNull *) {}
89
90
    virtual void visit(Object *ast);
91
92
    virtual void visit(DesugaredObject *ast);
93
94
    virtual void visit(ObjectComprehension *ast);
95
96
    virtual void visit(ObjectComprehensionSimple *ast);
97
98
    virtual void visit(Parens *ast);
99
100
42.5k
    virtual void visit(Self *) {}
101
102
    virtual void visit(SuperIndex *ast);
103
104
    virtual void visit(Unary *ast);
105
106
12.0M
    virtual void visit(Var *) {}
107
108
    virtual void visitExpr(AST *&ast_);
109
110
    virtual void file(AST *&body, Fodder &final_fodder);
111
};
112
113
/** Return an equivalent AST that can be modified without affecting the original.
114
 *
115
 * This is a deep copy.
116
 */
117
AST *clone_ast(Allocator &alloc, AST *ast);
118
119
}  // namespace jsonnet::internal
120
121
#endif