Hi: I got a little problem with message cascades, and since I already missed a few details the first time, I wonder whether I am overlooking something now again. My question is, whether it is always possible to flatten a cascade into a surrounding sequence of statements (method/block). I am introducing temporary variables for that, and am wonder whether there could be anything I am overlooking with respect to the evaluation order. Thus, are there constructs where I would change evaluation order by pulling out normal sends and put the results into temporary variables? I obviously need to make sure that if I flatten them, that I order receivers and arguments correctly. Is there anything else that could hinder flattening? (Ah, and I am happy to ignore reflection, thisContext, or exceptions.) Here two examples: ---> original: testCascadedSends | assoc | assoc := Association key: #foo value: 0. assoc value: (1 + 2); value: assoc value + 2; value: assoc value + 5. self assert: 10 equals: assoc value. testCascadedNotInSequence | assoc | assoc := Association key: #foo value: 0. assoc value: (assoc value: 1; value: 2; yourself). self assert: assoc equals: assoc value. <--- ---> transformed: testCascadedSends | assoc t* | assoc := Association key: #foo value: 0. assoc value: (1 + 2). t1 := assoc value. assoc value: t1 + 2. t2 := assoc value. assoc value: t2 + 5. self assert: 10 equals: assoc value. testCascadedNotInSequence | assoc t* | assoc := Association key: #foo value: 0. assoc value: 1. assoc value: 2. t1 := yourself. assoc value: t1. self assert: assoc equals: assoc value. <--- Thanks Stefan -- Stefan Marr Software Languages Lab Vrije Universiteit Brussel Pleinlaan 2 / B-1050 Brussels / Belgium http://soft.vub.ac.be/~smarr Phone: +32 2 629 2974 Fax: +32 2 629 3525