What is a type error? [correction]

David Hopwood david.nospam.hopwood at blueyonder.co.uk
Mon Jul 17 15:41:52 EDT 2006


David Hopwood wrote:
> Darren New wrote:
> 
>>From what I can determine, the authors seem to imply that typestate is
>>dataflow analysis modified in (at least) two ways:
>>
>>1) When control flow joins, the new typestate is the intersection of
>>typestates coming into the join, where as dataflow analysis doesn't
>>guarantee that. (They imply they think dataflow analysis is allowed to
>>say "the variable might or might not be initialized here", while
>>typestate would ensure the variable is uninitialized.)
> 
> Right, but this is a disadvantage of their typestate algorithm. It is why
> the example in Figure 2 of
> <http://www.cs.ubc.ca/local/reading/proceedings/spe91-95/spe/vol25/issue4/spe950wk.pdf>
> fails to check, even though it "obviously" initializes all variables.
> 
> Consider the equivalent Java program:

I mixed up Figures 1 and 2. Here is the Java program that Figure 2 should
be compared to:

public class LoopInitTest {
    public static String getString() { return "foo"; }

    public static void main(String[] args) {
        String line = getString();
        boolean is_last = false;

        while (!is_last) {
            if (line.charAt(0) == 'q') {
                is_last = true;
            }

            // insert line into inputs (not important for analysis)

            if (!is_last) {
                line = getString();
            }
        }
    }
}

which compiles without error, because is_last is definitely initialized.

-- 
David Hopwood <david.nospam.hopwood at blueyonder.co.uk>



More information about the Python-list mailing list