diff options
author | Oliver Buchtala <oliver.buchtala@googlemail.com> | 2013-09-09 17:34:53 +0300 |
---|---|---|
committer | Oliver Buchtala <oliver.buchtala@googlemail.com> | 2013-09-09 17:34:53 +0300 |
commit | 407d8ef5acff62578c701da74cfdf9a752baffd1 (patch) | |
tree | 821f2e8093f1b3fa847912fb664d0b86c672a15b /Lib/javascript | |
parent | fc4d9b665c5839df06501e736163bfeadb7503d1 (diff) | |
download | swig-407d8ef5acff62578c701da74cfdf9a752baffd1.tar.gz |
Clean up in `javascripttypemaps.swg`.
- following the same layout/order as pytypemaps
- added typemaps for `long long` and `unsigned long long`, which are
only copies of those for `long` and `unsigned long` and hence are
just experimental.
Diffstat (limited to 'Lib/javascript')
-rw-r--r-- | Lib/javascript/jsc/javascriptfragments.swg | 23 | ||||
-rw-r--r-- | Lib/javascript/jsc/javascriptprimtypes.swg (renamed from Lib/javascript/jsc/javascriptprimitives.swg) | 96 | ||||
-rw-r--r-- | Lib/javascript/jsc/javascripttypemaps.swg | 41 | ||||
-rw-r--r-- | Lib/javascript/v8/javascriptfragments.swg | 23 | ||||
-rw-r--r-- | Lib/javascript/v8/javascriptprimtypes.swg (renamed from Lib/javascript/v8/javascriptprimitives.swg) | 114 | ||||
-rw-r--r-- | Lib/javascript/v8/javascripttypemaps.swg | 43 |
6 files changed, 287 insertions, 53 deletions
diff --git a/Lib/javascript/jsc/javascriptfragments.swg b/Lib/javascript/jsc/javascriptfragments.swg new file mode 100644 index 000000000..4778bf033 --- /dev/null +++ b/Lib/javascript/jsc/javascriptfragments.swg @@ -0,0 +1,23 @@ +/* + + Create a file with this name, 'javascriptfragments.swg', in your working + directory and add all the %fragments you want to take precedence + over the default ones defined by swig. + + For example, if you add: + + %fragment(SWIG_AsVal_frag(int),"header") { + SWIGINTERNINLINE int + SWIG_AsVal(int)(PyObject *obj, int *val) + { + <your code here>; + } + } + + this will replace the code used to retrieve an integer value for all + the typemaps that need it, including: + + int, std::vector<int>, std::list<std::pair<int,int> >, etc. + + +*/ diff --git a/Lib/javascript/jsc/javascriptprimitives.swg b/Lib/javascript/jsc/javascriptprimtypes.swg index f61e83272..2c23cc07f 100644 --- a/Lib/javascript/jsc/javascriptprimitives.swg +++ b/Lib/javascript/jsc/javascriptprimtypes.swg @@ -1,5 +1,11 @@ +/* ------------------------------------------------------------ + * Primitive Types + * ------------------------------------------------------------ */ + +/* boolean */ + %fragment(SWIG_From_frag(bool),"header") { -SWIGINTERNINLINE +SWIGINTERNINLINE JSValueRef SWIG_From_dec(bool)(bool value) { return JSValueMakeBoolean(context, value); @@ -19,6 +25,8 @@ int SWIG_AsVal_dec(bool)(JSValueRef obj, bool *val) } } +/* int */ + %fragment(SWIG_From_frag(int),"header") { SWIGINTERNINLINE JSValueRef SWIG_From_dec(int)(int value) @@ -27,9 +35,11 @@ SWIGINTERNINLINE JSValueRef } } +/* long */ + %fragment(SWIG_From_frag(long),"header") { SWIGINTERNINLINE JSValueRef - SWIG_From_dec(long)(long value) +SWIG_From_dec(long)(long value) { return JSValueMakeNumber(context, value); } @@ -44,7 +54,7 @@ SWIG_AsVal_dec(long)(JSValueRef obj, long* val) return SWIG_TypeError; } if(val) *val = (long) JSValueToNumber(context, obj, NULL); - + return SWIG_OK; } } @@ -53,35 +63,97 @@ SWIG_AsVal_dec(long)(JSValueRef obj, long* val) %fragment(SWIG_From_frag(unsigned long),"header", fragment=SWIG_From_frag(long)) { -SWIGINTERNINLINE JSValueRef +SWIGINTERNINLINE JSValueRef SWIG_From_dec(unsigned long)(unsigned long value) { return (value > LONG_MAX) ? - JSValueMakeNumber(context, value) : JSValueMakeNumber(context, %numeric_cast(value,long)); + JSValueMakeNumber(context, value) : JSValueMakeNumber(context, %numeric_cast(value,long)); } } %fragment(SWIG_AsVal_frag(unsigned long),"header", fragment="SWIG_CanCastAsInteger") { SWIGINTERN int -SWIG_AsVal_dec(unsigned long)(JSValueRef obj, unsigned long *val) +SWIG_AsVal_dec(unsigned long)(JSValueRef obj, unsigned long *val) { if(!JSValueIsNumber(context, obj)) { return SWIG_TypeError; } - + long longVal = (long) JSValueToNumber(context, obj, NULL); - + + if(longVal < 0) { + return SWIG_OverflowError; + } + + if(val) *val = longVal; + + return SWIG_OK; +} +} + +/* long long */ +// Note: these are copied from 'long' and probably need fixing + +%fragment(SWIG_From_frag(long long),"header") { +SWIGINTERNINLINE JSValueRef +SWIG_From_dec(long long)(long long value) +{ + return JSValueMakeNumber(context, value); +} +} + +%fragment(SWIG_AsVal_frag(long long),"header", + fragment="SWIG_CanCastAsInteger") { +SWIGINTERN int +SWIG_AsVal_dec(long long)(JSValueRef obj, long long* val) +{ + if (!JSValueIsNumber(context, obj)) { + return SWIG_TypeError; + } + if(val) *val = (long long) JSValueToNumber(context, obj, NULL); + + return SWIG_OK; +} +} + +/* unsigned long long */ +// Note: these are copied from 'unsigned long' and probably need fixing + +%fragment(SWIG_From_frag(unsigned long long),"header", + fragment=SWIG_From_frag(long long), + fragment="<limits.h>") { +SWIGINTERN JSValueRef +SWIG_From_dec(unsigned long long)(unsigned long long value) +{ + return (value > LONG_MAX) ? + JSValueMakeNumber(context, value) : JSValueMakeNumber(context, %numeric_cast(value,long)); +} +} + +%fragment(SWIG_AsVal_frag(unsigned long long),"header", + fragment="SWIG_CanCastAsInteger") { +SWIGINTERN int +SWIG_AsVal_dec(unsigned long long)(JSValueRef obj, unsigned long long *val) +{ + if(!JSValueIsNumber(context, obj)) { + return SWIG_TypeError; + } + + long long longVal = (unsigned long long) JSValueToNumber(context, obj, NULL); + if(longVal < 0) { return SWIG_OverflowError; } - - if(val) *val = longVal; - + + if(val) *val = longVal; + return SWIG_OK; } } +/* double */ + %fragment(SWIG_From_frag(double),"header") { SWIGINTERN JSValueRef SWIG_From_dec(double) (double val) @@ -98,7 +170,7 @@ SWIG_AsVal_dec(double)(JSValueRef obj, double *val) return SWIG_TypeError; } if(val) *val = JSValueToNumber(context, obj, NULL); - + return SWIG_OK; } } diff --git a/Lib/javascript/jsc/javascripttypemaps.swg b/Lib/javascript/jsc/javascripttypemaps.swg index 9bde8eb2a..aa0a829f9 100644 --- a/Lib/javascript/jsc/javascripttypemaps.swg +++ b/Lib/javascript/jsc/javascripttypemaps.swg @@ -1,21 +1,46 @@ +/* ------------------------------------------------------------ + * Typemap specializations for Javascript + * ------------------------------------------------------------ */ +/* ------------------------------------------------------------ + * Fragment section + * ------------------------------------------------------------ */ + +/* These macros are necessary to provide an extra parameter + to SWIG_AsVal_dec functions (JSContextRef context). +*/ #define SWIG_FROM_DECL_ARGS SWIG_JSC_FROM_DECL_ARGS #define SWIG_FROM_CALL_ARGS SWIG_JSC_FROM_CALL_ARGS #define SWIG_AS_DECL_ARGS SWIG_JSC_AS_DECL_ARGS #define SWIG_AS_CALL_ARGS SWIG_JSC_AS_CALL_ARGS -#define SWIG_Object JSValueRef -#define VOID_Object JSValueMakeUndefined(context) -#define SWIG_AppendOutput(result, obj) -#define SWIG_SetConstant(name, obj) -#define SWIG_Raise(obj, type, desc) SWIG_Javascript_Raise(context, exception, type) /* Include fundamental fragemt definitions */ %include <typemaps/fragments.swg> -/* Python fragments for fundamental types */ -%include <javascriptprimitives.swg> - +/* Look for user fragments file. */ +%include <javascriptfragments.swg> + +/* Javascript fragments for fundamental types */ +%include <javascriptprimtypes.swg> + +/* Javascript fragments for char* strings */ %include <javascriptstrings.swg> +/* ------------------------------------------------------------ + * Unified typemap section + * ------------------------------------------------------------ */ + +#define SWIG_Object JSValueRef +#define VOID_Object JSValueMakeUndefined(context) + +/* append output */ +#define SWIG_AppendOutput(result, obj) + +/* set constant */ +#define SWIG_SetConstant(name, obj) + +/* raise */ +#define SWIG_Raise(obj, type, desc) SWIG_Javascript_Raise(context, exception, type) + /* Include the unified typemap library */ %include <typemaps/swigtypemaps.swg> diff --git a/Lib/javascript/v8/javascriptfragments.swg b/Lib/javascript/v8/javascriptfragments.swg new file mode 100644 index 000000000..4778bf033 --- /dev/null +++ b/Lib/javascript/v8/javascriptfragments.swg @@ -0,0 +1,23 @@ +/* + + Create a file with this name, 'javascriptfragments.swg', in your working + directory and add all the %fragments you want to take precedence + over the default ones defined by swig. + + For example, if you add: + + %fragment(SWIG_AsVal_frag(int),"header") { + SWIGINTERNINLINE int + SWIG_AsVal(int)(PyObject *obj, int *val) + { + <your code here>; + } + } + + this will replace the code used to retrieve an integer value for all + the typemaps that need it, including: + + int, std::vector<int>, std::list<std::pair<int,int> >, etc. + + +*/ diff --git a/Lib/javascript/v8/javascriptprimitives.swg b/Lib/javascript/v8/javascriptprimtypes.swg index f34bbb75a..5e0187460 100644 --- a/Lib/javascript/v8/javascriptprimitives.swg +++ b/Lib/javascript/v8/javascriptprimtypes.swg @@ -1,6 +1,12 @@ +/* ------------------------------------------------------------ + * Primitive Types + * ------------------------------------------------------------ */ + +/* boolean */ + %fragment(SWIG_From_frag(bool),"header") { -SWIGINTERNINLINE -v8::Handle<v8::Value> +SWIGINTERNINLINE +v8::Handle<v8::Value> SWIG_From_dec(bool)(bool value) { return v8::Boolean::New(value); @@ -15,12 +21,14 @@ int SWIG_AsVal_dec(bool)(v8::Handle<v8::Value> obj, bool *val) if(!obj->IsBoolean()) { return SWIG_ERROR; } - + if (val) *val = obj->BooleanValue(); return SWIG_OK; } } +/* int */ + %fragment(SWIG_From_frag(int),"header") { SWIGINTERNINLINE v8::Handle<v8::Value> SWIG_From_dec(int)(int value) @@ -30,18 +38,19 @@ v8::Handle<v8::Value> SWIG_From_dec(int)(int value) } %fragment(SWIG_AsVal_frag(int),"header") { -SWIGINTERN +SWIGINTERN int SWIG_AsVal_dec(int)(v8::Handle<v8::Value> valRef, int* val) { if (!valRef->IsNumber()) { return SWIG_TypeError; } if(val) *val = valRef->IntegerValue(); - + return SWIG_OK; } } +/* long */ %fragment(SWIG_From_frag(long),"header") { SWIGINTERNINLINE @@ -53,14 +62,14 @@ v8::Handle<v8::Value> SWIG_From_dec(long)(long value) %fragment(SWIG_AsVal_frag(long),"header", fragment="SWIG_CanCastAsInteger") { -SWIGINTERN +SWIGINTERN int SWIG_AsVal_dec(long)(v8::Handle<v8::Value> obj, long* val) { if (!obj->IsNumber()) { return SWIG_TypeError; } if(val) *val = (long) obj->IntegerValue(); - + return SWIG_OK; } } @@ -69,37 +78,98 @@ int SWIG_AsVal_dec(long)(v8::Handle<v8::Value> obj, long* val) %fragment(SWIG_From_frag(unsigned long),"header", fragment=SWIG_From_frag(long)) { -SWIGINTERNINLINE +SWIGINTERNINLINE v8::Handle<v8::Value> SWIG_From_dec(unsigned long)(unsigned long value) { return (value > LONG_MAX) ? - v8::Integer::NewFromUnsigned(value) : v8::Integer::New(%numeric_cast(value,long)); + v8::Integer::NewFromUnsigned(value) : v8::Integer::New(%numeric_cast(value,long)); } } %fragment(SWIG_AsVal_frag(unsigned long),"header", fragment="SWIG_CanCastAsInteger") { -SWIGINTERN -int SWIG_AsVal_dec(unsigned long)(v8::Handle<v8::Value> obj, unsigned long *val) +SWIGINTERN +int SWIG_AsVal_dec(unsigned long)(v8::Handle<v8::Value> obj, unsigned long *val) { if(!obj->IsNumber()) { return SWIG_TypeError; } - + long longVal = (long) obj->NumberValue(); - + + if(longVal < 0) { + return SWIG_OverflowError; + } + + if(val) *val = longVal; + + return SWIG_OK; +} +} + +/* long long */ +// Note: these are copied from 'long' and probably need fixing + +%fragment(SWIG_From_frag(long long),"header") { +SWIGINTERNINLINE +v8::Handle<v8::Value> SWIG_From_dec(long long)(long long value) +{ + return v8::Number::New(value); +} +} + +%fragment(SWIG_AsVal_frag(long long),"header", + fragment="SWIG_CanCastAsInteger") { +SWIGINTERN +int SWIG_AsVal_dec(long)(v8::Handle<v8::Value> obj, long long* val) +{ + if (!obj->IsNumber()) { + return SWIG_TypeError; + } + if(val) *val = (long long) obj->IntegerValue(); + + return SWIG_OK; +} +} + +/* unsigned long long */ +// Note: these are copied from 'unsigned long' and probably need fixing + +%fragment(SWIG_From_frag(unsigned long long),"header", + fragment=SWIG_From_frag(long long)) { +SWIGINTERNINLINE +v8::Handle<v8::Value> SWIG_From_dec(unsigned long long)(unsigned long long value) +{ + return (value > LONG_MAX) ? + v8::Integer::NewFromUnsigned(value) : v8::Integer::New(%numeric_cast(value,long)); +} +} + +%fragment(SWIG_AsVal_frag(unsigned long long),"header", + fragment="SWIG_CanCastAsInteger") { +SWIGINTERN +int SWIG_AsVal_dec(unsigned long)(v8::Handle<v8::Value> obj, unsigned long long *val) +{ + if(!obj->IsNumber()) { + return SWIG_TypeError; + } + + long long longVal = (long long) obj->NumberValue(); + if(longVal < 0) { return SWIG_OverflowError; } - - if(val) *val = longVal; - + + if(val) *val = longVal; + return SWIG_OK; } } +/* double */ + %fragment(SWIG_From_frag(double),"header") { -SWIGINTERN +SWIGINTERN v8::Handle<v8::Value> SWIG_From_dec(double) (double val) { return v8::Number::New(val); @@ -107,21 +177,15 @@ v8::Handle<v8::Value> SWIG_From_dec(double) (double val) } %fragment(SWIG_AsVal_frag(double),"header") { -SWIGINTERN +SWIGINTERN int SWIG_AsVal_dec(double)(v8::Handle<v8::Value> obj, double *val) { if(!obj->IsNumber()) { return SWIG_TypeError; } if(val) *val = obj->NumberValue(); - + return SWIG_OK; } } -%typemap(in) char * -%{ - v8::String::Utf8Value _$1($input); - $1 = *_$1; -%} - diff --git a/Lib/javascript/v8/javascripttypemaps.swg b/Lib/javascript/v8/javascripttypemaps.swg index 479a1f076..b12e5c899 100644 --- a/Lib/javascript/v8/javascripttypemaps.swg +++ b/Lib/javascript/v8/javascripttypemaps.swg @@ -1,16 +1,43 @@ -#define SWIG_Object v8::Handle<v8::Value> -#define VOID_Object v8::Undefined() -#define SWIG_AppendOutput(result, obj) -#define SWIG_SetConstant(name, obj) -#define SWIG_Raise(obj, type, desc) SWIG_V8_Raise(type) +/* ------------------------------------------------------------ + * Typemap specializations for Javascript + * ------------------------------------------------------------ */ + +/* ------------------------------------------------------------ + * Fragment section + * ------------------------------------------------------------ */ /* Include fundamental fragemt definitions */ %include <typemaps/fragments.swg> -/* Python fragments for fundamental types */ -%include <javascriptprimitives.swg> - +/* Look for user fragments file. */ +%include <javascriptfragments.swg> + +/* Javascript fragments for fundamental types */ +%include <javascriptprimtypes.swg> + +/* Javascript fragments for char* strings */ %include <javascriptstrings.swg> + +/* ------------------------------------------------------------ + * Unified typemap section + * ------------------------------------------------------------ */ + +/* Javascript types */ + +#define SWIG_Object v8::Handle<v8::Value> +#define VOID_Object v8::Undefined() + +/* Overload of the output/constant/exception/dirout handling */ + +/* append output */ +#define SWIG_AppendOutput(result, obj) + +/* set constant */ +#define SWIG_SetConstant(name, obj) + +/* raise */ +#define SWIG_Raise(obj, type, desc) SWIG_V8_Raise(type) + /* Include the unified typemap library */ %include <typemaps/swigtypemaps.swg> |