mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
cc07baa87e
Summary: This is a debug-only feature that simply should be an assert. When it triggers in debugger and bubbles to some random exception catch block which makes it impossible to understand was exactly it happens. Making it an assert will stop debugger exactly where it happens. Changelog: [Internal] Fabric-specific internal change. Reviewed By: mdvacca Differential Revision: D21028571 fbshipit-source-id: 3df4ec0da922026bb9df61081cb71113577e06e9
66 lines
1.4 KiB
C++
66 lines
1.4 KiB
C++
/*
|
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*/
|
|
|
|
#include "Sealable.h"
|
|
|
|
#include <cassert>
|
|
|
|
namespace facebook {
|
|
namespace react {
|
|
|
|
/*
|
|
* Note:
|
|
* We must explicitly implement all *the rule of five* methods because:
|
|
* 1. Using `std::atomic` behind `sealed_` implicitly deletes default
|
|
* constructors;
|
|
* 2. We have to establish behaviour where any new cloned or moved instances
|
|
* of the object lose `sealed` flag.
|
|
*
|
|
* See more about the rule of three/five/zero:
|
|
* http://en.cppreference.com/w/cpp/language/rule_of_three
|
|
*/
|
|
|
|
#ifndef NDEBUG
|
|
|
|
Sealable::Sealable() : sealed_(false) {}
|
|
|
|
Sealable::Sealable(const Sealable &other) : sealed_(false){};
|
|
|
|
Sealable::Sealable(Sealable &&other) noexcept : sealed_(false) {
|
|
other.ensureUnsealed();
|
|
};
|
|
|
|
Sealable::~Sealable() noexcept {};
|
|
|
|
Sealable &Sealable::operator=(const Sealable &other) {
|
|
ensureUnsealed();
|
|
return *this;
|
|
}
|
|
|
|
Sealable &Sealable::operator=(Sealable &&other) noexcept {
|
|
ensureUnsealed();
|
|
other.ensureUnsealed();
|
|
return *this;
|
|
}
|
|
|
|
void Sealable::seal() const {
|
|
sealed_ = true;
|
|
}
|
|
|
|
bool Sealable::getSealed() const {
|
|
return sealed_;
|
|
}
|
|
|
|
void Sealable::ensureUnsealed() const {
|
|
assert(!sealed_ && "Attempt to mutate a sealed object.");
|
|
}
|
|
|
|
#endif
|
|
|
|
} // namespace react
|
|
} // namespace facebook
|