22 #ifndef SRC_NODE_INTERNALS_H_ 23 #define SRC_NODE_INTERNALS_H_ 25 #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS 44 #define NODE_DEFINE_STRING_CONSTANT(target, name, constant) \ 46 v8::Isolate* isolate = target->GetIsolate(); \ 47 v8::Local<v8::String> constant_name = \ 48 v8::String::NewFromUtf8(isolate, name); \ 49 v8::Local<v8::String> constant_value = \ 50 v8::String::NewFromUtf8(isolate, constant); \ 51 v8::PropertyAttribute constant_attributes = \ 52 static_cast<v8::PropertyAttribute>(v8::ReadOnly | v8::DontDelete); \ 53 target->DefineOwnProperty(isolate->GetCurrentContext(), \ 56 constant_attributes).FromJust(); \ 63 extern std::string openssl_config;
106 template <
class TypeName>
107 inline v8::Local<TypeName> PersistentToLocal(
108 v8::Isolate* isolate,
109 const v8::Persistent<TypeName>& persistent);
116 const sockaddr* addr,
117 v8::Local<v8::Object> info = v8::Local<v8::Object>());
119 template <
typename T,
int (*F)(const
typename T::HandleType*, sockaddr*,
int*)>
120 void GetSockOrPeerName(
const v8::FunctionCallbackInfo<v8::Value>& args) {
121 T*
const wrap = Unwrap<T>(args.Holder());
123 return args.GetReturnValue().Set(UV_EBADF);
124 CHECK(args[0]->IsObject());
125 sockaddr_storage storage;
126 int addrlen =
sizeof(storage);
127 sockaddr*
const addr =
reinterpret_cast<sockaddr*
>(&storage);
128 const int err = F(&wrap->handle_, addr, &addrlen);
130 AddressToJS(wrap->env(), addr, args[0].As<v8::Object>());
131 args.GetReturnValue().Set(err);
136 void RegisterSignalHandler(
int signal,
137 void (*handler)(
int signal),
138 bool reset_handler =
false);
141 bool SafeGetenv(
const char* key, std::string* text);
143 template <
typename T,
size_t N>
144 constexpr
size_t arraysize(
const T(&)[N]) {
return N; }
147 # define ROUND_UP(a, b) ((a) % (b) ? ((a) + (b)) - ((a) % (b)) : (a)) 151 # define MUST_USE_RESULT __attribute__((warn_unused_result)) 153 # define MUST_USE_RESULT 158 enum ErrorHandlingMode { FATAL_ERROR, CONTEXTIFY_ERROR };
160 v8::Local<v8::Value> er,
161 v8::Local<v8::Message> message,
162 enum ErrorHandlingMode mode);
164 NO_RETURN
void FatalError(
const char* location,
const char* message);
172 const char*
const* argv,
174 const char*
const* exec_argv);
181 inline enum Endianness GetEndianness() {
189 return u.u16 == 1 ? kLittleEndian : kBigEndian;
192 inline bool IsLittleEndian() {
193 return GetEndianness() == kLittleEndian;
196 inline bool IsBigEndian() {
197 return GetEndianness() == kBigEndian;
200 class ArrayBufferAllocator :
public v8::ArrayBuffer::Allocator {
202 inline uint32_t* zero_fill_field() {
return &zero_fill_field_; }
204 virtual void* Allocate(
size_t size);
205 virtual void* AllocateUninitialized(
size_t size)
206 {
return node::UncheckedMalloc(size); }
207 virtual void Free(
void*
data,
size_t) { free(data); }
210 uint32_t zero_fill_field_ = 1;
219 v8::MaybeLocal<v8::Object>
Copy(Environment* env,
const char*
data,
size_t len);
220 v8::MaybeLocal<v8::Object>
New(Environment* env,
size_t size);
222 v8::MaybeLocal<v8::Object>
New(Environment* env,
225 void (*callback)(
char* data,
void* hint),
230 v8::MaybeLocal<v8::Object>
New(Environment* env,
char* data,
size_t length);
240 template <
typename T>
241 static v8::MaybeLocal<v8::Object>
New(Environment* env,
242 MaybeStackBuffer<T>*
buf) {
243 v8::MaybeLocal<v8::Object> ret;
244 char* src =
reinterpret_cast<char*
>(buf->out());
245 const size_t len_in_bytes = buf->length() *
sizeof(buf->out()[0]);
247 if (buf->IsAllocated())
248 ret =
New(env, src, len_in_bytes);
249 else if (!buf->IsInvalidated())
250 ret =
Copy(env, src, len_in_bytes);
255 if (buf->IsAllocated())
264 #endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS 266 #endif // SRC_NODE_INTERNALS_H_ bool IsExceptionDecorated(Environment *env, Local< Value > er)
void AppendExceptionLine(Environment *env, Local< Value > er, Local< Message > message, enum ErrorHandlingMode mode)
void ClearFatalExceptionHandlers(Environment *env)
void ProcessEmitWarning(Environment *env, const char *fmt,...)
NO_RETURN void FatalError(const char *location, const char *message)
union node::cares_wrap::@8::CaresAsyncData::@0 data
bool config_experimental_modules
bool SafeGetenv(const char *key, std::string *text)
void SignalExit(int signo)
node::DebugOptions debug_options
bool config_pending_deprecation
std::string config_warning_file
void FillStatsArray(double *fields, const uv_stat_t *s)
Local< Object > AddressToJS(Environment *env, const sockaddr *addr, Local< Object > info)
bool config_preserve_symlinks
MaybeLocal< Object > New(Isolate *isolate, Local< String > string, enum encoding enc)
void SetupProcessObject(Environment *env, int argc, const char *const *argv, int exec_argc, const char *const *exec_argv)
bool config_expose_internals
MaybeLocal< Object > Copy(Isolate *isolate, const char *data, size_t length)