Javascript: support null pointers.
We allow to set pointer types using JS null.
This commit is contained in:
parent
d5ea32d760
commit
3f0f588891
3 changed files with 32 additions and 7 deletions
9
Examples/test-suite/javascript/null_pointer_runme.js
Normal file
9
Examples/test-suite/javascript/null_pointer_runme.js
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
var null_pointer = require("null_pointer");
|
||||||
|
|
||||||
|
if (!null_pointer.func(null)) {
|
||||||
|
throw new Error("Javascript 'null' should be converted into NULL.");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (null_pointer.getnull() != null) {
|
||||||
|
throw new Error("NULL should be converted into Javascript 'null'.");
|
||||||
|
}
|
||||||
|
|
@ -99,7 +99,9 @@ SWIGRUNTIME JSClassRef _SwigObject_classRef;
|
||||||
|
|
||||||
|
|
||||||
SWIGRUNTIME int SWIG_JSC_ConvertInstancePtr(JSContextRef context, JSObjectRef objRef, void** ptr, swig_type_info *info, int flags) {
|
SWIGRUNTIME int SWIG_JSC_ConvertInstancePtr(JSContextRef context, JSObjectRef objRef, void** ptr, swig_type_info *info, int flags) {
|
||||||
SwigPrivData *cdata = (SwigPrivData *) JSObjectGetPrivate(objRef);
|
SwigPrivData *cdata;
|
||||||
|
|
||||||
|
cdata = (SwigPrivData *) JSObjectGetPrivate(objRef);
|
||||||
if(cdata == NULL) {
|
if(cdata == NULL) {
|
||||||
return SWIG_ERROR;
|
return SWIG_ERROR;
|
||||||
}
|
}
|
||||||
|
|
@ -135,7 +137,7 @@ SWIGRUNTIME int SWIG_JSC_ConvertPtr(JSContextRef context, JSValueRef valRef, voi
|
||||||
*ptr=0;
|
*ptr=0;
|
||||||
return SWIG_OK;
|
return SWIG_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!JSValueIsObject(context, valRef)) {
|
if(!JSValueIsObject(context, valRef)) {
|
||||||
return SWIG_TypeError;
|
return SWIG_TypeError;
|
||||||
}
|
}
|
||||||
|
|
@ -149,17 +151,23 @@ SWIGRUNTIME int SWIG_JSC_ConvertPtr(JSContextRef context, JSValueRef valRef, voi
|
||||||
}
|
}
|
||||||
|
|
||||||
SWIGRUNTIME JSObjectRef SWIG_JSC_NewPointerObj(JSContextRef context, void *ptr, swig_type_info *info, int flags) {
|
SWIGRUNTIME JSObjectRef SWIG_JSC_NewPointerObj(JSContextRef context, void *ptr, swig_type_info *info, int flags) {
|
||||||
|
|
||||||
JSClassRef classRef;
|
JSClassRef classRef;
|
||||||
|
JSObjectRef result;
|
||||||
|
SwigPrivData *cdata;
|
||||||
|
|
||||||
|
if (ptr == NULL) {
|
||||||
|
return JSValueToObject(context, JSValueMakeNull(context), 0);
|
||||||
|
}
|
||||||
|
|
||||||
if(info->clientdata == NULL) {
|
if(info->clientdata == NULL) {
|
||||||
classRef = _SwigObject_classRef;
|
classRef = _SwigObject_classRef;
|
||||||
} else {
|
} else {
|
||||||
classRef = (JSClassRef) info->clientdata;
|
classRef = (JSClassRef) info->clientdata;
|
||||||
}
|
}
|
||||||
|
|
||||||
JSObjectRef result = JSObjectMake(context, classRef, NULL);
|
result = JSObjectMake(context, classRef, NULL);
|
||||||
|
|
||||||
SwigPrivData* cdata = (SwigPrivData*) malloc(sizeof(SwigPrivData));
|
cdata = (SwigPrivData*) malloc(sizeof(SwigPrivData));
|
||||||
cdata->swigCObject = ptr;
|
cdata->swigCObject = ptr;
|
||||||
cdata->swigCMemOwn = (flags & SWIG_POINTER_OWN) ? 1 : 0;
|
cdata->swigCMemOwn = (flags & SWIG_POINTER_OWN) ? 1 : 0;
|
||||||
cdata->info = info;
|
cdata->info = info;
|
||||||
|
|
|
||||||
|
|
@ -220,7 +220,11 @@ void SWIGV8_SetPrivateData(v8::Handle<v8::Object> obj, void* ptr, swig_type_info
|
||||||
|
|
||||||
int SWIG_V8_ConvertPtr(v8::Handle<v8::Value> valRef, void** ptr, swig_type_info *info, int flags) {
|
int SWIG_V8_ConvertPtr(v8::Handle<v8::Value> valRef, void** ptr, swig_type_info *info, int flags) {
|
||||||
v8::HandleScope scope;
|
v8::HandleScope scope;
|
||||||
|
/* special case: JavaScript null => C NULL pointer */
|
||||||
|
if(valRef->IsNull()) {
|
||||||
|
*ptr=0;
|
||||||
|
return SWIG_OK;
|
||||||
|
}
|
||||||
if(!valRef->IsObject()) {
|
if(!valRef->IsObject()) {
|
||||||
return SWIG_TypeError;
|
return SWIG_TypeError;
|
||||||
}
|
}
|
||||||
|
|
@ -228,10 +232,14 @@ int SWIG_V8_ConvertPtr(v8::Handle<v8::Value> valRef, void** ptr, swig_type_info
|
||||||
return SWIG_V8_ConvertInstancePtr(objRef, ptr, info, flags);
|
return SWIG_V8_ConvertInstancePtr(objRef, ptr, info, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
v8::Handle<v8::Object> SWIG_V8_NewPointerObj(void *ptr, swig_type_info *info, int flags) {
|
v8::Handle<v8::Value> SWIG_V8_NewPointerObj(void *ptr, swig_type_info *info, int flags) {
|
||||||
v8::HandleScope scope;
|
v8::HandleScope scope;
|
||||||
v8::Handle<v8::FunctionTemplate> class_templ;
|
v8::Handle<v8::FunctionTemplate> class_templ;
|
||||||
|
|
||||||
|
if (ptr == NULL) {
|
||||||
|
return scope.Close(v8::Null());
|
||||||
|
}
|
||||||
|
|
||||||
#if (SWIG_V8_VERSION < 0x031900)
|
#if (SWIG_V8_VERSION < 0x031900)
|
||||||
if(info->clientdata != 0) {
|
if(info->clientdata != 0) {
|
||||||
class_templ = ((SWIGV8_ClientData*) info->clientdata)->class_templ;
|
class_templ = ((SWIGV8_ClientData*) info->clientdata)->class_templ;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue