Fix #2149523 - Incorrect line number reporting in errors after parsing macros. Remove extraneous extra line in preprocessed output which would sometimes lead to error/warning messages two lines after the end of the file
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@12211 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
f6cd7912e3
commit
122bc852f9
6 changed files with 73 additions and 9 deletions
|
|
@ -5,6 +5,15 @@ See the RELEASENOTES file for a summary of changes in each release.
|
||||||
Version 2.0.1 (in progress)
|
Version 2.0.1 (in progress)
|
||||||
===========================
|
===========================
|
||||||
|
|
||||||
|
2010-09-10: wsfulton
|
||||||
|
Remove extraneous extra line in preprocessed output after including files
|
||||||
|
which would sometimes lead to error/warning messages two lines after the
|
||||||
|
end of the file.
|
||||||
|
|
||||||
|
2010-09-10: wsfulton
|
||||||
|
Fix #2149523 - Incorrect line number reporting in errors after parsing macros
|
||||||
|
containing C++ comments.
|
||||||
|
|
||||||
2010-09-08: olly
|
2010-09-08: olly
|
||||||
[PHP] Fix handling of OUTPUT typemaps (Patch from Ryan in SF#3058394).
|
[PHP] Fix handling of OUTPUT typemaps (Patch from Ryan in SF#3058394).
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -26,13 +26,15 @@ c_varargs
|
||||||
c_varargs_neg
|
c_varargs_neg
|
||||||
nomodule
|
nomodule
|
||||||
pp_badeval
|
pp_badeval
|
||||||
pp_deprecated
|
pp_constant
|
||||||
pp_defined
|
pp_defined
|
||||||
pp_macro_defined_unterminated
|
pp_deprecated
|
||||||
pp_illegal_argument
|
pp_illegal_argument
|
||||||
pp_macro_args
|
pp_macro_args
|
||||||
pp_macro_badchar
|
pp_macro_badchar
|
||||||
|
pp_macro_defined_unterminated
|
||||||
pp_macro_expansion
|
pp_macro_expansion
|
||||||
|
pp_macro_inline_unterminated
|
||||||
pp_macro_nargs
|
pp_macro_nargs
|
||||||
pp_macro_redef
|
pp_macro_redef
|
||||||
pp_macro_rparen
|
pp_macro_rparen
|
||||||
|
|
|
||||||
43
Examples/test-suite/errors/pp_constant.i
Normal file
43
Examples/test-suite/errors/pp_constant.i
Normal file
|
|
@ -0,0 +1,43 @@
|
||||||
|
%module xxx
|
||||||
|
|
||||||
|
/* Test preprocessor comments and their effect on line number reporting on later errors */
|
||||||
|
|
||||||
|
#define A1 1234
|
||||||
|
#define A2 1234 /*C comment*/
|
||||||
|
#define A3 1234
|
||||||
|
|
||||||
|
%constant int aaa=;
|
||||||
|
|
||||||
|
#define B1 1234
|
||||||
|
#define B2 1234 //C++ comment
|
||||||
|
#define B3 1234
|
||||||
|
|
||||||
|
%constant int bbb=;
|
||||||
|
|
||||||
|
#define C1 1234
|
||||||
|
#define C2 1234 /*multiline
|
||||||
|
C
|
||||||
|
comment */
|
||||||
|
#define C3 1234
|
||||||
|
|
||||||
|
%constant int ccc=;
|
||||||
|
|
||||||
|
#define D1 1234
|
||||||
|
#define /*C Comment*/ D2 1234
|
||||||
|
#define D3 1234
|
||||||
|
|
||||||
|
%constant int ddd=;
|
||||||
|
|
||||||
|
#define E1 1234
|
||||||
|
#/*C comment*/define E2 1234
|
||||||
|
#define E3 1234
|
||||||
|
|
||||||
|
%constant int eee=;
|
||||||
|
|
||||||
|
#define F1 1234
|
||||||
|
#define F2 1234 \
|
||||||
|
// C comment
|
||||||
|
#define F3 1234
|
||||||
|
|
||||||
|
%constant int fff=;
|
||||||
|
|
||||||
11
Examples/test-suite/errors/pp_macro_inline_unterminated.i
Normal file
11
Examples/test-suite/errors/pp_macro_inline_unterminated.i
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
%module xxx
|
||||||
|
|
||||||
|
%define foo(a,x)
|
||||||
|
int ii;
|
||||||
|
%enddef
|
||||||
|
|
||||||
|
%inline %{
|
||||||
|
struct Struct {
|
||||||
|
foo(2,
|
||||||
|
};
|
||||||
|
%}
|
||||||
|
|
@ -1445,15 +1445,14 @@ String *Preprocessor_parse(String *s) {
|
||||||
state = 43;
|
state = 43;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 46:
|
case 46: /* in C++ comment */
|
||||||
if (c == '\n') {
|
if (c == '\n') {
|
||||||
Ungetc(c, s);
|
Ungetc(c, s);
|
||||||
cpp_lines++;
|
|
||||||
state = 50;
|
state = 50;
|
||||||
} else
|
} else
|
||||||
Putc(c, comment);
|
Putc(c, comment);
|
||||||
break;
|
break;
|
||||||
case 47:
|
case 47: /* in C comment */
|
||||||
if (c == '*')
|
if (c == '*')
|
||||||
state = 48;
|
state = 48;
|
||||||
else
|
else
|
||||||
|
|
@ -1638,7 +1637,7 @@ String *Preprocessor_parse(String *s) {
|
||||||
}
|
}
|
||||||
s2 = Preprocessor_parse(s1);
|
s2 = Preprocessor_parse(s1);
|
||||||
addline(ns, s2, allow);
|
addline(ns, s2, allow);
|
||||||
Append(ns, "\n]");
|
Append(ns, "]");
|
||||||
if (dirname) {
|
if (dirname) {
|
||||||
Swig_pop_directory();
|
Swig_pop_directory();
|
||||||
}
|
}
|
||||||
|
|
@ -1784,7 +1783,7 @@ String *Preprocessor_parse(String *s) {
|
||||||
pop_imported();
|
pop_imported();
|
||||||
}
|
}
|
||||||
addline(ns, s2, allow);
|
addline(ns, s2, allow);
|
||||||
Append(ns, "\n]");
|
Append(ns, "]");
|
||||||
Delete(s2);
|
Delete(s2);
|
||||||
Delete(s1);
|
Delete(s1);
|
||||||
}
|
}
|
||||||
|
|
@ -1845,7 +1844,6 @@ String *Preprocessor_parse(String *s) {
|
||||||
Seek(value, 0, SEEK_SET);
|
Seek(value, 0, SEEK_SET);
|
||||||
Preprocessor_define(value, 1);
|
Preprocessor_define(value, 1);
|
||||||
}
|
}
|
||||||
/* Putc('\n',ns); */
|
|
||||||
addline(ns, value, 0);
|
addline(ns, value, 0);
|
||||||
state = 0;
|
state = 0;
|
||||||
}
|
}
|
||||||
|
|
@ -1884,6 +1882,5 @@ String *Preprocessor_parse(String *s) {
|
||||||
Delete(comment);
|
Delete(comment);
|
||||||
Delete(chunk);
|
Delete(chunk);
|
||||||
|
|
||||||
/* fprintf(stderr,"cpp: %d\n", Len(Getattr(cpp,"symbols"))); */
|
|
||||||
return ns;
|
return ns;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -221,6 +221,8 @@ String *Swig_read_file(FILE *f) {
|
||||||
Append(str, buffer);
|
Append(str, buffer);
|
||||||
}
|
}
|
||||||
len = Len(str);
|
len = Len(str);
|
||||||
|
/* Add a newline if not present on last line -- the preprocessor seems to
|
||||||
|
* rely on \n and not EOF terminating lines */
|
||||||
if (len) {
|
if (len) {
|
||||||
char *cstr = Char(str);
|
char *cstr = Char(str);
|
||||||
if (cstr[len - 1] != '\n') {
|
if (cstr[len - 1] != '\n') {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue