mirror of
https://github.com/status-im/react-native.git
synced 2025-01-10 01:25:39 +00:00
957ef606b9
Summary: It's maybe not so important/crucial, but this thing bothers me a lot. We use raw opaque `EventTarget`, `InstanceHandle` and `EventHandler` pointers in application layer quite a lot and we don't have any kind of type-safety here. I believe all those opaque types should be represented as named scalar types which compiler at least can differentiate at compile time. So I propose introducing named aliases for them which will point to particular empty `struct`s. This will allow us to tag types properly in all functions and methods and ensure that we pass right values as right arguments. Again, they are *just aliases*, which are effectively still `void *`, no any additional logic or names are involved. Unfortunately, those nice type names are already taken by `JSIFabricUIManager` local anonymous namespace (even if they are inside anonymous namespace we cannot use them https://stackoverflow.com/questions/3673353/anonymous-namespace-ambiguity). I think it's fair to rename them because... it's local. And we already use `Wrapper` suffix for them anyways. Reviewed By: fkgozali Differential Revision: D8181151 fbshipit-source-id: 9b55b43fb671a56b32a862ac54f78d528e1188ce
33 lines
792 B
C++
33 lines
792 B
C++
/**
|
|
* Copyright (c) 2015-present, Facebook, Inc.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
namespace facebook {
|
|
namespace react {
|
|
|
|
enum class EventPriority {
|
|
SynchronousUnbatched,
|
|
SynchronousBatched,
|
|
AsynchronousUnbatched,
|
|
AsynchronousBatched,
|
|
|
|
Sync = SynchronousUnbatched,
|
|
Work = SynchronousBatched,
|
|
Interactive = AsynchronousUnbatched,
|
|
Deferred = AsynchronousBatched,
|
|
};
|
|
|
|
// `InstanceHandler`, `EventTarget`, and `EventHandler` are all opaque
|
|
// raw pointers. We use `struct {} *` trick to differentiate them in compiler's
|
|
// eyes to ensure type safety.
|
|
using EventTarget = struct {} *;
|
|
using EventHandler = struct {} *;
|
|
|
|
} // namespace react
|
|
} // namespace facebook
|