%PDF- <> %âãÏÓ endobj 2 0 obj <> endobj 3 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 28 0 R 29 0 R] /MediaBox[ 0 0 595.5 842.25] /Contents 4 0 R/Group<>/Tabs/S>> endobj ºaâÚÎΞ-ÌE1ÍØÄ÷{òò2ÿ ÛÖ^ÔÀá TÎ{¦?§®¥kuµùÕ5sLOšuY>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<> endobj 2 0 obj<>endobj 2 0 obj<>es 3 0 R>> endobj 2 0 obj<> ox[ 0.000000 0.000000 609.600000 935.600000]/Fi endobj 3 0 obj<> endobj 7 1 obj<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Subtype/Form>> stream
// Copyright 2020 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "error_support.h" #include <cassert> namespace v8_crdtp { void ErrorSupport::Push() { stack_.emplace_back(); } void ErrorSupport::Pop() { stack_.pop_back(); } void ErrorSupport::SetName(const char* name) { assert(!stack_.empty()); stack_.back().type = NAME; stack_.back().name = name; } void ErrorSupport::SetIndex(size_t index) { assert(!stack_.empty()); stack_.back().type = INDEX; stack_.back().index = index; } void ErrorSupport::AddError(const char* error) { assert(!stack_.empty()); if (!errors_.empty()) errors_ += "; "; for (size_t ii = 0; ii < stack_.size(); ++ii) { if (ii) errors_ += "."; const Segment& s = stack_[ii]; switch (s.type) { case NAME: errors_ += s.name; continue; case INDEX: errors_ += std::to_string(s.index); continue; default: assert(s.type != EMPTY); continue; } } errors_ += ": "; errors_ += error; } span<uint8_t> ErrorSupport::Errors() const { return SpanFrom(errors_); } } // namespace v8_crdtp