Browse Source

build: fix windows build

Be very careful with forward declarations, MSVC is quite picky and
rather stupid about it.

Fixes #5810.
v0.11.4-release
Ben Noordhuis 12 years ago
parent
commit
c679ac8f00
  1. 2
      src/node.cc
  2. 57
      src/node.h
  3. 1
      src/node_buffer.cc
  4. 44
      src/node_internals.h
  5. 1
      src/req_wrap.h

2
src/node.cc

@ -740,7 +740,7 @@ Local<Value> ErrnoException(int errorno,
const char *path) { const char *path) {
Local<Value> e; Local<Value> e;
Local<String> estring = String::NewSymbol(errno_string(errorno)); Local<String> estring = String::NewSymbol(errno_string(errorno));
if (!msg[0]) { if (msg == NULL || msg[0] == '\0') {
msg = strerror(errorno); msg = strerror(errorno);
} }
Local<String> message = String::NewSymbol(msg); Local<String> message = String::NewSymbol(msg);

57
src/node.h

@ -66,6 +66,36 @@
#include "node_object_wrap.h" #include "node_object_wrap.h"
// Forward-declare these functions now to stop MSVS from becoming
// terminally confused when it's done in node_internals.h
namespace node {
NODE_EXTERN v8::Local<v8::Value> ErrnoException(int errorno,
const char* syscall = NULL,
const char* message = NULL,
const char* path = NULL);
NODE_EXTERN v8::Local<v8::Value> UVException(int errorno,
const char* syscall = NULL,
const char* message = NULL,
const char* path = NULL);
NODE_EXTERN v8::Handle<v8::Value> MakeCallback(
const v8::Handle<v8::Object> recv,
const char* method,
int argc,
v8::Handle<v8::Value>* argv);
NODE_EXTERN v8::Handle<v8::Value> MakeCallback(
const v8::Handle<v8::Object> object,
const v8::Handle<v8::String> symbol,
int argc,
v8::Handle<v8::Value>* argv);
NODE_EXTERN v8::Handle<v8::Value> MakeCallback(
const v8::Handle<v8::Object> object,
const v8::Handle<v8::Function> callback,
int argc,
v8::Handle<v8::Value>* argv);
} // namespace node
#if NODE_WANT_INTERNALS #if NODE_WANT_INTERNALS
# include "node_internals.h" # include "node_internals.h"
#endif #endif
@ -147,16 +177,6 @@ NODE_EXTERN ssize_t DecodeWrite(char *buf,
v8::Local<v8::Object> BuildStatsObject(const uv_stat_t* s); v8::Local<v8::Object> BuildStatsObject(const uv_stat_t* s);
NODE_EXTERN v8::Local<v8::Value> ErrnoException(int errorno,
const char *syscall = NULL,
const char *msg = "",
const char *path = NULL);
NODE_EXTERN v8::Local<v8::Value> UVException(int errorno,
const char *syscall = NULL,
const char *msg = NULL,
const char *path = NULL);
#ifdef _WIN32 #ifdef _WIN32
NODE_EXTERN v8::Local<v8::Value> WinapiErrnoException(int errorno, NODE_EXTERN v8::Local<v8::Value> WinapiErrnoException(int errorno,
const char *syscall = NULL, const char *msg = "", const char *syscall = NULL, const char *msg = "",
@ -217,23 +237,6 @@ node_module_struct* get_builtin_module(const char *name);
NODE_EXTERN void AtExit(void (*cb)(void* arg), void* arg = 0); NODE_EXTERN void AtExit(void (*cb)(void* arg), void* arg = 0);
NODE_EXTERN void SetErrno(uv_err_t err); NODE_EXTERN void SetErrno(uv_err_t err);
NODE_EXTERN v8::Handle<v8::Value>
MakeCallback(const v8::Handle<v8::Object> object,
const char* method,
int argc,
v8::Handle<v8::Value> argv[]);
NODE_EXTERN v8::Handle<v8::Value>
MakeCallback(const v8::Handle<v8::Object> object,
const v8::Handle<v8::String> symbol,
int argc,
v8::Handle<v8::Value> argv[]);
NODE_EXTERN v8::Handle<v8::Value>
MakeCallback(const v8::Handle<v8::Object> object,
const v8::Handle<v8::Function> callback,
int argc,
v8::Handle<v8::Value> argv[]);
} // namespace node } // namespace node

1
src/node_buffer.cc

@ -21,7 +21,6 @@
#include "node.h" #include "node.h"
#include "node_internals.h"
#include "node_buffer.h" #include "node_buffer.h"
#include "smalloc.h" #include "smalloc.h"
#include "string_bytes.h" #include "string_bytes.h"

44
src/node_internals.h

@ -29,6 +29,21 @@
namespace node { namespace node {
// Forward declarations from node_buffer.h. We can't include node_buffer.h
// in this file because:
//
// a) we're included early on in node.h, and
// b) node_buffer.h depends on the definition of the |encoding| enum that's
// defined further down in node.h...
namespace Buffer {
NODE_EXTERN char* Data(v8::Handle<v8::Value>);
NODE_EXTERN char* Data(v8::Handle<v8::Object>);
NODE_EXTERN size_t Length(v8::Handle<v8::Value>);
NODE_EXTERN size_t Length(v8::Handle<v8::Object>);
} // namespace Buffer
// Defined in node.cc // Defined in node.cc
extern v8::Isolate* node_isolate; extern v8::Isolate* node_isolate;
@ -177,10 +192,6 @@ inline static void ThrowErrnoException(int errorno,
const char* syscall = NULL, const char* syscall = NULL,
const char* message = NULL, const char* message = NULL,
const char* path = NULL) { const char* path = NULL) {
NODE_EXTERN v8::Local<v8::Value> ErrnoException(int errorno,
const char* syscall = NULL,
const char* message = NULL,
const char* path = NULL);
v8::ThrowException(ErrnoException(errorno, syscall, message, path)); v8::ThrowException(ErrnoException(errorno, syscall, message, path));
} }
@ -188,10 +199,6 @@ inline static void ThrowUVException(int errorno,
const char* syscall = NULL, const char* syscall = NULL,
const char* message = NULL, const char* message = NULL,
const char* path = NULL) { const char* path = NULL) {
NODE_EXTERN v8::Local<v8::Value> UVException(int errorno,
const char* syscall = NULL,
const char* message = NULL,
const char* path = NULL);
v8::ThrowException(UVException(errorno, syscall, message, path)); v8::ThrowException(UVException(errorno, syscall, message, path));
} }
@ -309,23 +316,6 @@ inline void Cached<v8::Value>::operator=(v8::Handle<v8::Value> that) {
CachedBase<v8::Value>::operator=(that); CachedBase<v8::Value>::operator=(that);
} }
// Forward declarations, see node.h
NODE_EXTERN v8::Handle<v8::Value> MakeCallback(
const v8::Handle<v8::Object> recv,
const char* method,
int argc,
v8::Handle<v8::Value>* argv);
NODE_EXTERN v8::Handle<v8::Value> MakeCallback(
const v8::Handle<v8::Object> object,
const v8::Handle<v8::String> symbol,
int argc,
v8::Handle<v8::Value>* argv);
NODE_EXTERN v8::Handle<v8::Value> MakeCallback(
const v8::Handle<v8::Object> object,
const v8::Handle<v8::Function> callback,
int argc,
v8::Handle<v8::Value>* argv);
template <typename TypeName> template <typename TypeName>
v8::Handle<v8::Value> MakeCallback( v8::Handle<v8::Value> MakeCallback(
const v8::Persistent<v8::Object>& recv, const v8::Persistent<v8::Object>& recv,
@ -364,15 +354,11 @@ namespace Buffer {
template <typename TypeName> template <typename TypeName>
inline char* Data(v8::Persistent<TypeName>& val) { inline char* Data(v8::Persistent<TypeName>& val) {
NODE_EXTERN char* Data(v8::Handle<v8::Value>);
NODE_EXTERN char* Data(v8::Handle<v8::Object>);
return Data(PersistentToLocal(val)); return Data(PersistentToLocal(val));
} }
template <typename TypeName> template <typename TypeName>
inline size_t Length(v8::Persistent<TypeName>& val) { inline size_t Length(v8::Persistent<TypeName>& val) {
NODE_EXTERN size_t Length(v8::Handle<v8::Value>);
NODE_EXTERN size_t Length(v8::Handle<v8::Object>);
return Length(PersistentToLocal(val)); return Length(PersistentToLocal(val));
} }

1
src/req_wrap.h

@ -23,7 +23,6 @@
#define REQ_WRAP_H_ #define REQ_WRAP_H_
#include "queue.h" #include "queue.h"
#include "node_internals.h"
namespace node { namespace node {

Loading…
Cancel
Save