Move Swig_locator from scanner.c to cscanner.c. Fix file and line error/warning reporting fixes where SWIG macros are used within {} braces (where the preprocessor expands macros), for example macros within %inline {...} and %fragment(...) {...} and nested structs. Basically anything that results ina call to skip_balanced() in the parser/preprocessor.
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@12227 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
ea9275ca08
commit
31af118c41
7 changed files with 284 additions and 109 deletions
103
Examples/test-suite/errors/cpp_macro_locator.i
Normal file
103
Examples/test-suite/errors/cpp_macro_locator.i
Normal file
|
|
@ -0,0 +1,103 @@
|
|||
%module xxx
|
||||
|
||||
// Test the SWIG preprocessor locator effects on reporting line numbers in warnings when processing SWIG (multiline) macros
|
||||
|
||||
// The ignored overloaded methods warnings should have the correct line number reporting
|
||||
// {} blocks are tested, where the preprocessor expands the macros
|
||||
|
||||
%define CLASSMACRO(KLASS)
|
||||
class KLASS
|
||||
{
|
||||
public:
|
||||
KLASS() {}
|
||||
void methodX(int *) {}
|
||||
void methodX(const int *) {}
|
||||
};
|
||||
%enddef
|
||||
|
||||
%{
|
||||
#define CLASSMACRO(KLASS) \
|
||||
class KLASS \
|
||||
{ \
|
||||
public: \
|
||||
KLASS() {} \
|
||||
void methodX(int *) {} \
|
||||
void methodX(const int *) {} \
|
||||
};
|
||||
%}
|
||||
|
||||
%{
|
||||
#define VARIABLEMACRO(NAME) double NAME;
|
||||
struct Outer {
|
||||
struct Inner {
|
||||
VARIABLEMACRO(MyInnerVar)
|
||||
};
|
||||
};
|
||||
void overload1(int *) {}
|
||||
void overload1(const int *) {}
|
||||
void overload2(int *) {}
|
||||
void overload2(const int *) {}
|
||||
void overload3(int *) {}
|
||||
void overload3(const int *) {}
|
||||
%}
|
||||
|
||||
%define VARIABLEMACRO(NAME)
|
||||
double NAME;
|
||||
%enddef
|
||||
struct Outer {
|
||||
struct Inner {
|
||||
VARIABLEMACRO(MyInnerVar)
|
||||
};
|
||||
};
|
||||
void overload1(int *) {}
|
||||
void overload1(const int *) {}
|
||||
|
||||
%fragment("FragmentMethod", "header") {
|
||||
void fragmentMethod() {
|
||||
}
|
||||
VARIABLEMACRO(fragVar)
|
||||
}
|
||||
void overload2(int *) {}
|
||||
void overload2(const int *) {}
|
||||
|
||||
%inline {
|
||||
CLASSMACRO(Klass1)
|
||||
}
|
||||
#warning inline warning message one
|
||||
void overload3(int *) {}
|
||||
void overload3(const int *) {}
|
||||
|
||||
%{
|
||||
struct Classic {
|
||||
Classic() {
|
||||
VARIABLEMACRO(inconstructor)
|
||||
}
|
||||
double value;
|
||||
};
|
||||
void overload4(int *) {}
|
||||
void overload4(const int *) {}
|
||||
void overload5(int *) {}
|
||||
void overload5(const int *) {}
|
||||
%}
|
||||
|
||||
struct Classic {
|
||||
Classic() {
|
||||
VARIABLEMACRO(inconstructor)
|
||||
}
|
||||
double value;
|
||||
};
|
||||
void overload4(int *) {}
|
||||
void overload4(const int *) {}
|
||||
|
||||
%inline {
|
||||
void overloadinline1(int *) {}
|
||||
void overloadinline1(const int *) {}
|
||||
CLASSMACRO(Klass2)
|
||||
#warning an inline warning message 2
|
||||
void overloadinline2(int *) {}
|
||||
void overloadinline2(const int *) {}
|
||||
}
|
||||
void overload5(int *) {}
|
||||
void overload5(const int *) {}
|
||||
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue