33 DebugAssert(mask && (mask & (mask-1)) == 0,
"Expected single bit mask");
34 if (scope < 0 || d_scope->level() <= scope) {
36 if (setMask) d_flags = d_flags | mask;
37 else d_flags = d_flags & ~mask;
42 IF_DEBUG(
bool on = (d_flags & mask) != 0;)
45 if (setMask) d_flags = d_flags | mask;
46 else d_flags = d_flags & ~mask;
50 Scope* lastScope = d_scope;
55 pastFlags = (
CDFlags*)((*lastPtr)->d_data);
56 DebugAssert(pastFlags != NULL,
"expected non-NULL data");
57 if (pastFlags->d_scope->
level() >= scope) {
59 || (!on && !(pastFlags->
d_flags & mask)),
60 "Expected no change in flag since scope");
67 if (pastFlags->d_scope->
level() == scope) {
70 lastScope = pastFlags->d_scope;
72 lastPtr = &((*lastPtr)->d_restore);
73 DebugAssert(*lastPtr != NULL,
"Should always be object at scope 0");
79 lastScope->
level() > scope,
80 "Expected lastScope to be above target scope");
81 while (lastScope->
level() > scope) lastScope = lastScope->
prevScope();
85 pastFlags->d_scope = lastScope;