29 struct SemanticStack::Impl {
32 typedef std::vector<bool> Stack;
37 const Impl&) =
delete;
39 const Impl&) =
delete;
46 SemanticStack::Impl::Impl(
47 SemanticStack* owner_) :
52 SemanticStack::Impl::~Impl() {
57 pimpl(new Impl(this)) {
67 pimpl->stack.push_back(value_);
71 assert(!pimpl->stack.empty());
72 return pimpl->stack.back();
77 assert(!pimpl->stack.empty());
78 pimpl->stack.back() = value_;
82 assert(!pimpl->stack.empty());
83 pimpl->stack.pop_back();
87 assert(pimpl->stack.size() >= 2);
88 bool value_(pimpl->stack.back());
89 pimpl->stack.pop_back();
90 pimpl->stack.back() = pimpl->stack.back() && value_;
94 return pimpl->stack.size() == 1;