Objects have: Collection of Flags Flags have type/name associated with them Are either present or not present Assumptions: Task parameters can't be modified How do we handle new object allocation? Idea #1: Simply lose precision -- don't even attempt analysis Improvement - let set flags at allocation Non parameter variables: 1) Type must contain flags 2) Apply flag additions to all states ------------------------------------------------------------------------------ Collection of Tags Tags have type/name associated with them Also have UID associated with them Two basic types: Ordered: Initial/Next / Preserves Sequencing Non-ordered: New / Groups items together ---------------------------------------------------------------------- Tasks: Have list of parameters w/ flag/tag specifications Flag/Tag transitions at task exit ----------------------------------------------------------------------- Problems: How do we efficiently do task dispatch? Idea: Flags - efficiently Build static state transition diagram : explore full space for now Then for each state transition we consider: 1) What task activations have we added 2) What task activations have we removed Collapse state transition diagram to Tags - search once we match a flag Input: trigger role specification for tasks: role mutator operation: role definition: Generate: Role transition diagram Initial features: methods structs type system Language features: Single Inheritance Virtual methods Objects object metastate: 1. flags: flag role1 2. tags: tag tag1 tag operations: tag tag1=new tag; tag tag2=incrementtag(tag tag1); tag tag3=no tag; metastate operations: task foo(type1 o1{role1||role2}, type2 o2{role3}) { exit(o1{role1'=false},o2{role3'=false},onew{role4=true}); }