From: Doug Orleans [dougo@steak.place.org] on behalf of Doug Orleans [dougo@place.org] Sent: Wednesday, January 05, 2005 4:16 PM To: Karl Lieberherr Cc: skotthe@ccs.neu.edu; dougo@place.org Subject: Re: decision value computation Karl Lieberherr writes: > My question is how to compute the decision values of a decision point D. > Those are basically the objects responsible for the decision > made at D. If the condition is that we are in the cflow > of a call to foo() on an object x, does x become a decision value > for the current decision point? Yes, I think so. > What about all the objects to which messages are sent between x.foo() > and the current decision point. I don't think they matter if they are not directly involved in any of the predicate expressions. The computation history of messages that changed the state into its current form shouldn't matter, only those objects that actually make up the current state. (Although the line gets a bit fuzzy when the current state includes the current call stack.) It's all a bit hand-wavy, I know. > Can we informally say more about how to informally compute > the decision values? Not really. My implementation (as described at the beginning of section 6.2 on page 50) uses a crude approximation: it only considers arguments to the current message, and only those that are objects. This is basically equivalent to method selection arguments of the LoD for CLOS, with the assumption that every argument position has a specializer if the actual argument is an object. > The set of decision values not only is relevant for the LoD > but also for blame assignment for contracts for aspects, it seems. I suppose. Maybe this is something for Theo to think about. --Doug