diff --git a/src/async_wrap.cc b/src/async_wrap.cc index 47a99551275e17..70fc86702f0b10 100644 --- a/src/async_wrap.cc +++ b/src/async_wrap.cc @@ -22,7 +22,6 @@ #include "async_wrap-inl.h" #include "env-inl.h" #include "node_errors.h" -#include "node_internals.h" #include "tracing/traced_value.h" #include "util-inl.h" diff --git a/src/cares_wrap.cc b/src/cares_wrap.cc index 09cf809dec3dd2..57c02fb32653e5 100644 --- a/src/cares_wrap.cc +++ b/src/cares_wrap.cc @@ -24,7 +24,6 @@ #include "async_wrap-inl.h" #include "env-inl.h" #include "node.h" -#include "node_internals.h" #include "req_wrap-inl.h" #include "util-inl.h" #include "uv.h" diff --git a/src/connection_wrap.cc b/src/connection_wrap.cc index db239f9becdb53..67308bdb9c8d95 100644 --- a/src/connection_wrap.cc +++ b/src/connection_wrap.cc @@ -3,7 +3,6 @@ #include "connect_wrap.h" #include "env-inl.h" #include "pipe_wrap.h" -#include "node_internals.h" #include "stream_base-inl.h" #include "stream_wrap.h" #include "tcp_wrap.h" diff --git a/src/debug_utils.cc b/src/debug_utils.cc index d9db2d52e0db85..6dac86f002b07d 100644 --- a/src/debug_utils.cc +++ b/src/debug_utils.cc @@ -1,5 +1,4 @@ #include "debug_utils.h" -#include "node_internals.h" #ifdef __POSIX__ #if defined(__linux__) diff --git a/src/debug_utils.h b/src/debug_utils.h index ed5e42fcbe8e6e..7e8a23d3ae309e 100644 --- a/src/debug_utils.h +++ b/src/debug_utils.h @@ -4,9 +4,10 @@ #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS #include "async_wrap.h" -#include "env.h" -#include +#include "env-inl.h" + #include +#include // Use FORCE_INLINE on functions that have a debug-category-enabled check first // and then ideally only a single function call following it, to maintain diff --git a/src/fs_event_wrap.cc b/src/fs_event_wrap.cc index 249a4bb973cbd7..acc83d017e0633 100644 --- a/src/fs_event_wrap.cc +++ b/src/fs_event_wrap.cc @@ -23,7 +23,6 @@ #include "env-inl.h" #include "util-inl.h" #include "node.h" -#include "node_internals.h" #include "handle_wrap.h" #include "string_bytes.h" diff --git a/src/heap_utils.cc b/src/heap_utils.cc index 84cbf07c1ee72e..a1ca118e6c1f93 100644 --- a/src/heap_utils.cc +++ b/src/heap_utils.cc @@ -1,5 +1,4 @@ -#include "node_internals.h" -#include "env.h" +#include "env-inl.h" using v8::Array; using v8::Boolean; diff --git a/src/inspector_js_api.cc b/src/inspector_js_api.cc index 0bf43c6fbb1a81..d94cf4173d19aa 100644 --- a/src/inspector_js_api.cc +++ b/src/inspector_js_api.cc @@ -1,7 +1,6 @@ #include "base_object-inl.h" #include "inspector_agent.h" #include "inspector_io.h" -#include "node_internals.h" #include "v8.h" #include "v8-inspector.h" diff --git a/src/js_stream.cc b/src/js_stream.cc index e4137079fa5aca..32dea04db5aeec 100644 --- a/src/js_stream.cc +++ b/src/js_stream.cc @@ -4,7 +4,6 @@ #include "env-inl.h" #include "node_buffer.h" #include "node_errors.h" -#include "node_internals.h" #include "stream_base-inl.h" #include "v8.h" diff --git a/src/module_wrap.cc b/src/module_wrap.cc index 243352fe644e40..8599029fea1f9f 100644 --- a/src/module_wrap.cc +++ b/src/module_wrap.cc @@ -7,7 +7,6 @@ #include "node_errors.h" #include "node_url.h" #include "util-inl.h" -#include "node_internals.h" #include "node_contextify.h" #include "node_watchdog.h" diff --git a/src/node_binding.cc b/src/node_binding.cc index 5ea8f01b41bb89..85f3c19e690182 100644 --- a/src/node_binding.cc +++ b/src/node_binding.cc @@ -1,6 +1,7 @@ #include "node_binding.h" -#include "node_internals.h" +#include "env-inl.h" #include "node_native_module.h" +#include "util.h" #if HAVE_OPENSSL #define NODE_BUILTIN_OPENSSL_MODULES(V) V(crypto) V(tls_wrap) diff --git a/src/node_buffer.cc b/src/node_buffer.cc index 2f4a4c66619e70..ccc338f94174aa 100644 --- a/src/node_buffer.cc +++ b/src/node_buffer.cc @@ -19,9 +19,10 @@ // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE // USE OR OTHER DEALINGS IN THE SOFTWARE. -#include "node.h" #include "node_buffer.h" +#include "node.h" #include "node_errors.h" +#include "node_internals.h" #include "env-inl.h" #include "string_bytes.h" diff --git a/src/node_contextify.h b/src/node_contextify.h index fedec0cd345d78..5f4f20554aed50 100644 --- a/src/node_contextify.h +++ b/src/node_contextify.h @@ -6,7 +6,6 @@ #include "base_object-inl.h" #include "node_context_data.h" #include "node_errors.h" -#include "node_internals.h" namespace node { namespace contextify { diff --git a/src/node_crypto.cc b/src/node_crypto.cc index bda172e2810a7a..920869a2f2becd 100644 --- a/src/node_crypto.cc +++ b/src/node_crypto.cc @@ -27,7 +27,6 @@ #include "node_crypto_clienthello-inl.h" #include "node_crypto_groups.h" #include "node_errors.h" -#include "node_internals.h" #include "node_mutex.h" #include "node_process.h" #include "tls_wrap.h" // TLSWrap diff --git a/src/node_domain.cc b/src/node_domain.cc index b29ca1db0575a1..9075845442fd4d 100644 --- a/src/node_domain.cc +++ b/src/node_domain.cc @@ -1,5 +1,5 @@ +#include "env-inl.h" #include "v8.h" -#include "node_internals.h" namespace node { namespace domain { diff --git a/src/node_dtrace.cc b/src/node_dtrace.cc index cd3986cef56a97..dfabde0747bdc9 100644 --- a/src/node_dtrace.cc +++ b/src/node_dtrace.cc @@ -43,7 +43,6 @@ #endif #include "node_errors.h" -#include "node_internals.h" #include diff --git a/src/node_dtrace.h b/src/node_dtrace.h index d16e23ddb384b7..ee11cd68aa7630 100644 --- a/src/node_dtrace.h +++ b/src/node_dtrace.h @@ -24,7 +24,8 @@ #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS -#include "node_internals.h" +#include "env.h" +#include "v8.h" extern "C" { /* diff --git a/src/node_env_var.cc b/src/node_env_var.cc index d1ebb064e2417e..63cba55ab567a8 100644 --- a/src/node_env_var.cc +++ b/src/node_env_var.cc @@ -1,6 +1,6 @@ #include "node_errors.h" -#include "node_internals.h" #include "node_process.h" +#include "util.h" #ifdef __APPLE__ #include diff --git a/src/node_file.cc b/src/node_file.cc index 8757f6bf0d8921..35c8e01a28c0b5 100644 --- a/src/node_file.cc +++ b/src/node_file.cc @@ -22,9 +22,9 @@ #include "node_file.h" #include "aliased_buffer.h" #include "node_buffer.h" -#include "node_internals.h" #include "node_process.h" #include "node_stat_watcher.h" +#include "util.h" #include "tracing/trace_event.h" diff --git a/src/node_http2.cc b/src/node_http2.cc index 1489d8b6f88b00..a3ce022835ea5a 100644 --- a/src/node_http2.cc +++ b/src/node_http2.cc @@ -4,8 +4,8 @@ #include "node_buffer.h" #include "node_http2.h" #include "node_http2_state.h" -#include "node_internals.h" #include "node_perf.h" +#include "util.h" #include diff --git a/src/node_http2.h b/src/node_http2.h index 4dc33d84c2af61..8347510c9d0913 100644 --- a/src/node_http2.h +++ b/src/node_http2.h @@ -3,7 +3,10 @@ #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS +// FIXME(joyeecheung): nghttp2.h needs stdint.h to compile on Windows +#include #include "nghttp2/nghttp2.h" + #include "node_http2_state.h" #include "node_perf.h" #include "stream_base-inl.h" diff --git a/src/node_http_parser_impl.h b/src/node_http_parser_impl.h index 48d669a7593e6c..7a955cc1e9eca6 100644 --- a/src/node_http_parser_impl.h +++ b/src/node_http_parser_impl.h @@ -27,7 +27,7 @@ #include "node.h" #include "node_buffer.h" -#include "node_internals.h" +#include "util.h" #include "async_wrap-inl.h" #include "env-inl.h" diff --git a/src/node_i18n.cc b/src/node_i18n.cc index c081bde93bec2a..edc7f56093a137 100644 --- a/src/node_i18n.cc +++ b/src/node_i18n.cc @@ -44,12 +44,13 @@ #if defined(NODE_HAVE_I18N_SUPPORT) +#include "base_object-inl.h" +#include "env-inl.h" #include "node.h" #include "node_buffer.h" #include "node_errors.h" -#include "env-inl.h" +#include "node_internals.h" #include "util-inl.h" -#include "base_object-inl.h" #include "v8.h" #include diff --git a/src/node_i18n.h b/src/node_i18n.h index 7faa5e57ef25fb..a0a398ac818736 100644 --- a/src/node_i18n.h +++ b/src/node_i18n.h @@ -24,7 +24,8 @@ #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS -#include "node_internals.h" +#include "util.h" + #include #if defined(NODE_HAVE_I18N_SUPPORT) diff --git a/src/node_internals.h b/src/node_internals.h index 70c82dd2fcd2ce..0d4fe74ebf3d02 100644 --- a/src/node_internals.h +++ b/src/node_internals.h @@ -44,39 +44,9 @@ #define Z_MIN_WINDOWBITS 8 #define Z_MAX_WINDOWBITS 15 #define Z_DEFAULT_WINDOWBITS 15 -// Fewer than 64 bytes per chunk is not recommended. -// Technically it could work with as few as 8, but even 64 bytes -// is low. Usually a MB or more is best. -#define Z_MIN_CHUNK 64 -#define Z_MAX_CHUNK std::numeric_limits::infinity() -#define Z_DEFAULT_CHUNK (16 * 1024) -#define Z_MIN_MEMLEVEL 1 -#define Z_MAX_MEMLEVEL 9 -#define Z_DEFAULT_MEMLEVEL 8 -#define Z_MIN_LEVEL -1 -#define Z_MAX_LEVEL 9 -#define Z_DEFAULT_LEVEL Z_DEFAULT_COMPRESSION struct sockaddr; -// Variation on NODE_DEFINE_CONSTANT that sets a String value. -#define NODE_DEFINE_STRING_CONSTANT(target, name, constant) \ - do { \ - v8::Isolate* isolate = target->GetIsolate(); \ - v8::Local constant_name = \ - v8::String::NewFromUtf8(isolate, name, v8::NewStringType::kNormal) \ - .ToLocalChecked(); \ - v8::Local constant_value = \ - v8::String::NewFromUtf8(isolate, constant, v8::NewStringType::kNormal)\ - .ToLocalChecked(); \ - v8::PropertyAttribute constant_attributes = \ - static_cast(v8::ReadOnly | v8::DontDelete); \ - target->DefineOwnProperty(isolate->GetCurrentContext(), \ - constant_name, \ - constant_value, \ - constant_attributes).FromJust(); \ - } while (0) - namespace node { namespace native_module { @@ -126,80 +96,10 @@ void RegisterSignalHandler(int signal, std::string GetHumanReadableProcessName(); void GetHumanReadableProcessName(char (*name)[1024]); -template -constexpr size_t arraysize(const T(&)[N]) { return N; } - -#ifndef ROUND_UP -# define ROUND_UP(a, b) ((a) % (b) ? ((a) + (b)) - ((a) % (b)) : (a)) -#endif - -#ifdef __GNUC__ -# define MUST_USE_RESULT __attribute__((warn_unused_result)) -#else -# define MUST_USE_RESULT -#endif - -class SlicedArguments { - public: - inline explicit SlicedArguments( - const v8::FunctionCallbackInfo& args, - size_t start = 0); - inline size_t size() const { return size_; } - inline v8::Local* data() { return data_; } - - private: - size_t size_; - v8::Local* data_; - v8::Local fixed_[64]; - std::vector> dynamic_; -}; - -SlicedArguments::SlicedArguments( - const v8::FunctionCallbackInfo& args, - size_t start) : size_(0), data_(fixed_) { - const size_t length = static_cast(args.Length()); - if (start >= length) return; - const size_t size = length - start; - - if (size > arraysize(fixed_)) { - dynamic_.resize(size); - data_ = dynamic_.data(); - } - - for (size_t i = 0; i < size; ++i) - data_[i] = args[i + start]; - - size_ = size; -} - namespace task_queue { void PromiseRejectCallback(v8::PromiseRejectMessage message); } // namespace task_queue -enum Endianness { - kLittleEndian, // _Not_ LITTLE_ENDIAN, clashes with endian.h. - kBigEndian -}; - -inline enum Endianness GetEndianness() { - // Constant-folded by the compiler. - const union { - uint8_t u8[2]; - uint16_t u16; - } u = { - { 1, 0 } - }; - return u.u16 == 1 ? kLittleEndian : kBigEndian; -} - -inline bool IsLittleEndian() { - return GetEndianness() == kLittleEndian; -} - -inline bool IsBigEndian() { - return GetEndianness() == kBigEndian; -} - class ArrayBufferAllocator : public v8::ArrayBuffer::Allocator { public: inline uint32_t* zero_fill_field() { return &zero_fill_field_; } diff --git a/src/node_messaging.cc b/src/node_messaging.cc index a538839bcc6fcb..aa4b92bf749eac 100644 --- a/src/node_messaging.cc +++ b/src/node_messaging.cc @@ -4,7 +4,6 @@ #include "debug_utils.h" #include "node_buffer.h" #include "node_errors.h" -#include "node_internals.h" #include "node_process.h" #include "util-inl.h" #include "util.h" diff --git a/src/node_native_module.cc b/src/node_native_module.cc index 012e50b9e814f0..f272dd46bef635 100644 --- a/src/node_native_module.cc +++ b/src/node_native_module.cc @@ -1,6 +1,5 @@ #include "node_native_module.h" #include "node_errors.h" -#include "node_internals.h" namespace node { diff --git a/src/node_options.cc b/src/node_options.cc index 667d7b6b9ddc60..a3a5e0233aa67c 100644 --- a/src/node_options.cc +++ b/src/node_options.cc @@ -1,5 +1,6 @@ #include -#include "node_internals.h" +#include "env-inl.h" +#include "node_binding.h" #include "node_options-inl.h" using v8::Boolean; diff --git a/src/node_os.cc b/src/node_os.cc index 505f42daf67fe4..4a372f4e428491 100644 --- a/src/node_os.cc +++ b/src/node_os.cc @@ -19,8 +19,9 @@ // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE // USE OR OTHER DEALINGS IN THE SOFTWARE. -#include "node_internals.h" +#include "env-inl.h" #include "string_bytes.h" +#include "util.h" #include #include diff --git a/src/node_perf.h b/src/node_perf.h index 703ef81ce48def..fe418ad441718a 100644 --- a/src/node_perf.h +++ b/src/node_perf.h @@ -4,7 +4,6 @@ #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS #include "node.h" -#include "node_internals.h" #include "node_perf_common.h" #include "env.h" #include "base_object-inl.h" diff --git a/src/node_perf_common.h b/src/node_perf_common.h index 0053ebf6119744..1c4cf01c871ad3 100644 --- a/src/node_perf_common.h +++ b/src/node_perf_common.h @@ -4,6 +4,7 @@ #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS #include "node.h" +#include "uv.h" #include "v8.h" #include diff --git a/src/node_process_events.cc b/src/node_process_events.cc index d9c87173abe317..ccc40b65753d3d 100644 --- a/src/node_process_events.cc +++ b/src/node_process_events.cc @@ -1,8 +1,8 @@ #include -#include "env.h" -#include "node_internals.h" +#include "env-inl.h" #include "node_process.h" +#include "util.h" namespace node { using v8::Context; diff --git a/src/node_stat_watcher.cc b/src/node_stat_watcher.cc index 7cf06393bb7484..9564a0a2b32ad7 100644 --- a/src/node_stat_watcher.cc +++ b/src/node_stat_watcher.cc @@ -20,10 +20,10 @@ // USE OR OTHER DEALINGS IN THE SOFTWARE. #include "node_stat_watcher.h" -#include "node_internals.h" #include "async_wrap-inl.h" #include "env.h" #include "node_file.h" +#include "util.h" #include #include diff --git a/src/node_types.cc b/src/node_types.cc index 048c47493d3c26..a53bcba555448f 100644 --- a/src/node_types.cc +++ b/src/node_types.cc @@ -1,4 +1,5 @@ -#include "node_internals.h" +#include "env-inl.h" +#include "node.h" using v8::Context; using v8::FunctionCallbackInfo; diff --git a/src/node_url.cc b/src/node_url.cc index 1841f32aad787c..d7402c4d043430 100644 --- a/src/node_url.cc +++ b/src/node_url.cc @@ -2,7 +2,7 @@ #include "base_object-inl.h" #include "node_errors.h" #include "node_i18n.h" -#include "node_internals.h" +#include "util.h" #include #include diff --git a/src/node_util.cc b/src/node_util.cc index ba81d9d6e7f763..2a7d90cfe2b661 100644 --- a/src/node_util.cc +++ b/src/node_util.cc @@ -1,6 +1,6 @@ -#include "node_internals.h" #include "node_errors.h" #include "node_watchdog.h" +#include "util.h" namespace node { namespace util { diff --git a/src/node_v8.cc b/src/node_v8.cc index c61f1e6600b992..8ed0e416702e0b 100644 --- a/src/node_v8.cc +++ b/src/node_v8.cc @@ -20,7 +20,6 @@ // USE OR OTHER DEALINGS IN THE SOFTWARE. #include "node.h" -#include "node_internals.h" #include "env-inl.h" #include "util-inl.h" #include "v8.h" diff --git a/src/node_worker.cc b/src/node_worker.cc index 30004957a47442..cb496005844e21 100644 --- a/src/node_worker.cc +++ b/src/node_worker.cc @@ -1,7 +1,6 @@ #include "node_worker.h" #include "debug_utils.h" #include "node_errors.h" -#include "node_internals.h" #include "node_buffer.h" #include "node_perf.h" #include "util.h" diff --git a/src/node_zlib.cc b/src/node_zlib.cc index 4c65ede612c0ae..639d7f87c5abe4 100644 --- a/src/node_zlib.cc +++ b/src/node_zlib.cc @@ -21,7 +21,6 @@ #include "node.h" #include "node_buffer.h" -#include "node_internals.h" #include "async_wrap-inl.h" #include "env-inl.h" @@ -59,6 +58,19 @@ using v8::Value; namespace { +// Fewer than 64 bytes per chunk is not recommended. +// Technically it could work with as few as 8, but even 64 bytes +// is low. Usually a MB or more is best. +#define Z_MIN_CHUNK 64 +#define Z_MAX_CHUNK std::numeric_limits::infinity() +#define Z_DEFAULT_CHUNK (16 * 1024) +#define Z_MIN_MEMLEVEL 1 +#define Z_MAX_MEMLEVEL 9 +#define Z_DEFAULT_MEMLEVEL 8 +#define Z_MIN_LEVEL -1 +#define Z_MAX_LEVEL 9 +#define Z_DEFAULT_LEVEL Z_DEFAULT_COMPRESSION + #define ZLIB_ERROR_CODES(V) \ V(Z_OK) \ V(Z_STREAM_END) \ diff --git a/src/pipe_wrap.cc b/src/pipe_wrap.cc index 6259cbdd1918dd..8ad1e0f594aa26 100644 --- a/src/pipe_wrap.cc +++ b/src/pipe_wrap.cc @@ -27,7 +27,6 @@ #include "handle_wrap.h" #include "node.h" #include "node_buffer.h" -#include "node_internals.h" #include "connect_wrap.h" #include "stream_base-inl.h" #include "stream_wrap.h" diff --git a/src/process_wrap.cc b/src/process_wrap.cc index d0514d64e08ffc..37afaf8ff961c9 100644 --- a/src/process_wrap.cc +++ b/src/process_wrap.cc @@ -20,7 +20,6 @@ // USE OR OTHER DEALINGS IN THE SOFTWARE. #include "env-inl.h" -#include "node_internals.h" #include "stream_base-inl.h" #include "stream_wrap.h" #include "util-inl.h" diff --git a/src/spawn_sync.cc b/src/spawn_sync.cc index eb16719b0517ee..5a600d2e21099c 100644 --- a/src/spawn_sync.cc +++ b/src/spawn_sync.cc @@ -22,8 +22,8 @@ #include "spawn_sync.h" #include "debug_utils.h" #include "env-inl.h" +#include "node_internals.h" #include "string_bytes.h" -#include "util.h" #include diff --git a/src/spawn_sync.h b/src/spawn_sync.h index 53fdee11d5a7e3..0ed6b9dff3a663 100644 --- a/src/spawn_sync.h +++ b/src/spawn_sync.h @@ -24,8 +24,9 @@ #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS -#include "node_internals.h" #include "node_buffer.h" +#include "uv.h" +#include "v8.h" namespace node { diff --git a/src/stream_base.cc b/src/stream_base.cc index 739964eb85a762..a55cb60cfc5338 100644 --- a/src/stream_base.cc +++ b/src/stream_base.cc @@ -4,11 +4,9 @@ #include "node.h" #include "node_buffer.h" #include "node_errors.h" -#include "node_internals.h" #include "env-inl.h" #include "js_stream.h" #include "string_bytes.h" -#include "util.h" #include "util-inl.h" #include "v8.h" diff --git a/src/stream_pipe.cc b/src/stream_pipe.cc index 931972a48c3a57..e58aa929e4b30e 100644 --- a/src/stream_pipe.cc +++ b/src/stream_pipe.cc @@ -1,7 +1,6 @@ #include "stream_pipe.h" #include "stream_base-inl.h" #include "node_buffer.h" -#include "node_internals.h" using v8::Context; using v8::External; diff --git a/src/string_bytes.cc b/src/string_bytes.cc index e4c4c0a7dbb34c..53bb95d80dab12 100644 --- a/src/string_bytes.cc +++ b/src/string_bytes.cc @@ -22,9 +22,10 @@ #include "string_bytes.h" #include "base64.h" -#include "node_internals.h" -#include "node_errors.h" +#include "env-inl.h" #include "node_buffer.h" +#include "node_errors.h" +#include "util.h" #include #include // memcpy diff --git a/src/string_decoder.cc b/src/string_decoder.cc index ceee1c9d762060..9cf1bd671b3fc9 100644 --- a/src/string_decoder.cc +++ b/src/string_decoder.cc @@ -1,7 +1,7 @@ -#include "string_decoder-inl.h" -#include "string_bytes.h" -#include "node_internals.h" +#include "env-inl.h" #include "node_buffer.h" +#include "string_bytes.h" +#include "string_decoder-inl.h" using v8::Array; using v8::Context; diff --git a/src/string_search.h b/src/string_search.h index c924908b8b6573..95c746ea89e01e 100644 --- a/src/string_search.h +++ b/src/string_search.h @@ -7,7 +7,8 @@ #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS -#include "node_internals.h" +#include "util.h" + #include #include diff --git a/src/timers.cc b/src/timers.cc index f0ee1db4152501..f80e9e6be4d20c 100644 --- a/src/timers.cc +++ b/src/timers.cc @@ -1,4 +1,6 @@ -#include "node_internals.h" +#include "env-inl.h" +#include "util.h" +#include "v8.h" #include diff --git a/src/tls_wrap.cc b/src/tls_wrap.cc index b5d6559355cb87..d9f916f3d16a23 100644 --- a/src/tls_wrap.cc +++ b/src/tls_wrap.cc @@ -26,7 +26,6 @@ #include "node_crypto_bio.h" // NodeBIO // ClientHelloParser #include "node_crypto_clienthello-inl.h" -#include "node_internals.h" #include "stream_base-inl.h" #include "util-inl.h" diff --git a/src/tracing/traced_value.h b/src/tracing/traced_value.h index 84e24c952528f5..7507978408f6ab 100644 --- a/src/tracing/traced_value.h +++ b/src/tracing/traced_value.h @@ -5,7 +5,8 @@ #ifndef SRC_TRACING_TRACED_VALUE_H_ #define SRC_TRACING_TRACED_VALUE_H_ -#include "node_internals.h" +#include "node.h" +#include "util.h" #include "v8.h" #include diff --git a/src/udp_wrap.cc b/src/udp_wrap.cc index 2e076e26b9fbed..d838ef6e725b96 100644 --- a/src/udp_wrap.cc +++ b/src/udp_wrap.cc @@ -22,7 +22,6 @@ #include "udp_wrap.h" #include "env-inl.h" #include "node_buffer.h" -#include "node_internals.h" #include "handle_wrap.h" #include "req_wrap-inl.h" #include "util-inl.h" diff --git a/src/util.h b/src/util.h index 2fa16cadeac462..ea705b800bdf17 100644 --- a/src/util.h +++ b/src/util.h @@ -570,6 +570,94 @@ inline v8::MaybeLocal ToV8Value(v8::Local context, #define READONLY_STRING_PROPERTY(obj, name, str) \ READONLY_PROPERTY(obj, name, ToV8Value(context, str).ToLocalChecked()) +// Variation on NODE_DEFINE_CONSTANT that sets a String value. +#define NODE_DEFINE_STRING_CONSTANT(target, name, constant) \ + do { \ + v8::Isolate* isolate = target->GetIsolate(); \ + v8::Local constant_name = \ + v8::String::NewFromUtf8(isolate, name, v8::NewStringType::kNormal) \ + .ToLocalChecked(); \ + v8::Local constant_value = \ + v8::String::NewFromUtf8(isolate, constant, v8::NewStringType::kNormal) \ + .ToLocalChecked(); \ + v8::PropertyAttribute constant_attributes = \ + static_cast(v8::ReadOnly | v8::DontDelete); \ + target \ + ->DefineOwnProperty(isolate->GetCurrentContext(), \ + constant_name, \ + constant_value, \ + constant_attributes) \ + .FromJust(); \ + } while (0) + +enum Endianness { + kLittleEndian, // _Not_ LITTLE_ENDIAN, clashes with endian.h. + kBigEndian +}; + +inline enum Endianness GetEndianness() { + // Constant-folded by the compiler. + const union { + uint8_t u8[2]; + uint16_t u16; + } u = {{1, 0}}; + return u.u16 == 1 ? kLittleEndian : kBigEndian; +} + +inline bool IsLittleEndian() { + return GetEndianness() == kLittleEndian; +} + +inline bool IsBigEndian() { + return GetEndianness() == kBigEndian; +} + +template +constexpr size_t arraysize(const T (&)[N]) { + return N; +} + +#ifndef ROUND_UP +#define ROUND_UP(a, b) ((a) % (b) ? ((a) + (b)) - ((a) % (b)) : (a)) +#endif + +#ifdef __GNUC__ +#define MUST_USE_RESULT __attribute__((warn_unused_result)) +#else +#define MUST_USE_RESULT +#endif + +class SlicedArguments { + public: + inline explicit SlicedArguments( + const v8::FunctionCallbackInfo& args, size_t start = 0); + inline size_t size() const { return size_; } + inline v8::Local* data() { return data_; } + + private: + size_t size_; + v8::Local* data_; + v8::Local fixed_[64]; + std::vector> dynamic_; +}; + +SlicedArguments::SlicedArguments( + const v8::FunctionCallbackInfo& args, size_t start) + : size_(0), data_(fixed_) { + const size_t length = static_cast(args.Length()); + if (start >= length) return; + const size_t size = length - start; + + if (size > arraysize(fixed_)) { + dynamic_.resize(size); + data_ = dynamic_.data(); + } + + for (size_t i = 0; i < size; ++i) data_[i] = args[i + start]; + + size_ = size; +} + } // namespace node #endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS diff --git a/src/uv.cc b/src/uv.cc index 5422b0d2403d39..59469fc3075a52 100644 --- a/src/uv.cc +++ b/src/uv.cc @@ -22,8 +22,8 @@ #include "uv.h" #include "env-inl.h" #include "node.h" -#include "node_internals.h" #include "node_process.h" +#include "util.h" namespace node {