git.delta.rocks / jrsonnet / refs/commits / 6766bfc4d87c

difftreelog

feat(jrsonnet-parser) implement gc

Yaroslav Bolyukin2021-06-05parent: #0a2dd7a.patch.diff
in: master
AST can't have cycles, so tracing is noop here

2 files changed

modifiedcrates/jrsonnet-parser/Cargo.tomldiffbeforeafterboth
--- a/crates/jrsonnet-parser/Cargo.toml
+++ b/crates/jrsonnet-parser/Cargo.toml
@@ -18,6 +18,7 @@
 unescape = "0.1.0"
 
 serde = { version = "1.0", features = ["derive", "rc"], optional = true }
+gc = { version = "0.4.1", features = ["derive"] }
 
 [dev-dependencies]
 jrsonnet-stdlib = { path = "../jrsonnet-stdlib", version = "0.3.7" }
modifiedcrates/jrsonnet-parser/src/expr.rsdiffbeforeafterboth
1use gc::{unsafe_empty_trace, Finalize, Trace};
1use jrsonnet_interner::IStr;2use jrsonnet_interner::IStr;
2#[cfg(feature = "deserialize")]3#[cfg(feature = "deserialize")]
3use serde::Deserialize;4use serde::Deserialize;
19 /// {["dyn"+"amic"]: 3}20 /// {["dyn"+"amic"]: 3}
20 Dyn(LocExpr),21 Dyn(LocExpr),
21}22}
23impl Finalize for FieldName {}
24unsafe impl Trace for FieldName {
25 unsafe_empty_trace!();
26}
2227
23#[cfg_attr(feature = "serialize", derive(Serialize))]28#[cfg_attr(feature = "serialize", derive(Serialize))]
24#[cfg_attr(feature = "deserialize", derive(Deserialize))]29#[cfg_attr(feature = "deserialize", derive(Deserialize))]
31 /// :::36 /// :::
32 Unhide,37 Unhide,
33}38}
39impl Finalize for Visibility {}
40unsafe impl Trace for Visibility {
41 unsafe_empty_trace!();
42}
3443
35impl Visibility {44impl Visibility {
36 pub fn is_visible(&self) -> bool {45 pub fn is_visible(&self) -> bool {
42#[cfg_attr(feature = "deserialize", derive(Deserialize))]51#[cfg_attr(feature = "deserialize", derive(Deserialize))]
43#[derive(Clone, Debug, PartialEq)]52#[derive(Clone, Debug, PartialEq)]
44pub struct AssertStmt(pub LocExpr, pub Option<LocExpr>);53pub struct AssertStmt(pub LocExpr, pub Option<LocExpr>);
54impl Finalize for AssertStmt {}
55unsafe impl Trace for AssertStmt {
56 unsafe_empty_trace!();
57}
4558
46#[cfg_attr(feature = "serialize", derive(Serialize))]59#[cfg_attr(feature = "serialize", derive(Serialize))]
47#[cfg_attr(feature = "deserialize", derive(Deserialize))]60#[cfg_attr(feature = "deserialize", derive(Deserialize))]
53 pub visibility: Visibility,66 pub visibility: Visibility,
54 pub value: LocExpr,67 pub value: LocExpr,
55}68}
69impl Finalize for FieldMember {}
70unsafe impl Trace for FieldMember {
71 unsafe_empty_trace!();
72}
5673
57#[cfg_attr(feature = "serialize", derive(Serialize))]74#[cfg_attr(feature = "serialize", derive(Serialize))]
58#[cfg_attr(feature = "deserialize", derive(Deserialize))]75#[cfg_attr(feature = "deserialize", derive(Deserialize))]
62 BindStmt(BindSpec),79 BindStmt(BindSpec),
63 AssertStmt(AssertStmt),80 AssertStmt(AssertStmt),
64}81}
82impl Finalize for Member {}
83unsafe impl Trace for Member {
84 unsafe_empty_trace!();
85}
6586
66#[cfg_attr(feature = "serialize", derive(Serialize))]87#[cfg_attr(feature = "serialize", derive(Serialize))]
67#[cfg_attr(feature = "deserialize", derive(Deserialize))]88#[cfg_attr(feature = "deserialize", derive(Deserialize))]
72 BitNot,93 BitNot,
73 Not,94 Not,
74}95}
96impl Finalize for UnaryOpType {}
97unsafe impl Trace for UnaryOpType {
98 unsafe_empty_trace!();
99}
100
75impl Display for UnaryOpType {101impl Display for UnaryOpType {
76 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {102 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
119 And,145 And,
120 Or,146 Or,
121}147}
148impl Finalize for BinaryOpType {}
149unsafe impl Trace for BinaryOpType {
150 unsafe_empty_trace!();
151}
152
122impl Display for BinaryOpType {153impl Display for BinaryOpType {
123 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {154 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
154#[cfg_attr(feature = "deserialize", derive(Deserialize))]185#[cfg_attr(feature = "deserialize", derive(Deserialize))]
155#[derive(Debug, PartialEq)]186#[derive(Debug, PartialEq)]
156pub struct Param(pub IStr, pub Option<LocExpr>);187pub struct Param(pub IStr, pub Option<LocExpr>);
188impl Finalize for Param {}
189unsafe impl Trace for Param {
190 unsafe_empty_trace!();
191}
157192
158/// Defined function parameters193/// Defined function parameters
159#[cfg_attr(feature = "serialize", derive(Serialize))]194#[cfg_attr(feature = "serialize", derive(Serialize))]
160#[cfg_attr(feature = "deserialize", derive(Deserialize))]195#[cfg_attr(feature = "deserialize", derive(Deserialize))]
161#[derive(Debug, Clone, PartialEq)]196#[derive(Debug, Clone, PartialEq)]
162pub struct ParamsDesc(pub Rc<Vec<Param>>);197pub struct ParamsDesc(pub Rc<Vec<Param>>);
198impl Finalize for ParamsDesc {}
199unsafe impl Trace for ParamsDesc {
200 unsafe_empty_trace!();
201}
202
163impl Deref for ParamsDesc {203impl Deref for ParamsDesc {
164 type Target = Vec<Param>;204 type Target = Vec<Param>;
171#[cfg_attr(feature = "deserialize", derive(Deserialize))]211#[cfg_attr(feature = "deserialize", derive(Deserialize))]
172#[derive(Debug, PartialEq)]212#[derive(Debug, PartialEq)]
173pub struct Arg(pub Option<String>, pub LocExpr);213pub struct Arg(pub Option<String>, pub LocExpr);
214impl Finalize for Arg {}
215unsafe impl Trace for Arg {
216 unsafe_empty_trace!();
217}
174218
175#[cfg_attr(feature = "serialize", derive(Serialize))]219#[cfg_attr(feature = "serialize", derive(Serialize))]
176#[cfg_attr(feature = "deserialize", derive(Deserialize))]220#[cfg_attr(feature = "deserialize", derive(Deserialize))]
177#[derive(Debug, PartialEq)]221#[derive(Debug, PartialEq)]
178pub struct ArgsDesc(pub Vec<Arg>);222pub struct ArgsDesc(pub Vec<Arg>);
223impl Finalize for ArgsDesc {}
224unsafe impl Trace for ArgsDesc {
225 unsafe_empty_trace!();
226}
227
179impl Deref for ArgsDesc {228impl Deref for ArgsDesc {
180 type Target = Vec<Arg>;229 type Target = Vec<Arg>;
191 pub params: Option<ParamsDesc>,240 pub params: Option<ParamsDesc>,
192 pub value: LocExpr,241 pub value: LocExpr,
193}242}
243impl Finalize for BindSpec {}
244unsafe impl Trace for BindSpec {
245 unsafe_empty_trace!();
246}
194247
195#[cfg_attr(feature = "serialize", derive(Serialize))]248#[cfg_attr(feature = "serialize", derive(Serialize))]
196#[cfg_attr(feature = "deserialize", derive(Deserialize))]249#[cfg_attr(feature = "deserialize", derive(Deserialize))]
197#[derive(Debug, PartialEq)]250#[derive(Debug, PartialEq)]
198pub struct IfSpecData(pub LocExpr);251pub struct IfSpecData(pub LocExpr);
252impl Finalize for IfSpecData {}
253unsafe impl Trace for IfSpecData {
254 unsafe_empty_trace!();
255}
199256
200#[cfg_attr(feature = "serialize", derive(Serialize))]257#[cfg_attr(feature = "serialize", derive(Serialize))]
201#[cfg_attr(feature = "deserialize", derive(Deserialize))]258#[cfg_attr(feature = "deserialize", derive(Deserialize))]
202#[derive(Debug, PartialEq)]259#[derive(Debug, PartialEq)]
203pub struct ForSpecData(pub IStr, pub LocExpr);260pub struct ForSpecData(pub IStr, pub LocExpr);
261impl Finalize for ForSpecData {}
262unsafe impl Trace for ForSpecData {
263 unsafe_empty_trace!();
264}
204265
205#[cfg_attr(feature = "serialize", derive(Serialize))]266#[cfg_attr(feature = "serialize", derive(Serialize))]
206#[cfg_attr(feature = "deserialize", derive(Deserialize))]267#[cfg_attr(feature = "deserialize", derive(Deserialize))]
209 IfSpec(IfSpecData),270 IfSpec(IfSpecData),
210 ForSpec(ForSpecData),271 ForSpec(ForSpecData),
211}272}
273impl Finalize for CompSpec {}
274unsafe impl Trace for CompSpec {
275 unsafe_empty_trace!();
276}
212277
213#[cfg_attr(feature = "serialize", derive(Serialize))]278#[cfg_attr(feature = "serialize", derive(Serialize))]
214#[cfg_attr(feature = "deserialize", derive(Deserialize))]279#[cfg_attr(feature = "deserialize", derive(Deserialize))]
220 pub post_locals: Vec<BindSpec>,285 pub post_locals: Vec<BindSpec>,
221 pub compspecs: Vec<CompSpec>,286 pub compspecs: Vec<CompSpec>,
222}287}
288impl Finalize for ObjComp {}
289unsafe impl Trace for ObjComp {
290 unsafe_empty_trace!();
291}
223292
224#[cfg_attr(feature = "serialize", derive(Serialize))]293#[cfg_attr(feature = "serialize", derive(Serialize))]
225#[cfg_attr(feature = "deserialize", derive(Deserialize))]294#[cfg_attr(feature = "deserialize", derive(Deserialize))]
228 MemberList(Vec<Member>),297 MemberList(Vec<Member>),
229 ObjComp(ObjComp),298 ObjComp(ObjComp),
230}299}
300impl Finalize for ObjBody {}
301unsafe impl Trace for ObjBody {
302 unsafe_empty_trace!();
303}
231304
232#[cfg_attr(feature = "serialize", derive(Serialize))]305#[cfg_attr(feature = "serialize", derive(Serialize))]
233#[cfg_attr(feature = "deserialize", derive(Deserialize))]306#[cfg_attr(feature = "deserialize", derive(Deserialize))]
240 True,313 True,
241 False,314 False,
242}315}
316impl Finalize for LiteralType {}
317unsafe impl Trace for LiteralType {
318 unsafe_empty_trace!();
319}
243320
244#[derive(Debug, PartialEq)]321#[derive(Debug, PartialEq)]
245pub struct SliceDesc {322pub struct SliceDesc {
246 pub start: Option<LocExpr>,323 pub start: Option<LocExpr>,
247 pub end: Option<LocExpr>,324 pub end: Option<LocExpr>,
248 pub step: Option<LocExpr>,325 pub step: Option<LocExpr>,
249}326}
327impl Finalize for SliceDesc {}
328unsafe impl Trace for SliceDesc {
329 unsafe_empty_trace!();
330}
250331
251/// Syntax base332/// Syntax base
252#[cfg_attr(feature = "serialize", derive(Serialize))]333#[cfg_attr(feature = "serialize", derive(Serialize))]
315 cond_else: Option<LocExpr>,396 cond_else: Option<LocExpr>,
316 },397 },
317}398}
399impl Finalize for Expr {}
400unsafe impl Trace for Expr {
401 unsafe_empty_trace!();
402}
318403
319/// file, begin offset, end offset404/// file, begin offset, end offset
320#[cfg_attr(feature = "serialize", derive(Serialize))]405#[cfg_attr(feature = "serialize", derive(Serialize))]
321#[cfg_attr(feature = "deserialize", derive(Deserialize))]406#[cfg_attr(feature = "deserialize", derive(Deserialize))]
322#[derive(Clone, PartialEq)]407#[derive(Clone, PartialEq)]
323pub struct ExprLocation(pub Rc<PathBuf>, pub usize, pub usize);408pub struct ExprLocation(pub Rc<PathBuf>, pub usize, pub usize);
409impl Finalize for ExprLocation {}
410unsafe impl Trace for ExprLocation {
411 unsafe_empty_trace!();
412}
413
324impl Debug for ExprLocation {414impl Debug for ExprLocation {
325 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {415 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
332#[cfg_attr(feature = "deserialize", derive(Deserialize))]422#[cfg_attr(feature = "deserialize", derive(Deserialize))]
333#[derive(Clone, PartialEq)]423#[derive(Clone, PartialEq)]
334pub struct LocExpr(pub Rc<Expr>, pub Option<ExprLocation>);424pub struct LocExpr(pub Rc<Expr>, pub Option<ExprLocation>);
425impl Finalize for LocExpr {}
426unsafe impl Trace for LocExpr {
427 unsafe_empty_trace!();
428}
429
335impl Debug for LocExpr {430impl Debug for LocExpr {
336 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {431 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {