difftreelog
feat(jrsonnet-parser) implement gc
in: master
AST can't have cycles, so tracing is noop here
2 files changed
crates/jrsonnet-parser/Cargo.tomldiffbeforeafterboth18unescape = "0.1.0"18unescape = "0.1.0"191920serde = { version = "1.0", features = ["derive", "rc"], optional = true }20serde = { version = "1.0", features = ["derive", "rc"], optional = true }21gc = { version = "0.4.1", features = ["derive"] }212222[dev-dependencies]23[dev-dependencies]23jrsonnet-stdlib = { path = "../jrsonnet-stdlib", version = "0.3.7" }24jrsonnet-stdlib = { path = "../jrsonnet-stdlib", version = "0.3.7" }crates/jrsonnet-parser/src/expr.rsdiffbeforeafterboth--- a/crates/jrsonnet-parser/src/expr.rs
+++ b/crates/jrsonnet-parser/src/expr.rs
@@ -1,3 +1,4 @@
+use gc::{unsafe_empty_trace, Finalize, Trace};
use jrsonnet_interner::IStr;
#[cfg(feature = "deserialize")]
use serde::Deserialize;
@@ -19,6 +20,10 @@
/// {["dyn"+"amic"]: 3}
Dyn(LocExpr),
}
+impl Finalize for FieldName {}
+unsafe impl Trace for FieldName {
+ unsafe_empty_trace!();
+}
#[cfg_attr(feature = "serialize", derive(Serialize))]
#[cfg_attr(feature = "deserialize", derive(Deserialize))]
@@ -31,6 +36,10 @@
/// :::
Unhide,
}
+impl Finalize for Visibility {}
+unsafe impl Trace for Visibility {
+ unsafe_empty_trace!();
+}
impl Visibility {
pub fn is_visible(&self) -> bool {
@@ -42,6 +51,10 @@
#[cfg_attr(feature = "deserialize", derive(Deserialize))]
#[derive(Clone, Debug, PartialEq)]
pub struct AssertStmt(pub LocExpr, pub Option<LocExpr>);
+impl Finalize for AssertStmt {}
+unsafe impl Trace for AssertStmt {
+ unsafe_empty_trace!();
+}
#[cfg_attr(feature = "serialize", derive(Serialize))]
#[cfg_attr(feature = "deserialize", derive(Deserialize))]
@@ -53,6 +66,10 @@
pub visibility: Visibility,
pub value: LocExpr,
}
+impl Finalize for FieldMember {}
+unsafe impl Trace for FieldMember {
+ unsafe_empty_trace!();
+}
#[cfg_attr(feature = "serialize", derive(Serialize))]
#[cfg_attr(feature = "deserialize", derive(Deserialize))]
@@ -62,6 +79,10 @@
BindStmt(BindSpec),
AssertStmt(AssertStmt),
}
+impl Finalize for Member {}
+unsafe impl Trace for Member {
+ unsafe_empty_trace!();
+}
#[cfg_attr(feature = "serialize", derive(Serialize))]
#[cfg_attr(feature = "deserialize", derive(Deserialize))]
@@ -72,6 +93,11 @@
BitNot,
Not,
}
+impl Finalize for UnaryOpType {}
+unsafe impl Trace for UnaryOpType {
+ unsafe_empty_trace!();
+}
+
impl Display for UnaryOpType {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
use UnaryOpType::*;
@@ -119,6 +145,11 @@
And,
Or,
}
+impl Finalize for BinaryOpType {}
+unsafe impl Trace for BinaryOpType {
+ unsafe_empty_trace!();
+}
+
impl Display for BinaryOpType {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
use BinaryOpType::*;
@@ -154,12 +185,21 @@
#[cfg_attr(feature = "deserialize", derive(Deserialize))]
#[derive(Debug, PartialEq)]
pub struct Param(pub IStr, pub Option<LocExpr>);
+impl Finalize for Param {}
+unsafe impl Trace for Param {
+ unsafe_empty_trace!();
+}
/// Defined function parameters
#[cfg_attr(feature = "serialize", derive(Serialize))]
#[cfg_attr(feature = "deserialize", derive(Deserialize))]
#[derive(Debug, Clone, PartialEq)]
pub struct ParamsDesc(pub Rc<Vec<Param>>);
+impl Finalize for ParamsDesc {}
+unsafe impl Trace for ParamsDesc {
+ unsafe_empty_trace!();
+}
+
impl Deref for ParamsDesc {
type Target = Vec<Param>;
fn deref(&self) -> &Self::Target {
@@ -171,11 +211,20 @@
#[cfg_attr(feature = "deserialize", derive(Deserialize))]
#[derive(Debug, PartialEq)]
pub struct Arg(pub Option<String>, pub LocExpr);
+impl Finalize for Arg {}
+unsafe impl Trace for Arg {
+ unsafe_empty_trace!();
+}
#[cfg_attr(feature = "serialize", derive(Serialize))]
#[cfg_attr(feature = "deserialize", derive(Deserialize))]
#[derive(Debug, PartialEq)]
pub struct ArgsDesc(pub Vec<Arg>);
+impl Finalize for ArgsDesc {}
+unsafe impl Trace for ArgsDesc {
+ unsafe_empty_trace!();
+}
+
impl Deref for ArgsDesc {
type Target = Vec<Arg>;
fn deref(&self) -> &Self::Target {
@@ -191,16 +240,28 @@
pub params: Option<ParamsDesc>,
pub value: LocExpr,
}
+impl Finalize for BindSpec {}
+unsafe impl Trace for BindSpec {
+ unsafe_empty_trace!();
+}
#[cfg_attr(feature = "serialize", derive(Serialize))]
#[cfg_attr(feature = "deserialize", derive(Deserialize))]
#[derive(Debug, PartialEq)]
pub struct IfSpecData(pub LocExpr);
+impl Finalize for IfSpecData {}
+unsafe impl Trace for IfSpecData {
+ unsafe_empty_trace!();
+}
#[cfg_attr(feature = "serialize", derive(Serialize))]
#[cfg_attr(feature = "deserialize", derive(Deserialize))]
#[derive(Debug, PartialEq)]
pub struct ForSpecData(pub IStr, pub LocExpr);
+impl Finalize for ForSpecData {}
+unsafe impl Trace for ForSpecData {
+ unsafe_empty_trace!();
+}
#[cfg_attr(feature = "serialize", derive(Serialize))]
#[cfg_attr(feature = "deserialize", derive(Deserialize))]
@@ -209,6 +270,10 @@
IfSpec(IfSpecData),
ForSpec(ForSpecData),
}
+impl Finalize for CompSpec {}
+unsafe impl Trace for CompSpec {
+ unsafe_empty_trace!();
+}
#[cfg_attr(feature = "serialize", derive(Serialize))]
#[cfg_attr(feature = "deserialize", derive(Deserialize))]
@@ -220,6 +285,10 @@
pub post_locals: Vec<BindSpec>,
pub compspecs: Vec<CompSpec>,
}
+impl Finalize for ObjComp {}
+unsafe impl Trace for ObjComp {
+ unsafe_empty_trace!();
+}
#[cfg_attr(feature = "serialize", derive(Serialize))]
#[cfg_attr(feature = "deserialize", derive(Deserialize))]
@@ -228,6 +297,10 @@
MemberList(Vec<Member>),
ObjComp(ObjComp),
}
+impl Finalize for ObjBody {}
+unsafe impl Trace for ObjBody {
+ unsafe_empty_trace!();
+}
#[cfg_attr(feature = "serialize", derive(Serialize))]
#[cfg_attr(feature = "deserialize", derive(Deserialize))]
@@ -240,6 +313,10 @@
True,
False,
}
+impl Finalize for LiteralType {}
+unsafe impl Trace for LiteralType {
+ unsafe_empty_trace!();
+}
#[derive(Debug, PartialEq)]
pub struct SliceDesc {
@@ -247,6 +324,10 @@
pub end: Option<LocExpr>,
pub step: Option<LocExpr>,
}
+impl Finalize for SliceDesc {}
+unsafe impl Trace for SliceDesc {
+ unsafe_empty_trace!();
+}
/// Syntax base
#[cfg_attr(feature = "serialize", derive(Serialize))]
@@ -315,12 +396,21 @@
cond_else: Option<LocExpr>,
},
}
+impl Finalize for Expr {}
+unsafe impl Trace for Expr {
+ unsafe_empty_trace!();
+}
/// file, begin offset, end offset
#[cfg_attr(feature = "serialize", derive(Serialize))]
#[cfg_attr(feature = "deserialize", derive(Deserialize))]
#[derive(Clone, PartialEq)]
pub struct ExprLocation(pub Rc<PathBuf>, pub usize, pub usize);
+impl Finalize for ExprLocation {}
+unsafe impl Trace for ExprLocation {
+ unsafe_empty_trace!();
+}
+
impl Debug for ExprLocation {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{:?}:{:?}-{:?}", self.0, self.1, self.2)
@@ -332,6 +422,11 @@
#[cfg_attr(feature = "deserialize", derive(Deserialize))]
#[derive(Clone, PartialEq)]
pub struct LocExpr(pub Rc<Expr>, pub Option<ExprLocation>);
+impl Finalize for LocExpr {}
+unsafe impl Trace for LocExpr {
+ unsafe_empty_trace!();
+}
+
impl Debug for LocExpr {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
if f.alternate() {