Merge branch 'master' into directorargout_and_java_typemaps
This commit is contained in:
commit
3e449ea05f
68 changed files with 2861 additions and 2151 deletions
|
|
@ -78,4 +78,7 @@ extern "C" {
|
|||
#define SWIG_WARN_NODE_END(Node) \
|
||||
if (wrnfilter) Swig_warnfilter(wrnfilter,0); \
|
||||
}
|
||||
|
||||
#define COMPOUND_EXPR_VAL(dtype) \
|
||||
((dtype).type == T_CHAR || (dtype).type == T_WCHAR ? (dtype).rawval : (dtype).val)
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -5828,7 +5828,7 @@ definetype : { /* scanner_check_typedef(); */ } expr {
|
|||
if ($$.type == T_STRING) {
|
||||
$$.rawval = NewStringf("\"%(escape)s\"",$$.val);
|
||||
} else if ($$.type != T_CHAR && $$.type != T_WSTRING && $$.type != T_WCHAR) {
|
||||
$$.rawval = 0;
|
||||
$$.rawval = NewStringf("%s", $$.val);
|
||||
}
|
||||
$$.qualifier = 0;
|
||||
$$.bitfield = 0;
|
||||
|
|
@ -6095,81 +6095,81 @@ exprnum : NUM_INT { $$ = $1; }
|
|||
;
|
||||
|
||||
exprcompound : expr PLUS expr {
|
||||
$$.val = NewStringf("%s+%s",$1.val,$3.val);
|
||||
$$.val = NewStringf("%s+%s", COMPOUND_EXPR_VAL($1),COMPOUND_EXPR_VAL($3));
|
||||
$$.type = promote($1.type,$3.type);
|
||||
}
|
||||
| expr MINUS expr {
|
||||
$$.val = NewStringf("%s-%s",$1.val,$3.val);
|
||||
$$.val = NewStringf("%s-%s",COMPOUND_EXPR_VAL($1),COMPOUND_EXPR_VAL($3));
|
||||
$$.type = promote($1.type,$3.type);
|
||||
}
|
||||
| expr STAR expr {
|
||||
$$.val = NewStringf("%s*%s",$1.val,$3.val);
|
||||
$$.val = NewStringf("%s*%s",COMPOUND_EXPR_VAL($1),COMPOUND_EXPR_VAL($3));
|
||||
$$.type = promote($1.type,$3.type);
|
||||
}
|
||||
| expr SLASH expr {
|
||||
$$.val = NewStringf("%s/%s",$1.val,$3.val);
|
||||
$$.val = NewStringf("%s/%s",COMPOUND_EXPR_VAL($1),COMPOUND_EXPR_VAL($3));
|
||||
$$.type = promote($1.type,$3.type);
|
||||
}
|
||||
| expr MODULO expr {
|
||||
$$.val = NewStringf("%s%%%s",$1.val,$3.val);
|
||||
$$.val = NewStringf("%s%%%s",COMPOUND_EXPR_VAL($1),COMPOUND_EXPR_VAL($3));
|
||||
$$.type = promote($1.type,$3.type);
|
||||
}
|
||||
| expr AND expr {
|
||||
$$.val = NewStringf("%s&%s",$1.val,$3.val);
|
||||
$$.val = NewStringf("%s&%s",COMPOUND_EXPR_VAL($1),COMPOUND_EXPR_VAL($3));
|
||||
$$.type = promote($1.type,$3.type);
|
||||
}
|
||||
| expr OR expr {
|
||||
$$.val = NewStringf("%s|%s",$1.val,$3.val);
|
||||
$$.val = NewStringf("%s|%s",COMPOUND_EXPR_VAL($1),COMPOUND_EXPR_VAL($3));
|
||||
$$.type = promote($1.type,$3.type);
|
||||
}
|
||||
| expr XOR expr {
|
||||
$$.val = NewStringf("%s^%s",$1.val,$3.val);
|
||||
$$.val = NewStringf("%s^%s",COMPOUND_EXPR_VAL($1),COMPOUND_EXPR_VAL($3));
|
||||
$$.type = promote($1.type,$3.type);
|
||||
}
|
||||
| expr LSHIFT expr {
|
||||
$$.val = NewStringf("%s << %s",$1.val,$3.val);
|
||||
$$.val = NewStringf("%s << %s",COMPOUND_EXPR_VAL($1),COMPOUND_EXPR_VAL($3));
|
||||
$$.type = promote_type($1.type);
|
||||
}
|
||||
| expr RSHIFT expr {
|
||||
$$.val = NewStringf("%s >> %s",$1.val,$3.val);
|
||||
$$.val = NewStringf("%s >> %s",COMPOUND_EXPR_VAL($1),COMPOUND_EXPR_VAL($3));
|
||||
$$.type = promote_type($1.type);
|
||||
}
|
||||
| expr LAND expr {
|
||||
$$.val = NewStringf("%s&&%s",$1.val,$3.val);
|
||||
$$.val = NewStringf("%s&&%s",COMPOUND_EXPR_VAL($1),COMPOUND_EXPR_VAL($3));
|
||||
$$.type = cparse_cplusplus ? T_BOOL : T_INT;
|
||||
}
|
||||
| expr LOR expr {
|
||||
$$.val = NewStringf("%s||%s",$1.val,$3.val);
|
||||
$$.val = NewStringf("%s||%s",COMPOUND_EXPR_VAL($1),COMPOUND_EXPR_VAL($3));
|
||||
$$.type = cparse_cplusplus ? T_BOOL : T_INT;
|
||||
}
|
||||
| expr EQUALTO expr {
|
||||
$$.val = NewStringf("%s==%s",$1.val,$3.val);
|
||||
$$.val = NewStringf("%s==%s",COMPOUND_EXPR_VAL($1),COMPOUND_EXPR_VAL($3));
|
||||
$$.type = cparse_cplusplus ? T_BOOL : T_INT;
|
||||
}
|
||||
| expr NOTEQUALTO expr {
|
||||
$$.val = NewStringf("%s!=%s",$1.val,$3.val);
|
||||
$$.val = NewStringf("%s!=%s",COMPOUND_EXPR_VAL($1),COMPOUND_EXPR_VAL($3));
|
||||
$$.type = cparse_cplusplus ? T_BOOL : T_INT;
|
||||
}
|
||||
/* Sadly this causes 2 reduce-reduce conflicts with templates. FIXME resolve these.
|
||||
| expr GREATERTHAN expr {
|
||||
$$.val = NewStringf("%s > %s", $1.val, $3.val);
|
||||
$$.val = NewStringf("%s > %s", COMPOUND_EXPR_VAL($1), COMPOUND_EXPR_VAL($3));
|
||||
$$.type = cparse_cplusplus ? T_BOOL : T_INT;
|
||||
}
|
||||
| expr LESSTHAN expr {
|
||||
$$.val = NewStringf("%s < %s", $1.val, $3.val);
|
||||
$$.val = NewStringf("%s < %s", COMPOUND_EXPR_VAL($1), COMPOUND_EXPR_VAL($3));
|
||||
$$.type = cparse_cplusplus ? T_BOOL : T_INT;
|
||||
}
|
||||
*/
|
||||
| expr GREATERTHANOREQUALTO expr {
|
||||
$$.val = NewStringf("%s >= %s", $1.val, $3.val);
|
||||
$$.val = NewStringf("%s >= %s", COMPOUND_EXPR_VAL($1), COMPOUND_EXPR_VAL($3));
|
||||
$$.type = cparse_cplusplus ? T_BOOL : T_INT;
|
||||
}
|
||||
| expr LESSTHANOREQUALTO expr {
|
||||
$$.val = NewStringf("%s <= %s", $1.val, $3.val);
|
||||
$$.val = NewStringf("%s <= %s", COMPOUND_EXPR_VAL($1), COMPOUND_EXPR_VAL($3));
|
||||
$$.type = cparse_cplusplus ? T_BOOL : T_INT;
|
||||
}
|
||||
| expr QUESTIONMARK expr COLON expr %prec QUESTIONMARK {
|
||||
$$.val = NewStringf("%s?%s:%s", $1.val, $3.val, $5.val);
|
||||
$$.val = NewStringf("%s?%s:%s", COMPOUND_EXPR_VAL($1), COMPOUND_EXPR_VAL($3), COMPOUND_EXPR_VAL($5));
|
||||
/* This may not be exactly right, but is probably good enough
|
||||
* for the purposes of parsing constant expressions. */
|
||||
$$.type = promote($3.type, $5.type);
|
||||
|
|
@ -6187,7 +6187,7 @@ exprcompound : expr PLUS expr {
|
|||
$$.type = $2.type;
|
||||
}
|
||||
| LNOT expr {
|
||||
$$.val = NewStringf("!%s",$2.val);
|
||||
$$.val = NewStringf("!%s",COMPOUND_EXPR_VAL($2));
|
||||
$$.type = T_INT;
|
||||
}
|
||||
| type LPAREN {
|
||||
|
|
|
|||
|
|
@ -2809,29 +2809,39 @@ private:
|
|||
String *get = NewString("");
|
||||
Printv(get, Swig_cresult_name(), " = ", NULL);
|
||||
|
||||
char quote;
|
||||
if (Getattr(n, "wrappedasconstant")) {
|
||||
quote = '\0';
|
||||
} else if (SwigType_type(type) == T_CHAR) {
|
||||
quote = '\'';
|
||||
} else if (SwigType_type(type) == T_STRING) {
|
||||
Printv(get, "(char *)", NULL);
|
||||
quote = '"';
|
||||
String *rawval = Getattr(n, "rawval");
|
||||
if (rawval && Len(rawval)) {
|
||||
if (SwigType_type(type) == T_STRING) {
|
||||
Printv(get, "(char *)", NULL);
|
||||
}
|
||||
|
||||
Printv(get, rawval, NULL);
|
||||
} else {
|
||||
quote = '\0';
|
||||
}
|
||||
char quote;
|
||||
if (Getattr(n, "wrappedasconstant")) {
|
||||
quote = '\0';
|
||||
} else if (SwigType_type(type) == T_CHAR) {
|
||||
quote = '\'';
|
||||
} else if (SwigType_type(type) == T_STRING) {
|
||||
Printv(get, "(char *)", NULL);
|
||||
quote = '"';
|
||||
} else {
|
||||
quote = '\0';
|
||||
}
|
||||
|
||||
if (quote != '\0') {
|
||||
Printf(get, "%c", quote);
|
||||
}
|
||||
if (quote != '\0') {
|
||||
Printf(get, "%c", quote);
|
||||
}
|
||||
|
||||
Printv(get, Getattr(n, "value"), NULL);
|
||||
Printv(get, Getattr(n, "value"), NULL);
|
||||
|
||||
if (quote != '\0') {
|
||||
Printf(get, "%c", quote);
|
||||
if (quote != '\0') {
|
||||
Printf(get, "%c", quote);
|
||||
}
|
||||
}
|
||||
|
||||
Printv(get, ";\n", NULL);
|
||||
|
||||
Setattr(n, "wrap:action", get);
|
||||
|
||||
String *sname = Copy(symname);
|
||||
|
|
|
|||
|
|
@ -3339,6 +3339,8 @@ public:
|
|||
Printf(builtin_closures_code, "%s /* defines %s */\n\n", closure_decl, closure_name);
|
||||
SetFlag(builtin_closures, closure_name);
|
||||
Delete(closure_decl);
|
||||
} else {
|
||||
closure_name = Copy(wrapper_name);
|
||||
}
|
||||
if (func_type) {
|
||||
String *s = NewStringf("(%s) %s", func_type, closure_name);
|
||||
|
|
@ -3923,8 +3925,14 @@ public:
|
|||
String *pmname = SwigType_manglestr(pname);
|
||||
String *templ = NewStringf("SwigPyBuiltin_%s", mname);
|
||||
int funpack = modernargs && fastunpack;
|
||||
static String *tp_new = NewString("PyType_GenericNew");
|
||||
|
||||
Printv(f_init, " SwigPyBuiltin_SetMetaType(builtin_pytype, metatype);\n", NIL);
|
||||
|
||||
// We can’t statically initialize a structure member with a function defined in another C module
|
||||
// So this is done in the initialization function instead, see https://docs.python.org/2/extending/newtypes.html
|
||||
Printf(f_init, " builtin_pytype->tp_new = %s;\n", getSlot(n, "feature:python:tp_new", tp_new));
|
||||
|
||||
Printv(f_init, " builtin_base_count = 0;\n", NIL);
|
||||
List *baselist = Getattr(n, "bases");
|
||||
if (baselist) {
|
||||
|
|
@ -4062,7 +4070,6 @@ public:
|
|||
|
||||
static String *tp_basicsize = NewStringf("sizeof(SwigPyObject)");
|
||||
static String *tp_dictoffset_default = NewString("offsetof(SwigPyObject, dict)");
|
||||
static String *tp_new = NewString("PyType_GenericNew");
|
||||
static String *tp_hash = NewString("SwigPyObject_hash");
|
||||
String *tp_as_number = NewStringf("&%s_type.as_number", templ);
|
||||
String *tp_as_sequence = NewStringf("&%s_type.as_sequence", templ);
|
||||
|
|
@ -4123,7 +4130,7 @@ public:
|
|||
printSlot(f, getSlot(n, "feature:python:tp_dictoffset", tp_dictoffset_default), "tp_dictoffset", "Py_ssize_t");
|
||||
printSlot(f, getSlot(n, "feature:python:tp_init", tp_init), "tp_init", "initproc");
|
||||
printSlot(f, getSlot(n, "feature:python:tp_alloc"), "tp_alloc", "allocfunc");
|
||||
printSlot(f, getSlot(n, "feature:python:tp_new", tp_new), "tp_new", "newfunc");
|
||||
printSlot(f, getSlot(), "tp_new", "newfunc");
|
||||
printSlot(f, getSlot(n, "feature:python:tp_free"), "tp_free", "freefunc");
|
||||
printSlot(f, getSlot(n, "feature:python:tp_is_gc"), "tp_is_gc", "inquiry");
|
||||
printSlot(f, getSlot(n, "feature:python:tp_bases"), "tp_bases", "PyObject *");
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue