1 Any statement *** in asterix *** is an assertion that
2 disjoint reachability analysis should be able to verify.
4 The DirectTo benchmark executes a list of messages from
5 an input file to solve a safe aircraft routing problem.
8 The D2 (direct-to) singleton object has a singleton
10 -ReadWrite, reads input file, creates messages
11 -MessageList, commands to execute for building problem
12 -Static, structure of static constants from input file
13 -AircraftList, all types of aircraft in problem
14 -FlightList, list of flights in algorithm
15 -FixList, list of fixes algorithm computes
16 -Algorithm, reads from Static
17 -TrajectorySynthesizer, reads from Static
18 -Flight, why a singleton Flight object?
20 *** all memory in the program should be reachable from
21 at most one of any singleton (D2, Static, etc) ***
24 MessageList has a Vector of Message objects, where each
25 one specifys an effect for other structures such as
26 setting a constant in the Static singleton, or adding
27 an aircraft type to the Aircraft list, etc. Message
28 objects themselves only have references that are freshly
30 *** Message objects should be disjoint ***
31 ANALYSIS FALSELY REPORTS SHARING
34 The ReadWrite singleton appends new Message objects
35 to the MessageList and has no references of its own,
36 *** Nothing is reachable from a ReadWrite ***
39 The Static singleton has primitive members, so
40 *** Nothing is reachable from a Static ***
43 AircraftList has a Vector of Aircraft objects, where
44 each one has a String for type and some primitive
45 attributes, where the type is generated from a
46 StringTokenizer (getting a token gets a new String),
47 and in practice is disjoint for every Aircraft, so:
48 *** Aircraft objects should be disjoint ***
52 FixList has a Vector of Fix objects, where each one
53 has a String name and a Point2d (an alternate point
54 in a flight plan?). I believe they are not modified
55 after being built from freshly allocated tokenizing,
56 *** Fix objects should be disjoint ***
57 ANALYSIS FALSELY REPORTS SHARING
60 FlightList has a Vector of Flight objects which have
61 several fresh, set-once references (flightID String,
63 *** Flight objects may share Aircraft (types) ***
66 ...and other objects also.
69 In Message.executeMessage(), if you comment out every
70 message handler except any one of these, they cause
71 Message objects to show sharing:
72 - FlightList.addFlightPlan()
73 - FlightList.amendFlightInfo()
74 - FlightList.amendFlightPlan() (still a quick analysis!)
75 - FlightList.sendingAircraft()