quick scan of the start
Henry Cejtin
henry@sourcelight.com
Wed, 14 Mar 2001 02:03:04 -0600
In the abstract (and various other places in the introduction) you talk about
intra-procedural control flow, while I would say that it is inter-procedural.
After all, all loops expressed via function calls are examples of inter-
procedural control flow. I would just drop the word `intra-procedural' in
the first sentence and also in the third and next-to-last paragraphs of the
introduction. After all, the point is to expose (make intra-procedural) the
control flow which is originally inter-procedural.
In the example in the introduction, you call the call to g non-tail, but it,
like all calls in a program expressed as CPS, is a talk call. It came from a
non-tail call in the original (direct style) source. I think that this is
slightly confusing.
In the section on the CPS IL, the idea of using paren's to represent return
seems a bit goofy. Note that in the 3 copies of continuation l1, the paren
around s has been lost. Am I missing something?
It also is a bit strange that although procedures can return multiple
results, primitives cannot.
You used the identical symbol to represent the primitive evaulating function
Prim * Value* -> Value
as you did in the section on Contification to represent multi-sets. (Also,
is this symbol standard for multi-sets?)
Why not state lemma 1 using the negation of R(f). I.e.,
If A is a safe analysis, then not R(f) iff A(f) = Uncalled.
Then it is obvious that is just strengthening condition *-1. I can't figure
if a symbol for unreached (instead of R for reached) would be better every
where, but it certainly would be better up through here.
The sentence in the first paragraph after the proof to lemma 1
In order for the transformation to for an analysis A to the
transformation to be useful, the an analysis must have A(f)
not-equal Unknown.
is clearly busted.