summaryrefslogtreecommitdiff
path: root/Lib/javascript
diff options
context:
space:
mode:
authorOliver Buchtala <oliver.buchtala@googlemail.com>2013-09-09 17:34:53 +0300
committerOliver Buchtala <oliver.buchtala@googlemail.com>2013-09-09 17:34:53 +0300
commit407d8ef5acff62578c701da74cfdf9a752baffd1 (patch)
tree821f2e8093f1b3fa847912fb664d0b86c672a15b /Lib/javascript
parentfc4d9b665c5839df06501e736163bfeadb7503d1 (diff)
downloadswig-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.swg23
-rw-r--r--Lib/javascript/jsc/javascriptprimtypes.swg (renamed from Lib/javascript/jsc/javascriptprimitives.swg)96
-rw-r--r--Lib/javascript/jsc/javascripttypemaps.swg41
-rw-r--r--Lib/javascript/v8/javascriptfragments.swg23
-rw-r--r--Lib/javascript/v8/javascriptprimtypes.swg (renamed from Lib/javascript/v8/javascriptprimitives.swg)114
-rw-r--r--Lib/javascript/v8/javascripttypemaps.swg43
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>