make ExternalReference slot ref to contain reference
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@13721 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
b9570501aa
commit
33bb317b61
3 changed files with 126 additions and 42 deletions
|
|
@ -4,4 +4,8 @@ See the RELEASENOTES file for a summary of changes in each release.
|
||||||
|
|
||||||
Version 2.0.9 (in progress)
|
Version 2.0.9 (in progress)
|
||||||
===========================
|
===========================
|
||||||
|
2012-08-26: drjoe
|
||||||
|
[R] make ExternalReference slot ref to contain reference
|
||||||
|
|
||||||
|
2012-08-26: drjoe
|
||||||
|
[R] fix Examples/Makefile to use C in $(CC) rather than $(CXX)
|
||||||
|
|
|
||||||
162
Lib/r/rtype.swg
162
Lib/r/rtype.swg
|
|
@ -4,24 +4,9 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
%typemap("rtype") int, int *, int & "integer";
|
%typemap("rtype") int, int *, int & "integer";
|
||||||
%apply int {size_t}
|
|
||||||
%apply int {std::size_t}
|
|
||||||
%apply int {ptrdiff_t}
|
|
||||||
%apply int {std::ptrdiff_t}
|
|
||||||
%apply int {signed int}
|
|
||||||
%apply int {unsigned int}
|
|
||||||
%apply int {short}
|
|
||||||
%apply int {unsigned short}
|
|
||||||
|
|
||||||
%typemap("rtype") long, long *, long & "integer";
|
%typemap("rtype") long, long *, long & "integer";
|
||||||
%apply long {long long}
|
%typemap("rtype") float, float*, float & "numeric";
|
||||||
%apply long {signed long long}
|
|
||||||
%apply long {unsigned long long}
|
|
||||||
%apply long {signed long}
|
|
||||||
%apply long {unsigned long}
|
|
||||||
|
|
||||||
%typemap("rtype") double, double*, double & "numeric";
|
%typemap("rtype") double, double*, double & "numeric";
|
||||||
%typemap("rtype") float, float *, float & "numeric";
|
|
||||||
%typemap("rtype") char *, char ** "character";
|
%typemap("rtype") char *, char ** "character";
|
||||||
%typemap("rtype") char "character";
|
%typemap("rtype") char "character";
|
||||||
%typemap("rtype") string, string *, string & "character";
|
%typemap("rtype") string, string *, string & "character";
|
||||||
|
|
@ -36,16 +21,15 @@
|
||||||
%typemap("rtype") SWIGTYPE & "$R_class";
|
%typemap("rtype") SWIGTYPE & "$R_class";
|
||||||
%typemap("rtype") SWIGTYPE "$&R_class";
|
%typemap("rtype") SWIGTYPE "$&R_class";
|
||||||
|
|
||||||
%typemap("rtypecheck") int, int &, long, long &,
|
%typemap("rtypecheck") int, int &, long, long &
|
||||||
unsigned char, unsigned char &
|
|
||||||
%{ (is.integer($arg) || is.numeric($arg)) && length($arg) == 1 %}
|
%{ (is.integer($arg) || is.numeric($arg)) && length($arg) == 1 %}
|
||||||
%typemap("rtypecheck") int *, long *, unsigned char *
|
%typemap("rtypecheck") int *, long *
|
||||||
%{ is.integer($arg) || is.numeric($arg) %}
|
%{ is.integer($arg) || is.numeric($arg) %}
|
||||||
|
|
||||||
|
|
||||||
%typemap("rtypecheck") double, double &, float, float &
|
%typemap("rtypecheck") float, double
|
||||||
%{ is.numeric($arg) && length($arg) == 1 %}
|
%{ is.numeric($arg) && length($arg) == 1 %}
|
||||||
%typemap("rtypecheck") double*, float *
|
%typemap("rtypecheck") float *, double *
|
||||||
%{ is.numeric($arg) %}
|
%{ is.numeric($arg) %}
|
||||||
|
|
||||||
%typemap("rtypecheck") bool, bool &
|
%typemap("rtypecheck") bool, bool &
|
||||||
|
|
@ -88,9 +72,8 @@
|
||||||
%{ $input = as.integer($input); %}
|
%{ $input = as.integer($input); %}
|
||||||
%typemap(scoercein) long, long *, long &
|
%typemap(scoercein) long, long *, long &
|
||||||
%{ $input = as.integer($input); %}
|
%{ $input = as.integer($input); %}
|
||||||
%typemap(scoercein) double, double *, double &
|
%typemap(scoercein) float, float*, float &,
|
||||||
%{ %}
|
double, double *, double &
|
||||||
%typemap(scoercein) float, float *, float &
|
|
||||||
%{ %}
|
%{ %}
|
||||||
%typemap(scoercein) char, char *, char &
|
%typemap(scoercein) char, char *, char &
|
||||||
%{ $input = as($input, "character"); %}
|
%{ $input = as($input, "character"); %}
|
||||||
|
|
@ -107,9 +90,8 @@
|
||||||
%typemap(scoercein) enum SWIGTYPE *const
|
%typemap(scoercein) enum SWIGTYPE *const
|
||||||
%{ $input = enumToInteger($input, "$R_class"); %}
|
%{ $input = enumToInteger($input, "$R_class"); %}
|
||||||
|
|
||||||
|
|
||||||
%typemap(scoercein) SWIGTYPE, SWIGTYPE *, SWIGTYPE *const, SWIGTYPE &
|
%typemap(scoercein) SWIGTYPE, SWIGTYPE *, SWIGTYPE *const, SWIGTYPE &
|
||||||
%{ %}
|
%{ $input = slot($input,"ref") %}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
%typemap(scoercein) SWIGTYPE *, SWIGTYPE *const
|
%typemap(scoercein) SWIGTYPE *, SWIGTYPE *const
|
||||||
|
|
@ -136,12 +118,10 @@
|
||||||
%typemap(scoercein) int,
|
%typemap(scoercein) int,
|
||||||
int *,
|
int *,
|
||||||
int &,
|
int &,
|
||||||
int[ANY],
|
|
||||||
long,
|
long,
|
||||||
long *,
|
long *,
|
||||||
long &,
|
long &
|
||||||
long[ANY]
|
"$input = as.integer($input);";
|
||||||
"$input = as.integer($input); ";
|
|
||||||
|
|
||||||
%typemap(scoercein) char *, string, std::string,
|
%typemap(scoercein) char *, string, std::string,
|
||||||
string &, std::string &
|
string &, std::string &
|
||||||
|
|
@ -159,27 +139,41 @@ string &, std::string &
|
||||||
%typemap(scoerceout) enum SWIGTYPE *const
|
%typemap(scoerceout) enum SWIGTYPE *const
|
||||||
%{ $result = enumToInteger($result, "$R_class"); %}
|
%{ $result = enumToInteger($result, "$R_class"); %}
|
||||||
|
|
||||||
|
#%typemap(scoerceout) SWIGTYPE
|
||||||
|
# %{ class($result) <- "$&R_class"; %}
|
||||||
|
|
||||||
%typemap(scoerceout) SWIGTYPE
|
#%typemap(scoerceout) SWIGTYPE &
|
||||||
%{ class($result) <- "$&R_class"; %}
|
# %{ class($result) <- "$R_class"; %}
|
||||||
|
|
||||||
%typemap(scoerceout) SWIGTYPE &
|
#%typemap(scoerceout) SWIGTYPE *
|
||||||
%{ class($result) <- "$R_class"; %}
|
# %{ class($result) <- "$R_class"; %}
|
||||||
|
|
||||||
%typemap(scoerceout) SWIGTYPE *
|
#%typemap(scoerceout) SWIGTYPE *const
|
||||||
%{ class($result) <- "$R_class"; %}
|
# %{ class($result) <- "$R_class"; %}
|
||||||
|
|
||||||
|
%typemap(scoerceout) SWIGTYPE
|
||||||
|
%{ $result <- new("$&R_class", ref=$result); %}
|
||||||
|
|
||||||
|
%typemap(scoerceout) SWIGTYPE &
|
||||||
|
%{ $result <- new("$R_class", ref=$result) ; %}
|
||||||
|
|
||||||
|
%typemap(scoerceout) SWIGTYPE *
|
||||||
|
%{ $result <- new("$R_class", ref=$result) ; %}
|
||||||
|
|
||||||
|
%typemap(scoerceout) SWIGTYPE *const
|
||||||
|
%{ $result <- new("$R_class", ref=$result) ; %}
|
||||||
|
|
||||||
%typemap(scoerceout) SWIGTYPE *const
|
|
||||||
%{ class($result) <- "$R_class"; %}
|
|
||||||
|
|
||||||
/* Override the SWIGTYPE * above. */
|
/* Override the SWIGTYPE * above. */
|
||||||
%typemap(scoerceout) char,
|
%typemap(scoerceout) char,
|
||||||
char *,
|
char *,
|
||||||
char &,
|
char &,
|
||||||
double,
|
|
||||||
double &,
|
|
||||||
float,
|
float,
|
||||||
|
double,
|
||||||
|
float*,
|
||||||
|
double*,
|
||||||
float &,
|
float &,
|
||||||
|
double &,
|
||||||
int,
|
int,
|
||||||
int &,
|
int &,
|
||||||
long,
|
long,
|
||||||
|
|
@ -208,10 +202,94 @@ string &, std::string &
|
||||||
signed long &,
|
signed long &,
|
||||||
unsigned long,
|
unsigned long,
|
||||||
unsigned long &,
|
unsigned long &,
|
||||||
unsigned char *,
|
signed char,
|
||||||
unsigned char &
|
signed char &,
|
||||||
|
unsigned char,
|
||||||
|
unsigned char &
|
||||||
%{ %}
|
%{ %}
|
||||||
|
|
||||||
|
%apply int {size_t,
|
||||||
|
std::size_t,
|
||||||
|
ptrdiff_t,
|
||||||
|
std::ptrdiff_t,
|
||||||
|
signed int,
|
||||||
|
unsigned int,
|
||||||
|
short,
|
||||||
|
unsigned short,
|
||||||
|
signed char,
|
||||||
|
unsigned char}
|
||||||
|
|
||||||
|
%apply int* {size_t[],
|
||||||
|
std::size_t[],
|
||||||
|
ptrdiff_t[],
|
||||||
|
std::ptrdiff_t[],
|
||||||
|
signed int[],
|
||||||
|
unsigned int[],
|
||||||
|
short[],
|
||||||
|
unsigned short[],
|
||||||
|
signed char[],
|
||||||
|
unsigned char[]}
|
||||||
|
|
||||||
|
%apply int* {size_t[ANY],
|
||||||
|
std::size_t[ANY],
|
||||||
|
ptrdiff_t[ANY],
|
||||||
|
std::ptrdiff_t[ANY],
|
||||||
|
signed int[ANY],
|
||||||
|
unsigned int[ANY],
|
||||||
|
short[ANY],
|
||||||
|
unsigned short[ANY],
|
||||||
|
signed char[ANY],
|
||||||
|
unsigned char[ANY]}
|
||||||
|
|
||||||
|
%apply int* {size_t*,
|
||||||
|
std::size_t*,
|
||||||
|
ptrdiff_t*,
|
||||||
|
std::ptrdiff_t*,
|
||||||
|
signed int*,
|
||||||
|
unsigned int*,
|
||||||
|
short*,
|
||||||
|
unsigned short*,
|
||||||
|
signed char*,
|
||||||
|
unsigned char*}
|
||||||
|
|
||||||
|
%apply long {
|
||||||
|
long long,
|
||||||
|
signed long long,
|
||||||
|
unsigned long long,
|
||||||
|
signed long,
|
||||||
|
unsigned long}
|
||||||
|
|
||||||
|
%apply long* {
|
||||||
|
long long*,
|
||||||
|
signed long long*,
|
||||||
|
unsigned long long*,
|
||||||
|
signed long*,
|
||||||
|
unsigned long*,
|
||||||
|
long long[],
|
||||||
|
signed long long[],
|
||||||
|
unsigned long long[],
|
||||||
|
signed long[],
|
||||||
|
unsigned long[],
|
||||||
|
long long[ANY],
|
||||||
|
signed long long[ANY],
|
||||||
|
unsigned long long[ANY],
|
||||||
|
signed long[ANY],
|
||||||
|
unsigned long[ANY]}
|
||||||
|
|
||||||
|
%apply float* {
|
||||||
|
float[],
|
||||||
|
float[ANY]
|
||||||
|
}
|
||||||
|
%apply double * {
|
||||||
|
double[],
|
||||||
|
double[ANY]
|
||||||
|
}
|
||||||
|
|
||||||
|
%apply bool* {
|
||||||
|
bool[],
|
||||||
|
bool[ANY]
|
||||||
|
}
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
Just examining the values for a SWIGTYPE.
|
Just examining the values for a SWIGTYPE.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1903,6 +1903,8 @@ int R::functionWrapper(Node *n) {
|
||||||
"\n};\n",
|
"\n};\n",
|
||||||
"if(is(", name, ", \"NativeSymbolInfo\")) {\n",
|
"if(is(", name, ", \"NativeSymbolInfo\")) {\n",
|
||||||
name, " = ", name, "$address", ";\n}\n",
|
name, " = ", name, "$address", ";\n}\n",
|
||||||
|
"if(is(", name, ", \"ExternalReference\")) {\n",
|
||||||
|
name, " = ", name, "@ref;\n}\n",
|
||||||
"}; \n",
|
"}; \n",
|
||||||
NIL);
|
NIL);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue