git.delta.rocks / jrsonnet / refs/commits / 2e6febe0ffcd

difftreelog

fix(evaluator) indirect_self bug

Лач2020-05-30parent: #abae2f2.patch.diff
in: master

4 files changed

modifiedCargo.lockdiffbeforeafterboth
before · Cargo.lock
9 packageslockfile v1
modifiedcrates/jsonnet-evaluator/src/ctx.rsdiffbeforeafterboth
--- a/crates/jsonnet-evaluator/src/ctx.rs
+++ b/crates/jsonnet-evaluator/src/ctx.rs
@@ -74,7 +74,6 @@
 		new_this: Option<ObjValue>,
 		new_super_obj: Option<ObjValue>,
 	) -> Context {
-		println!("Extend with {:?} {:?}", new_dollar, new_this);
 		let dollar = new_dollar.or_else(|| self.0.dollar.clone());
 		let this = new_this.or_else(|| self.0.this.clone());
 		let super_obj = new_super_obj.or_else(|| self.0.super_obj.clone());
modifiedcrates/jsonnet-evaluator/src/evaluate.rsdiffbeforeafterboth
--- a/crates/jsonnet-evaluator/src/evaluate.rs
+++ b/crates/jsonnet-evaluator/src/evaluate.rs
@@ -29,9 +29,8 @@
 	} else {
 		(
 			b.name.clone(),
-				binding!(move |this, super_obj| {
-					println!("Evaluating binding");
-					Val::Lazy(lazy_val!(
+			binding!(move |this, super_obj| {
+				Val::Lazy(lazy_val!(
 					closure!(clone context_creator, clone b, || evaluate(
 						context_creator.0(this.clone(), super_obj.clone()),
 						&b.value
@@ -137,12 +136,11 @@
 			let future_bindings = FutureNewBindings::new();
 			let future_this = FutureObjValue::new();
 			let context_creator = context_creator!(
-				closure!(clone context, clone future_bindings, |this: Option<ObjValue>, super_obj: Option<ObjValue>| {
-					println!("Context created");
+				closure!(clone context, clone future_bindings, clone future_this, |this: Option<ObjValue>, super_obj: Option<ObjValue>| {
 					context.clone().extend(
 						future_bindings.clone().unwrap(),
 						context.clone().dollar().clone().or_else(||this.clone()),
-						this,
+						Some(future_this.clone().unwrap()),
 						super_obj
 					)
 				})
@@ -154,15 +152,12 @@
 					Member::BindStmt(b) => Some(b.clone()),
 					_ => None,
 				})
-				.map(|b| {
-					evaluate_binding(&b, context_creator.clone())
-				})
+				.map(|b| evaluate_binding(&b, context_creator.clone()))
 			{
 				bindings.insert(n, b);
 			}
 			future_bindings.fill(bindings);
 
-			println!("Bindings filled");
 			let mut new_members = BTreeMap::new();
 			for member in members.into_iter() {
 				match member {
@@ -180,8 +175,7 @@
 								add: plus,
 								visibility: visibility.clone(),
 								invoke: binding!(
-									closure!(clone value, clone context_creator, clone future_this, |this, super_obj| {
-										// FIXME: I should take "this" instead of "future_this" there?
+									closure!(clone value, clone context_creator, |this, super_obj| {
 										// TODO: Assert
 										evaluate(
 											context_creator.0(this, super_obj),
@@ -205,8 +199,7 @@
 								add: false,
 								visibility: Visibility::Hidden,
 								invoke: binding!(
-									closure!(clone value, clone context_creator, clone future_this, |this, super_obj| {
-										// FIXME: I should take "this" instead of "future_this" there?
+									closure!(clone value, clone context_creator, |this, super_obj| {
 										// TODO: Assert
 										evaluate_method(
 											context_creator.0(this, super_obj),
@@ -231,15 +224,12 @@
 pub fn evaluate(context: Context, expr: &Expr) -> Val {
 	use Expr::*;
 	match &*expr {
-		Literal(LiteralType::This) => {
-			println!("{:?}", context.this());
-			Val::Obj(
-				context
-					.this()
-					.clone()
-					.unwrap_or_else(|| panic!("this not found")),
-			)
-		}
+		Literal(LiteralType::This) => Val::Obj(
+			context
+				.this()
+				.clone()
+				.unwrap_or_else(|| panic!("this not found")),
+		),
 		Literal(LiteralType::Super) => Val::Obj(
 			context
 				.super_obj()
modifiedcrates/jsonnet-evaluator/src/lib.rsdiffbeforeafterboth
--- a/crates/jsonnet-evaluator/src/lib.rs
+++ b/crates/jsonnet-evaluator/src/lib.rs
@@ -193,7 +193,7 @@
 		// referenced from field
 		eval_stdlib!(
 			r#"{
-				local me = std.trace("test", self),
+				local me = self,
 				b: me,
 			}.b"#
 		);