Uploaded image for project: 'Jenkins'
  1. Jenkins
  2. JENKINS-62064

CPS-transformed assignment expressions evaluate to null instead of the value of the RHS

    XMLWordPrintable

    Details

    • Similar Issues:

      Description

      As described in https://stackoverflow.com/questions/61420959/jenkins-interpretation-of-multiple-object-declarations-on-one-line, CPS-transformed assignment expressions evaluate to null instead of the value of the RHS of the expression. Here is an example:

      def a = b = c = 1 

      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, b, c].toString())", true));
          WorkflowRun b = jenkins.buildAndAssertSuccess(p);
          jenkins.assertLogContains("[1, 1, 1]", b); // Actual output today is "[null, null, 1]".
      } 

      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.

        Attachments

          Issue Links

            Activity

            There are no comments yet on this issue.

              People

              Assignee:
              dnusbaum Devin Nusbaum
              Reporter:
              dnusbaum Devin Nusbaum
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

                Dates

                Created:
                Updated: