Skip to content

Commit c8d6107

Browse files
committed
src: remove VS 2013 compatibility hacks
We can remove some Visual Studio 2013-specific workarounds now that support for that compiler has officially been dropped. PR-URL: nodejs#8067 Refs: nodejs#7484 Refs: nodejs#8049 Reviewed-By: James M Snell <[email protected]> Reviewed-By: Joao Reis <[email protected]>
1 parent dae5323 commit c8d6107

File tree

3 files changed

+15
-46
lines changed

3 files changed

+15
-46
lines changed

src/node_internals.h

-21
Original file line numberDiff line numberDiff line change
@@ -99,29 +99,8 @@ void RegisterSignalHandler(int signal,
9999
bool reset_handler = false);
100100
#endif
101101

102-
#ifdef _WIN32
103-
// emulate snprintf() on windows, _snprintf() doesn't zero-terminate the buffer
104-
// on overflow...
105-
// VS 2015 added a standard conform snprintf
106-
#if defined( _MSC_VER ) && (_MSC_VER < 1900)
107-
#include <stdarg.h>
108-
inline static int snprintf(char *buffer, size_t n, const char *format, ...) {
109-
va_list argp;
110-
va_start(argp, format);
111-
int ret = _vscprintf(format, argp);
112-
vsnprintf_s(buffer, n, _TRUNCATE, format, argp);
113-
va_end(argp);
114-
return ret;
115-
}
116-
#endif
117-
#endif
118-
119-
#if defined(_MSC_VER) && _MSC_VER < 1900
120-
#define arraysize(a) (sizeof(a) / sizeof(*a)) // Workaround for VS 2013.
121-
#else
122102
template <typename T, size_t N>
123103
constexpr size_t arraysize(const T(&)[N]) { return N; }
124-
#endif
125104

126105
#ifndef ROUND_UP
127106
# define ROUND_UP(a, b) ((a) % (b) ? ((a) + (b)) - ((a) % (b)) : (a))

src/util-inl.h

+12-12
Original file line numberDiff line numberDiff line change
@@ -28,33 +28,33 @@ bool ListNode<T>::IsEmpty() const {
2828
return prev_ == this;
2929
}
3030

31-
template <typename T, ListNodeMember(T) M>
31+
template <typename T, ListNode<T> (T::*M)>
3232
ListHead<T, M>::Iterator::Iterator(ListNode<T>* node) : node_(node) {}
3333

34-
template <typename T, ListNodeMember(T) M>
34+
template <typename T, ListNode<T> (T::*M)>
3535
T* ListHead<T, M>::Iterator::operator*() const {
3636
return ContainerOf(M, node_);
3737
}
3838

39-
template <typename T, ListNodeMember(T) M>
39+
template <typename T, ListNode<T> (T::*M)>
4040
const typename ListHead<T, M>::Iterator&
4141
ListHead<T, M>::Iterator::operator++() {
4242
node_ = node_->next_;
4343
return *this;
4444
}
4545

46-
template <typename T, ListNodeMember(T) M>
46+
template <typename T, ListNode<T> (T::*M)>
4747
bool ListHead<T, M>::Iterator::operator!=(const Iterator& that) const {
4848
return node_ != that.node_;
4949
}
5050

51-
template <typename T, ListNodeMember(T) M>
51+
template <typename T, ListNode<T> (T::*M)>
5252
ListHead<T, M>::~ListHead() {
5353
while (IsEmpty() == false)
5454
head_.next_->Remove();
5555
}
5656

57-
template <typename T, ListNodeMember(T) M>
57+
template <typename T, ListNode<T> (T::*M)>
5858
void ListHead<T, M>::MoveBack(ListHead* that) {
5959
if (IsEmpty())
6060
return;
@@ -67,7 +67,7 @@ void ListHead<T, M>::MoveBack(ListHead* that) {
6767
head_.next_ = &head_;
6868
}
6969

70-
template <typename T, ListNodeMember(T) M>
70+
template <typename T, ListNode<T> (T::*M)>
7171
void ListHead<T, M>::PushBack(T* element) {
7272
ListNode<T>* that = &(element->*M);
7373
head_.prev_->next_ = that;
@@ -76,7 +76,7 @@ void ListHead<T, M>::PushBack(T* element) {
7676
head_.prev_ = that;
7777
}
7878

79-
template <typename T, ListNodeMember(T) M>
79+
template <typename T, ListNode<T> (T::*M)>
8080
void ListHead<T, M>::PushFront(T* element) {
8181
ListNode<T>* that = &(element->*M);
8282
head_.next_->prev_ = that;
@@ -85,12 +85,12 @@ void ListHead<T, M>::PushFront(T* element) {
8585
head_.next_ = that;
8686
}
8787

88-
template <typename T, ListNodeMember(T) M>
88+
template <typename T, ListNode<T> (T::*M)>
8989
bool ListHead<T, M>::IsEmpty() const {
9090
return head_.IsEmpty();
9191
}
9292

93-
template <typename T, ListNodeMember(T) M>
93+
template <typename T, ListNode<T> (T::*M)>
9494
T* ListHead<T, M>::PopFront() {
9595
if (IsEmpty())
9696
return nullptr;
@@ -99,12 +99,12 @@ T* ListHead<T, M>::PopFront() {
9999
return ContainerOf(M, node);
100100
}
101101

102-
template <typename T, ListNodeMember(T) M>
102+
template <typename T, ListNode<T> (T::*M)>
103103
typename ListHead<T, M>::Iterator ListHead<T, M>::begin() const {
104104
return Iterator(head_.next_);
105105
}
106106

107-
template <typename T, ListNodeMember(T) M>
107+
template <typename T, ListNode<T> (T::*M)>
108108
typename ListHead<T, M>::Iterator ListHead<T, M>::end() const {
109109
return Iterator(const_cast<ListNode<T>*>(&head_));
110110
}

src/util.h

+3-13
Original file line numberDiff line numberDiff line change
@@ -122,18 +122,8 @@ template <typename T> using remove_reference = std::remove_reference<T>;
122122
template <typename T>
123123
class ListNode;
124124

125-
template <typename T>
126-
using ListNodeMember = ListNode<T> T::*;
127-
128-
// VS 2013 doesn't understand dependent templates.
129-
#ifdef _MSC_VER
130-
#define ListNodeMember(T) ListNodeMember
131-
#else
132-
#define ListNodeMember(T) ListNodeMember<T>
133-
#endif
134-
135125
// TAILQ-style intrusive list head.
136-
template <typename T, ListNodeMember(T) M>
126+
template <typename T, ListNode<T> (T::*M)>
137127
class ListHead;
138128

139129
template <typename T>
@@ -145,13 +135,13 @@ class ListNode {
145135
inline bool IsEmpty() const;
146136

147137
private:
148-
template <typename U, ListNodeMember(U) M> friend class ListHead;
138+
template <typename U, ListNode<U> (U::*M)> friend class ListHead;
149139
ListNode* prev_;
150140
ListNode* next_;
151141
DISALLOW_COPY_AND_ASSIGN(ListNode);
152142
};
153143

154-
template <typename T, ListNodeMember(T) M>
144+
template <typename T, ListNode<T> (T::*M)>
155145
class ListHead {
156146
public:
157147
class Iterator {

0 commit comments

Comments
 (0)