add fragment warning and fixes
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@8645 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
20ac2ec248
commit
ba1e3f9ee3
6 changed files with 43 additions and 16 deletions
|
|
@ -5,4 +5,6 @@ namespace std
|
|||
%callback(1) wflush;
|
||||
}
|
||||
|
||||
%include <std_basic_string.i>
|
||||
%include <std_wstring.i>
|
||||
%include <std/std_wiostream.i>
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@ namespace std {
|
|||
|
||||
%fragment(SWIG_Traits_frag(std::multimap<_Key, _Tp, _Compare, _Alloc >), "header",
|
||||
fragment=SWIG_Traits_frag(std::pair<_Key, _Tp >),
|
||||
fragment="StdMultiapTraits") {
|
||||
fragment="StdMultimapTraits") {
|
||||
namespace swig {
|
||||
template <> struct traits<std::multimap<_Key, _Tp, _Compare, _Alloc > > {
|
||||
typedef pointer_category category;
|
||||
|
|
|
|||
|
|
@ -158,6 +158,9 @@
|
|||
#define WARN_TYPEMAP_TYPECHECK_UNDEF 472
|
||||
#define WARN_TYPEMAP_DIRECTOROUT_PTR 473
|
||||
|
||||
/* -- Fragments -- */
|
||||
#define WARN_FRAGMENT_NOT_FOUND 490
|
||||
|
||||
/* -- General code generation -- */
|
||||
|
||||
#define WARN_LANG_OVERLOAD_DECL 501
|
||||
|
|
|
|||
|
|
@ -374,7 +374,11 @@ void emit_action(Node *n, Wrapper *f) {
|
|||
c = Char(t);
|
||||
tok = strtok(c,",");
|
||||
while (tok) {
|
||||
Swig_fragment_emit(tok);
|
||||
String *fname = NewString(tok);
|
||||
Setfile(fname, Getfile(n));
|
||||
Setline(fname, Getline(n));
|
||||
Swig_fragment_emit(fname);
|
||||
Delete(fname);
|
||||
tok = strtok(NULL,",");
|
||||
}
|
||||
Delete(t);
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ char cvsroot_fragment_c[] = "$Header$";
|
|||
|
||||
#include "swig.h"
|
||||
#include "swigkeys.h"
|
||||
#include "swigwarn.h"
|
||||
|
||||
static Hash *fragments = 0;
|
||||
static Hash *looking_fragments = 0;
|
||||
|
|
@ -89,7 +90,11 @@ Swig_fragment_emit(Node *n) {
|
|||
String *name = 0;
|
||||
String *type = 0;
|
||||
|
||||
if (!fragments) return;
|
||||
if (!fragments) {
|
||||
Swig_warning(WARN_FRAGMENT_NOT_FOUND, Getfile(n), Getline(n), "Fragment '%s' not found.\n", name);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
name = Getattr(n,k_value);
|
||||
if (!name) {
|
||||
|
|
@ -139,19 +144,24 @@ Swig_fragment_emit(Node *n) {
|
|||
Delattr(looking_fragments,name);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (code && type) {
|
||||
SwigType *rtype = SwigType_typedef_resolve_all(type);
|
||||
if (!Equal(type,rtype)) {
|
||||
String *name = Copy(Getattr(n,k_value));
|
||||
Append(name,rtype);
|
||||
Swig_fragment_emit(name);
|
||||
Delete(name);
|
||||
}
|
||||
Delete(rtype);
|
||||
}
|
||||
} else if (!code && type) {
|
||||
SwigType *rtype = SwigType_typedef_resolve_all(type);
|
||||
if (!Equal(type,rtype)) {
|
||||
String *name = Copy(Getattr(n,k_value));
|
||||
String *mangle = Swig_string_mangle(type);
|
||||
Append(name,mangle);
|
||||
Setfile(name, Getfile(n));
|
||||
Setline(name, Getline(n));
|
||||
Swig_fragment_emit(name);
|
||||
Delete(mangle);
|
||||
Delete(name);
|
||||
}
|
||||
Delete(rtype);
|
||||
}
|
||||
|
||||
if (!code) {
|
||||
Swig_warning(WARN_FRAGMENT_NOT_FOUND, Getfile(n), Getline(n), "Fragment '%s' not found.\n", name);
|
||||
}
|
||||
tok = pc ? pc + 1 : 0;
|
||||
if (tok) {
|
||||
pc = char_index(tok,',');
|
||||
|
|
|
|||
|
|
@ -1358,7 +1358,11 @@ Printf(stdout, "Swig_typemap_lookup %s [%s %s]\n", op, type, pname ? pname : "NO
|
|||
sprintf(temp,"%s:fragment", cop);
|
||||
f = Getattr(node,tmop_name(temp));
|
||||
if (f) {
|
||||
Swig_fragment_emit(f);
|
||||
String *fname = Copy(f);
|
||||
Setfile(fname, Getfile(node));
|
||||
Setline(fname, Getline(node));
|
||||
Swig_fragment_emit(fname);
|
||||
Delete(fname);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1433,7 +1437,11 @@ Swig_typemap_emit_code_fragments(const String_or_char *op, Parm *p) {
|
|||
String *temp = NewStringf("%s:fragment",op);
|
||||
String *f = Getattr(p,tmop_name(temp));
|
||||
if (f) {
|
||||
Swig_fragment_emit(f);
|
||||
String *fname = Copy(f);
|
||||
Setfile(fname, Getfile(p));
|
||||
Setline(fname, Getline(p));
|
||||
Swig_fragment_emit(fname);
|
||||
Delete(fname);
|
||||
}
|
||||
Delete(temp);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue