11#include " node_ffi.h"
22#include " env-inl.h"
3- #include " env.h"
43#include " ffi.h"
54#include " node_binding.h"
6- #include " util.h"
75#include " v8-array-buffer.h"
86#include " v8-function-callback.h"
97#include " v8-primitive.h"
1210#include " v8-fast-api-calls.h"
1311#include " v8-template.h"
1412
15- using v8::Context ;
13+ using v8::Array ;
1614using v8::ArrayBuffer;
1715using v8::BigInt;
18- using v8::Number;
19- using v8::Array;
20- using v8::Isolate;
21- using v8::String;
16+ using v8::Boolean;
17+ using v8::Context;
2218using v8::FunctionCallbackInfo;
2319using v8::FunctionTemplate;
24- using v8::FastApiCallbackOptions ;
25- using v8::CFunction ;
20+ using v8::Isolate ;
21+ using v8::Number ;
2622
2723namespace node {
2824namespace ffi {
@@ -36,7 +32,7 @@ void GetLibrary(const FunctionCallbackInfo<Value>& args) {
3632 Environment* env = Environment::GetCurrent (args);
3733
3834 bool isNull = true ;
39- std::string fname = " " ; // TODO(bengl) not this hacky thing
35+ std::string fname = " " ;
4036 if (!args[0 ]->IsNull ()) {
4137 CHECK (args[0 ]->IsString ());
4238 node::Utf8Value filename (env->isolate (), args[0 ]);
@@ -55,11 +51,8 @@ void GetLibrary(const FunctionCallbackInfo<Value>& args) {
5551 } else {
5652 lib = new binding::DLib (fname.c_str (), binding::DLib::kDefaultFlags );
5753 }
54+ if (!lib->Open ()) return ;
5855 libraries[fname] = lib;
59- bool success = lib->Open ();
60- if (!success) {
61- // TODO(bengl) what now?
62- }
6356 }
6457 ReturnBigInt (env->isolate (), lib);
6558}
@@ -122,10 +115,6 @@ FfiSignature::~FfiSignature() {
122115 free (argvTypes_);
123116}
124117
125- void FfiSignature::MemoryInfo (MemoryTracker* tracker) const {
126- // TODO(bengl)
127- }
128-
129118void FfiSignature::New (const FunctionCallbackInfo<Value>& args) {
130119 CHECK (args.IsConstructCall ());
131120 CHECK (args[0 ]->IsBigInt ());
@@ -135,7 +124,11 @@ void FfiSignature::New(const FunctionCallbackInfo<Value>& args) {
135124 Environment * env = Environment::GetCurrent (isolate);
136125
137126 FfiSignature* sig = new FfiSignature (
138- env, args.This (), args[0 ].As <BigInt>(), args[1 ].As <BigInt>(), args[2 ].As <Array>());
127+ env,
128+ args.This (),
129+ args[0 ].As <BigInt>(),
130+ args[1 ].As <BigInt>(),
131+ args[2 ].As <Array>());
139132
140133 args.This ()->Set (
141134 env->context (),
@@ -156,10 +149,6 @@ void MakeCall(const FunctionCallbackInfo<Value> &args) {
156149 reinterpret_cast <void **>(avalues));
157150}
158151
159- void FfiBindingData::MemoryInfo (MemoryTracker* tracker) const {
160- // TODO(bengl) is this needed if not allocating any extra memory in here?
161- }
162-
163152void Initialize (
164153 Local<Object> target,
165154 Local<Value> unused,
@@ -178,8 +167,10 @@ void Initialize(
178167 SetMethod (context, target, " getSymbol" , GetSymbol);
179168 SetMethod (context, target, " getLibrary" , GetLibrary);
180169
181- Local<FunctionTemplate> tmpl = NewFunctionTemplate (isolate, FfiSignature::New);
182- tmpl->InstanceTemplate ()->SetInternalFieldCount (FfiSignature::kInternalFieldCount );
170+ Local<FunctionTemplate> tmpl =
171+ NewFunctionTemplate (isolate, FfiSignature::New);
172+ tmpl->InstanceTemplate ()
173+ ->SetInternalFieldCount (FfiSignature::kInternalFieldCount );
183174 tmpl->Inherit (BaseObject::GetConstructorTemplate (env));
184175 SetConstructorFunction (context, target, " FfiSignature" , tmpl);
185176
@@ -205,7 +196,7 @@ void Initialize(
205196 NODE_FFI_SET_TYPE_CONSTANT (uint, ffi_type_uint);
206197 NODE_FFI_SET_TYPE_CONSTANT (int , ffi_type_sint);
207198 NODE_FFI_SET_TYPE_CONSTANT (ulong, ffi_type_ulong);
208- NODE_FFI_SET_TYPE_CONSTANT (long , ffi_type_slong);
199+ NODE_FFI_SET_TYPE_CONSTANT (long , ffi_type_slong); // NOLINT(runtime/int)
209200 // NODE_FFI_SET_TYPE_CONSTANT(longdouble, ffi_type_longdouble);
210201 NODE_FFI_SET_TYPE_CONSTANT (pointer, ffi_type_pointer);
211202 target->Set (context, OneByteString(isolate, " types" ), types).Check();
@@ -214,7 +205,7 @@ void Initialize(
214205#define NODE_FFI_SET_SIZE_CONSTANT (typ ) sizes->Set (context, \
215206 OneByteString (isolate, #typ), \
216207 Number::New(isolate, sizeof (typ))).Check();
217- NODE_FFI_SET_SIZE_CONSTANT (char ); // TODO(bengl) JS needs to know if signed
208+ NODE_FFI_SET_SIZE_CONSTANT (char );
218209 NODE_FFI_SET_SIZE_CONSTANT (signed char );
219210 NODE_FFI_SET_SIZE_CONSTANT (unsigned char );
220211 NODE_FFI_SET_SIZE_CONSTANT (short ); // NOLINT(runtime/int)
@@ -228,18 +219,18 @@ void Initialize(
228219 NODE_FFI_SET_SIZE_CONSTANT (signed int );
229220 NODE_FFI_SET_SIZE_CONSTANT (unsigned );
230221 NODE_FFI_SET_SIZE_CONSTANT (unsigned int );
231- NODE_FFI_SET_SIZE_CONSTANT (long );
232- NODE_FFI_SET_SIZE_CONSTANT (long int );
233- NODE_FFI_SET_SIZE_CONSTANT (signed long );
234- NODE_FFI_SET_SIZE_CONSTANT (signed long int );
235- NODE_FFI_SET_SIZE_CONSTANT (unsigned long );
236- NODE_FFI_SET_SIZE_CONSTANT (unsigned long int );
237- NODE_FFI_SET_SIZE_CONSTANT (long long );
238- NODE_FFI_SET_SIZE_CONSTANT (long long int );
239- NODE_FFI_SET_SIZE_CONSTANT (signed long long );
240- NODE_FFI_SET_SIZE_CONSTANT (signed long long int );
241- NODE_FFI_SET_SIZE_CONSTANT (unsigned long long );
242- NODE_FFI_SET_SIZE_CONSTANT (unsigned long long int );
222+ NODE_FFI_SET_SIZE_CONSTANT (long ); // NOLINT(runtime/int)
223+ NODE_FFI_SET_SIZE_CONSTANT (long int ); // NOLINT(runtime/int)
224+ NODE_FFI_SET_SIZE_CONSTANT (signed long ); // NOLINT(runtime/int)
225+ NODE_FFI_SET_SIZE_CONSTANT (signed long int ); // NOLINT(runtime/int)
226+ NODE_FFI_SET_SIZE_CONSTANT (unsigned long ); // NOLINT(runtime/int)
227+ NODE_FFI_SET_SIZE_CONSTANT (unsigned long int ); // NOLINT(runtime/int)
228+ NODE_FFI_SET_SIZE_CONSTANT (long long ); // NOLINT(runtime/int)
229+ NODE_FFI_SET_SIZE_CONSTANT (long long int ); // NOLINT(runtime/int)
230+ NODE_FFI_SET_SIZE_CONSTANT (signed long long ); // NOLINT(runtime/int)
231+ NODE_FFI_SET_SIZE_CONSTANT (signed long long int ); // NOLINT(runtime/int)
232+ NODE_FFI_SET_SIZE_CONSTANT (unsigned long long ); // NOLINT(runtime/int)
233+ NODE_FFI_SET_SIZE_CONSTANT (unsigned long long int ); // NOLINT(runtime/int)
243234 NODE_FFI_SET_SIZE_CONSTANT (float );
244235 NODE_FFI_SET_SIZE_CONSTANT (double );
245236 // NODE_FFI_SET_SIZE_CONSTANT(long double);
@@ -253,6 +244,13 @@ void Initialize(
253244 NODE_FFI_SET_SIZE_CONSTANT (uint64_t );
254245 NODE_FFI_SET_SIZE_CONSTANT (int64_t );
255246 target->Set (context, OneByteString(isolate, " sizes" ), sizes).Check();
247+
248+ char test_char = -1 ;
249+ Local<Boolean> charIsSigned = Boolean::New(isolate, test_char < 0 );
250+ target->Set (
251+ context,
252+ OneByteString (isolate, " charIsSigned" ),
253+ charIsSigned).Check ();
256254}
257255
258256void RegisterExternalReferences (ExternalReferenceRegistry* registry) {
0 commit comments