| 139 | // Handle cases where 'this.is_simple()' and unequal to 't'. |
| 140 | // Subclassed xmeet calls can assert that '!t.is_simple()'. |
| 141 | Type xmeet(Type t) { |
| 142 | assert is_simple(); // Should be overridden in subclass |
| 143 | // ANY meet anything is thing; thing meet ALL is ALL |
| 144 | if( _type==TBOT || t._type==TTOP ) return this; |
| 145 | if( _type==TTOP || t._type==TBOT ) return t; |
| 146 | // 'this' is {TCTRL,TXCTRL} |
| 147 | if( !t.is_simple() ) return BOTTOM; |
| 148 | // 't' is {TCTRL,TXCTRL} |
| 149 | return _type==TCTRL || t._type==TCTRL ? CONTROL : XCONTROL; |
| 150 | } |
| 151 | |
| 152 | public Type dual() { |
| 153 | return switch( _type ) { |