| As described in https://stackoverflow.com/questions/61420959/jenkins-interpretation-of-multiple-object-declarations-on-one-line, CPS-transformed assignment expressions do not return their result. Here is an example:
In a Pipeline, after executing that expression a == null, b == null, and c == 1. In regular Groovy, after executing that expression, a, b, and c, are all equal to 1. Here is a (failing) workflow-cps test case (for CpsFlowDefinition2Test) that demonstrates the bug:
@Test public void assignmentExprsReturnRhs() throws Exception {
WorkflowJob p = jenkins.createProject(WorkflowJob.class);
p.setDefinition(new CpsFlowDefinition(
"def a = b = c = 1\n" +
"println(/a == ${a}/)\n" +
"println(/b == ${b}/)\n" +
"println(/c == ${c}/)\n", true));
WorkflowRun b = jenkins.buildAndAssertSuccess(p);
jenkins.assertLogContains("a == 1", b);
jenkins.assertLogContains("b == 1", b);
jenkins.assertLogContains("c == 1", b);
}
I think the relevant code is AssignmentBlock in groovy-cps. In particular, I think that assignAndDone needs to create a new continuation to pass to lhs.set that calls k.receive(rhs) internally. |