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.rsdiffbeforeafterboth1use 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}222723#[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}344335impl 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}455846#[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}567357#[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}658666#[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}10075impl 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}152122impl 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}157192158/// Defined function parameters193/// Defined function parameters159#[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}202163impl 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}174218175#[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}227179impl 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}194247195#[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}199256200#[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}204265205#[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}212277213#[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}223292224#[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}231304232#[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}243320244#[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}250331251/// Syntax base332/// Syntax base252#[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}318403319/// file, begin offset, end offset404/// file, begin offset, end offset320#[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}413324impl 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}429335impl 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 {