62 return (1 << (e + 2));
63 }
64
65 public:
66 ArgumentMap() { _bits = 0;}
67 void set_bits(uint bits) { _bits = bits;}
68 uint get_bits() const { return _bits;}
69 void clear() { _bits = 0;}
70 void set_all() { _bits = ~0u; }
71 bool is_empty() const { return _bits == 0; }
72 bool contains(uint var) const { return (_bits & int_to_bit(var)) != 0; }
73 bool is_singleton(uint var) const { return (_bits == int_to_bit(var)); }
74 bool contains_unknown() const { return (_bits & UNKNOWN) != 0; }
75 bool contains_allocated() const { return (_bits & ALLOCATED) != 0; }
76 bool contains_vars() const { return (_bits & (((1 << MAXBIT) -1) << 2)) != 0; }
77 void set(uint var) { _bits = int_to_bit(var); }
78 void add(uint var) { _bits |= int_to_bit(var); }
79 void add_unknown() { _bits = UNKNOWN; }
80 void add_allocated() { _bits = ALLOCATED; }
81 void set_union(const ArgumentMap &am) { _bits |= am._bits; }
82 void set_intersect(const ArgumentMap &am) { _bits |= am._bits; }
83 void set_difference(const ArgumentMap &am) { _bits &= ~am._bits; }
84 void operator=(const ArgumentMap &am) { _bits = am._bits; }
85 bool operator==(const ArgumentMap &am) { return _bits == am._bits; }
86 bool operator!=(const ArgumentMap &am) { return _bits != am._bits; }
87 };
88
89 class BCEscapeAnalyzer::StateInfo {
90 public:
91 ArgumentMap *_vars;
92 ArgumentMap *_stack;
93 int _stack_height;
94 int _max_stack;
95 bool _initialized;
96 ArgumentMap empty_map;
97
98 StateInfo() {
99 empty_map.clear();
100 }
101
102 ArgumentMap raw_pop() { guarantee(_stack_height > 0, "stack underflow"); return _stack[--_stack_height]; }
|
62 return (1 << (e + 2));
63 }
64
65 public:
66 ArgumentMap() { _bits = 0;}
67 void set_bits(uint bits) { _bits = bits;}
68 uint get_bits() const { return _bits;}
69 void clear() { _bits = 0;}
70 void set_all() { _bits = ~0u; }
71 bool is_empty() const { return _bits == 0; }
72 bool contains(uint var) const { return (_bits & int_to_bit(var)) != 0; }
73 bool is_singleton(uint var) const { return (_bits == int_to_bit(var)); }
74 bool contains_unknown() const { return (_bits & UNKNOWN) != 0; }
75 bool contains_allocated() const { return (_bits & ALLOCATED) != 0; }
76 bool contains_vars() const { return (_bits & (((1 << MAXBIT) -1) << 2)) != 0; }
77 void set(uint var) { _bits = int_to_bit(var); }
78 void add(uint var) { _bits |= int_to_bit(var); }
79 void add_unknown() { _bits = UNKNOWN; }
80 void add_allocated() { _bits = ALLOCATED; }
81 void set_union(const ArgumentMap &am) { _bits |= am._bits; }
82 void set_difference(const ArgumentMap &am) { _bits &= ~am._bits; }
83 void operator=(const ArgumentMap &am) { _bits = am._bits; }
84 bool operator==(const ArgumentMap &am) { return _bits == am._bits; }
85 bool operator!=(const ArgumentMap &am) { return _bits != am._bits; }
86 };
87
88 class BCEscapeAnalyzer::StateInfo {
89 public:
90 ArgumentMap *_vars;
91 ArgumentMap *_stack;
92 int _stack_height;
93 int _max_stack;
94 bool _initialized;
95 ArgumentMap empty_map;
96
97 StateInfo() {
98 empty_map.clear();
99 }
100
101 ArgumentMap raw_pop() { guarantee(_stack_height > 0, "stack underflow"); return _stack[--_stack_height]; }
|