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
18unescape = "0.1.0"18unescape = "0.1.0"
1919
20serde = { version = "1.0", features = ["derive", "rc"], optional = true }20serde = { version = "1.0", features = ["derive", "rc"], optional = true }
21gc = { version = "0.4.1", features = ["derive"] }
2122
22[dev-dependencies]23[dev-dependencies]
23jrsonnet-stdlib = { path = "../jrsonnet-stdlib", version = "0.3.7" }24jrsonnet-stdlib = { path = "../jrsonnet-stdlib", version = "0.3.7" }
modifiedcrates/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() {